From 3cb1d71747bf4821a5a6a73c1b95dad868f96bc8 Mon Sep 17 00:00:00 2001 From: Alexander Lehr Date: Mon, 27 Nov 2023 17:42:21 +0100 Subject: [PATCH] init --- Aufgabe_3_1_2/sketch_nov3a/sketch_nov3a.ino | 91 +++++++++ Aufgabe_4/.gitignore | 5 + Aufgabe_4/.idea/.gitignore | 8 + Aufgabe_4/.idea/Aufgabe_4.iml | 2 + Aufgabe_4/.idea/editor.xml | 6 + Aufgabe_4/.idea/misc.xml | 4 + Aufgabe_4/.idea/modules.xml | 8 + Aufgabe_4/.vscode/extensions.json | 10 + .../CMakeFiles/clion-Debug-log.txt | 1 + Aufgabe_4/include/README | 39 ++++ Aufgabe_4/lib/README | 46 +++++ Aufgabe_4/platformio.ini | 14 ++ Aufgabe_4/src/Notenhöhen.xlsx | Bin 0 -> 14280 bytes Aufgabe_4/src/fuer_elise.h | 44 +++++ Aufgabe_4/src/imperial_march.h | 57 ++++++ Aufgabe_4/src/keys.h | 186 ++++++++++++++++++ Aufgabe_4/src/main.cpp | 83 ++++++++ Aufgabe_4/test/README | 11 ++ 18 files changed, 615 insertions(+) create mode 100644 Aufgabe_3_1_2/sketch_nov3a/sketch_nov3a.ino create mode 100644 Aufgabe_4/.gitignore create mode 100644 Aufgabe_4/.idea/.gitignore create mode 100644 Aufgabe_4/.idea/Aufgabe_4.iml create mode 100644 Aufgabe_4/.idea/editor.xml create mode 100644 Aufgabe_4/.idea/misc.xml create mode 100644 Aufgabe_4/.idea/modules.xml create mode 100644 Aufgabe_4/.vscode/extensions.json create mode 100644 Aufgabe_4/cmake-build-debug/CMakeFiles/clion-Debug-log.txt create mode 100644 Aufgabe_4/include/README create mode 100644 Aufgabe_4/lib/README create mode 100644 Aufgabe_4/platformio.ini create mode 100644 Aufgabe_4/src/Notenhöhen.xlsx create mode 100644 Aufgabe_4/src/fuer_elise.h create mode 100644 Aufgabe_4/src/imperial_march.h create mode 100644 Aufgabe_4/src/keys.h create mode 100644 Aufgabe_4/src/main.cpp create mode 100644 Aufgabe_4/test/README diff --git a/Aufgabe_3_1_2/sketch_nov3a/sketch_nov3a.ino b/Aufgabe_3_1_2/sketch_nov3a/sketch_nov3a.ino new file mode 100644 index 0000000..c7c9b20 --- /dev/null +++ b/Aufgabe_3_1_2/sketch_nov3a/sketch_nov3a.ino @@ -0,0 +1,91 @@ +#include /* Hardware-Definitionen */ +#include +#include /* Für uint8_t */ +#include "keys.h" /* Notennummern und -dauern */ + +/* Anzahl der Einzelschritte in der Melodie */ +#define NOTE_COUNT 71 + +/* Tempo in Schlägen pro Minute */ +#define TEMPO 103 + + +uint8_t note_pitches[NOTE_COUNT] = { + KEY_G3, KEY_G3, KEY_G3, KEY_Eb3, KEY_Bb3, + KEY_G3, KEY_Eb3, KEY_B3, KEY_G3, + KEY_D4, KEY_D4, KEY_D4, KEY_Eb4, KEY_Bb3, + KEY_Gb3, KEY_Eb3, KEY_Bb3, KEY_G3, + + KEY_G4, KEY_G3, KEY_G3, KEY_G4, KEY_Fis4, KEY_F4, + KEY_E4, KEY_Dis4, KEY_E4, PAUSE, KEY_Gis3, KEY_Cis4, KEY_C4, KEY_B3, + KEY_Bb3, KEY_A3, KEY_Bb3, PAUSE, KEY_Eb3, KEY_Gb3, KEY_Eb3, KEY_Gb3, + KEY_G3, KEY_G3, KEY_Bb3, KEY_D4, + + KEY_G4, KEY_G3, KEY_G3, KEY_G4, KEY_Fis4, KEY_F4, + KEY_E4, KEY_Dis4, KEY_E4, PAUSE, KEY_Gis3, KEY_Cis4, KEY_C4, KEY_B3, + KEY_Bb3, KEY_A3, KEY_Bb3, PAUSE, KEY_Eb3, KEY_Gb3, KEY_Eb3, KEY_Bb3, + + KEY_G3, KEY_Eb3, KEY_Bb3, KEY_G3, + + PAUSE +}; + +/* Tonlängen (in 1/48-Noten) */ +uint8_t note_durations[NOTE_COUNT] = { + DUR_4th, DUR_4th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_4th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + + DUR_whole +}; + +int main(int argc, char** argv) { + + + // Tasterpin als Eingang konfigurieren + DDRD &= ~(1 << 6); + // Pull-up Widerstand für den Taster aktivieren + PORTD |= (1 << 6); + + int i = 2; + + bool pressed = false; + + while (1) { + + if (!(PIND & (1 << 6))) { + pressed = true; + } + + if(pressed) { + + DDRD = (1< + \ No newline at end of file diff --git a/Aufgabe_4/.idea/editor.xml b/Aufgabe_4/.idea/editor.xml new file mode 100644 index 0000000..46540da --- /dev/null +++ b/Aufgabe_4/.idea/editor.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/Aufgabe_4/.idea/misc.xml b/Aufgabe_4/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/Aufgabe_4/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Aufgabe_4/.idea/modules.xml b/Aufgabe_4/.idea/modules.xml new file mode 100644 index 0000000..fb4a158 --- /dev/null +++ b/Aufgabe_4/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Aufgabe_4/.vscode/extensions.json b/Aufgabe_4/.vscode/extensions.json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/Aufgabe_4/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/Aufgabe_4/cmake-build-debug/CMakeFiles/clion-Debug-log.txt b/Aufgabe_4/cmake-build-debug/CMakeFiles/clion-Debug-log.txt new file mode 100644 index 0000000..d6e8f8a --- /dev/null +++ b/Aufgabe_4/cmake-build-debug/CMakeFiles/clion-Debug-log.txt @@ -0,0 +1 @@ +CMakeLists.txt not found in /Users/alexanderlehr/Nextcloud/Studium/Semester 3/Rechnerarchitektur/Aufgabe_4 Select CMakeLists.txt diff --git a/Aufgabe_4/include/README b/Aufgabe_4/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/Aufgabe_4/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/Aufgabe_4/lib/README b/Aufgabe_4/lib/README new file mode 100644 index 0000000..6debab1 --- /dev/null +++ b/Aufgabe_4/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in a an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/Aufgabe_4/platformio.ini b/Aufgabe_4/platformio.ini new file mode 100644 index 0000000..ea23b77 --- /dev/null +++ b/Aufgabe_4/platformio.ini @@ -0,0 +1,14 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:uno] +platform = atmelavr +board = uno +framework = arduino diff --git a/Aufgabe_4/src/Notenhöhen.xlsx b/Aufgabe_4/src/Notenhöhen.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3a125d02437fa932e2e0b2b98c52579927d71750 GIT binary patch literal 14280 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 KRf1-Dsr?@-8cj?9 literal 0 HcmV?d00001 diff --git a/Aufgabe_4/src/fuer_elise.h b/Aufgabe_4/src/fuer_elise.h new file mode 100644 index 0000000..1e7dc28 --- /dev/null +++ b/Aufgabe_4/src/fuer_elise.h @@ -0,0 +1,44 @@ +/* Melodie für "Fuer Elise" von Ludwig van Beethoven (1770-1827) */ +#ifndef FUER_ELISE_H +#define FUER_ELISE_H + +#include /* Für uint8_t */ +#include "keys.h" /* Notennummern und -dauern */ + +/* Anzahl der Einzelschritte in der Melodie */ +#define NOTE_COUNT 40 + +/* Tempo in Schlägen pro Minute */ +#define TEMPO 68 + +/* Tonhöhen */ +uint8_t note_pitches[NOTE_COUNT] = { + KEY_E5, KEY_Dis5, + KEY_E5, KEY_Dis5, KEY_E5, KEY_B4, KEY_D5, KEY_C5, + KEY_A4, PAUSE, KEY_C4, KEY_E4, KEY_A4, + KEY_B4, PAUSE, KEY_E4, KEY_Gis4, KEY_B4, + KEY_C5, PAUSE, KEY_E4, KEY_E5, KEY_Dis5, + + KEY_E5, KEY_Dis5, KEY_E5, KEY_B4, KEY_D5, KEY_C5, + KEY_A4, PAUSE, KEY_C4, KEY_E4, KEY_A4, + KEY_B4, PAUSE, KEY_D4, KEY_C5, KEY_B4, + KEY_A4, +}; + +/* Tonlängen (in 1/48-Noten) */ +uint8_t note_durations[NOTE_COUNT] = { + /* Zeile 1 */ + DUR_16th, DUR_16th, + DUR_16th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_8th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_8th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_8th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + + /* Zeile 2 */ + DUR_16th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_8th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_8th, DUR_16th, DUR_16th, DUR_16th, DUR_16th, + DUR_4th, +}; + +#endif /* FUER_ELISE_H */ diff --git a/Aufgabe_4/src/imperial_march.h b/Aufgabe_4/src/imperial_march.h new file mode 100644 index 0000000..9917db1 --- /dev/null +++ b/Aufgabe_4/src/imperial_march.h @@ -0,0 +1,57 @@ +/* Melodie für den "Imperial March" aus Star Wars (1977) */ +#ifndef IMPERIAL_MARCH_H +#define IMPERIAL_MARCH_H + +#include /* Für uint8_t */ +#include "keys.h" /* Notennummern und -dauern */ + +/* Anzahl der Einzelschritte in der Melodie */ +#define NOTE_COUNT 71 + +/* Tempo in Schlägen pro Minute */ +#define TEMPO 103 + +/* Tonhöhen */ +// es, b +uint8_t note_pitches[NOTE_COUNT] = { + KEY_G3, KEY_G3, KEY_G3, KEY_Eb3, KEY_Bb3, + KEY_G3, KEY_Eb3, KEY_B3, KEY_G3, + KEY_D4, KEY_D4, KEY_D4, KEY_Eb4, KEY_Bb3, + KEY_Gb3, KEY_Eb3, KEY_Bb3, KEY_G3, + + KEY_G4, KEY_G3, KEY_G3, KEY_G4, KEY_Fis4, KEY_F4, + KEY_E4, KEY_Dis4, KEY_E4, PAUSE, KEY_Gis3, KEY_Cis4, KEY_C4, KEY_B3, + KEY_Bb3, KEY_A3, KEY_Bb3, PAUSE, KEY_Eb3, KEY_Gb3, KEY_Eb3, KEY_Gb3, + KEY_G3, KEY_G3, KEY_Bb3, KEY_D4, + + KEY_G4, KEY_G3, KEY_G3, KEY_G4, KEY_Fis4, KEY_F4, + KEY_E4, KEY_Dis4, KEY_E4, PAUSE, KEY_Gis3, KEY_Cis4, KEY_C4, KEY_B3, + KEY_Bb3, KEY_A3, KEY_Bb3, PAUSE, KEY_Eb3, KEY_Gb3, KEY_Eb3, KEY_Bb3, + + KEY_G3, KEY_Eb3, KEY_Bb3, KEY_G3, + + PAUSE +}; + +/* Tonlängen (in 1/48-Noten) */ +uint8_t note_durations[NOTE_COUNT] = { + DUR_4th, DUR_4th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_4th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_4th, DUR_8th_dot, DUR_16th, + + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_16th, DUR_16th, DUR_8th, DUR_8th, DUR_8th, DUR_4th, DUR_8th_dot, DUR_16th, + DUR_4th, DUR_8th_dot, DUR_16th, DUR_half, + + DUR_whole +}; + +#endif /* IMPERIAL_MARCH_H */ diff --git a/Aufgabe_4/src/keys.h b/Aufgabe_4/src/keys.h new file mode 100644 index 0000000..af115cc --- /dev/null +++ b/Aufgabe_4/src/keys.h @@ -0,0 +1,186 @@ +#ifndef KEYS_H +#define KEYS_H + +/* Notendauern in 1/96 */ +#define DUR_16th_tri 4 /* 16tel-Triole */ +#define DUR_16th 6 /* 16tel-Note */ +#define DUR_8th_tri 8 /* 8-tel-Note mit Punkt */ +#define DUR_16th_dot 9 /* 16tel-Note mit Punkt */ +#define DUR_8th 12 /* 8-tel-Note */ +#define DUR_4th_tri 16 /* 4-tel-Triole */ +#define DUR_8th_dot 18 /* 8-tel-Note mit Punkt*/ +#define DUR_4th 24 /* 4-tel-Note */ +#define DUR_half_tri 32 /* Halbetriole */ +#define DUR_4th_dot 36 /* 4-tel-Note mit Punkt */ +#define DUR_half 48 /* halbe Note */ +#define DUR_half_dot 72 /* halbe Note mit Punkt */ +#define DUR_whole 96 /* ganze Note */ +#define DUR_whole_dot 144 /* ganze Note mit Punkt */ + +/* Notennummern */ + +/* Pausen-Marker */ +#define PAUSE 0 + +/* Basis-Nummern */ +#define KEY_C 0 +#define KEY_Cis 1 +#define KEY_D 2 +#define KEY_Dis 3 +#define KEY_E 4 +#define KEY_F 5 +#define KEY_Fis 6 +#define KEY_G 7 +#define KEY_Gis 8 +#define KEY_A 9 +#define KEY_Ais 10 +#define KEY_B 11 + + +/* Hilfsmakro für Oktaven-Umrechnung */ +#define KEY(base, octave) ((base)+12*(octave)-8) + +/* Oktave 0 */ +#define KEY_A0 KEY(KEY_A, 0) +#define KEY_Ais0 KEY(KEY_Ais, 0) +#define KEY_Bb0 KEY_Ais0 +#define KEY_B0 KEY(KEY_B, 0) + +/* Oktave 1 */ +#define KEY_C1 KEY(KEY_C, 1) +#define KEY_Cis1 KEY(KEY_Cis, 1) +#define KEY_Db1 KEY_Cis1 +#define KEY_D1 KEY(KEY_D, 1) +#define KEY_Dis1 KEY(KEY_Dis, 1) +#define KEY_Eb1 KEY_Dis1 +#define KEY_E1 KEY(KEY_E, 1) +#define KEY_F1 KEY(KEY_F, 1) +#define KEY_Fis1 KEY(KEY_Fis, 1) +#define KEY_Gb1 KEY_Fis1 +#define KEY_G1 KEY(KEY_G, 1) +#define KEY_Gis1 KEY(KEY_Gis, 1) +#define KEY_Ab1 KEY_Gis1 +#define KEY_A1 KEY(KEY_A, 1) +#define KEY_Ais1 KEY(KEY_Ais, 1) +#define KEY_Bb1 KEY_Ais1 +#define KEY_B1 KEY(KEY_B, 1) + +/* Oktave 2 */ +#define KEY_C2 KEY(KEY_C, 2) +#define KEY_Cis2 KEY(KEY_Cis, 2) +#define KEY_Db2 KEY_Cis2 +#define KEY_D2 KEY(KEY_D, 2) +#define KEY_Dis2 KEY(KEY_Dis, 2) +#define KEY_Eb2 KEY_Dis2 +#define KEY_E2 KEY(KEY_E, 2) +#define KEY_F2 KEY(KEY_F, 2) +#define KEY_Fis2 KEY(KEY_Fis, 2) +#define KEY_Gb2 KEY_Fis2 +#define KEY_G2 KEY(KEY_G, 2) +#define KEY_Gis2 KEY(KEY_Gis, 2) +#define KEY_Ab2 KEY_Gis2 +#define KEY_A2 KEY(KEY_A, 2) +#define KEY_Ais2 KEY(KEY_Ais, 2) +#define KEY_Bb2 KEY_Ais2 +#define KEY_B2 KEY(KEY_B, 2) + +/* Oktave 3 */ +#define KEY_C3 KEY(KEY_C, 3) +#define KEY_Cis3 KEY(KEY_Cis, 3) +#define KEY_Db3 KEY_Cis3 +#define KEY_D3 KEY(KEY_D, 3) +#define KEY_Dis3 KEY(KEY_Dis, 3) +#define KEY_Eb3 KEY_Dis3 +#define KEY_E3 KEY(KEY_E, 3) +#define KEY_F3 KEY(KEY_F, 3) +#define KEY_Fis3 KEY(KEY_Fis, 3) +#define KEY_Gb3 KEY_Fis3 +#define KEY_G3 KEY(KEY_G, 3) +#define KEY_Gis3 KEY(KEY_Gis, 3) +#define KEY_Ab3 KEY_Gis3 +#define KEY_A3 KEY(KEY_A, 3) +#define KEY_Ais3 KEY(KEY_Ais, 3) +#define KEY_Bb3 KEY_Ais3 +#define KEY_B3 KEY(KEY_B, 3) + +/* Oktave 4 */ +#define KEY_C4 KEY(KEY_C, 4) +#define KEY_Cis4 KEY(KEY_Cis, 4) +#define KEY_Db4 KEY_Cis4 +#define KEY_D4 KEY(KEY_D, 4) +#define KEY_Dis4 KEY(KEY_Dis, 4) +#define KEY_Eb4 KEY_Dis4 +#define KEY_E4 KEY(KEY_E, 4) +#define KEY_F4 KEY(KEY_F, 4) +#define KEY_Fis4 KEY(KEY_Fis, 4) +#define KEY_Gb4 KEY_Fis4 +#define KEY_G4 KEY(KEY_G, 4) +#define KEY_Gis4 KEY(KEY_Gis, 4) +#define KEY_Ab4 KEY_Gis4 +#define KEY_A4 KEY(KEY_A, 4) +#define KEY_Ais4 KEY(KEY_Ais, 4) +#define KEY_Bb4 KEY_Ais4 +#define KEY_B4 KEY(KEY_B, 4) + +/* Oktave 5 */ +#define KEY_C5 KEY(KEY_C, 5) +#define KEY_Cis5 KEY(KEY_Cis, 5) +#define KEY_Db5 KEY_Cis5 +#define KEY_D5 KEY(KEY_D, 5) +#define KEY_Dis5 KEY(KEY_Dis, 5) +#define KEY_Eb5 KEY_Dis5 +#define KEY_E5 KEY(KEY_E, 5) +#define KEY_F5 KEY(KEY_F, 5) +#define KEY_Fis5 KEY(KEY_Fis, 5) +#define KEY_Gb5 KEY_Fis5 +#define KEY_G5 KEY(KEY_G, 5) +#define KEY_Gis5 KEY(KEY_Gis, 5) +#define KEY_Ab5 KEY_Gis5 +#define KEY_A5 KEY(KEY_A, 5) +#define KEY_Ais5 KEY(KEY_Ais, 5) +#define KEY_Bb5 KEY_Ais5 +#define KEY_B5 KEY(KEY_B, 5) + +/* Oktave 6 */ +#define KEY_C6 KEY(KEY_C, 6) +#define KEY_Cis6 KEY(KEY_Cis, 6) +#define KEY_Db6 KEY_Cis6 +#define KEY_D6 KEY(KEY_D, 6) +#define KEY_Dis6 KEY(KEY_Dis, 6) +#define KEY_Eb6 KEY_Dis6 +#define KEY_E6 KEY(KEY_E, 6) +#define KEY_F6 KEY(KEY_F, 6) +#define KEY_Fis6 KEY(KEY_Fis, 6) +#define KEY_Gb6 KEY_Fis6 +#define KEY_G6 KEY(KEY_G, 6) +#define KEY_Gis6 KEY(KEY_Gis, 6) +#define KEY_Ab6 KEY_Gis6 +#define KEY_A6 KEY(KEY_A, 6) +#define KEY_Ais6 KEY(KEY_Ais, 6) +#define KEY_Bb6 KEY_Ais6 +#define KEY_B6 KEY(KEY_B, 6) + +/* Oktave 7 */ +#define KEY_C7 KEY(KEY_C, 7) +#define KEY_Cis7 KEY(KEY_Cis, 7) +#define KEY_Db7 KEY_Cis7 +#define KEY_D7 KEY(KEY_D, 7) +#define KEY_Dis7 KEY(KEY_Dis, 7) +#define KEY_Eb7 KEY_Dis7 +#define KEY_E7 KEY(KEY_E, 7) +#define KEY_F7 KEY(KEY_F, 7) +#define KEY_Fis7 KEY(KEY_Fis, 7) +#define KEY_Gb7 KEY_Fis7 +#define KEY_G7 KEY(KEY_G, 7) +#define KEY_Gis7 KEY(KEY_Gis, 7) +#define KEY_Ab7 KEY_Gis7 +#define KEY_A7 KEY(KEY_A, 7) +#define KEY_Ais7 KEY(KEY_Ais, 7) +#define KEY_Bb7 KEY_Ais7 +#define KEY_B7 KEY(KEY_B, 7) + +/* Oktave 8 */ +#define KEY_C8 KEY(KEY_C, 8) + + +#endif /* KEYS_H */ diff --git a/Aufgabe_4/src/main.cpp b/Aufgabe_4/src/main.cpp new file mode 100644 index 0000000..3c34962 --- /dev/null +++ b/Aufgabe_4/src/main.cpp @@ -0,0 +1,83 @@ +/* + * Tonerzeugung: + * - Rechteckwelle wird über Timer1 im CTC-Mode erzeugt. + * - Output Compare für OC1A ist Toggle on Compare Match. + * - Timer 1 Prescaler wird auf 1/8 gesetzt + * - Die halbe Periodendauer schreiben wir in OCR1A. + * + * Tempo: + * - TEMPO gibt die Zahl der 1/4-Notendauern an + * - Wir brauchen 1/96-Notendauern. + * - Es gibt 24*TEMPO 1/96-Notendauern pro Sekunde. + * - Mit dem höchsten Prescaler 1/1024 können wir diese Länge nicht direkt erreichen. + * - Wir wählen den Prescaler 1/256 und zählen dann Takte anhand des TOV1-Flags. + * - Das entspricht einem Overflow-Takt von ca. 244Hz. + */ + +// COM1A1:COM1A0 = 01b (in TCCR1A) +// WGM13:WGM10 = 0100b (WGM11:WGM10 in TCCR1A, WGM13:WGM12 in TCCR1B) +// CS12:CS10 = 010b (in TCCR1B) +// OCR1A = Dauer der Halbwelle + +#include +#include +#include "keys.h" +#include "fuer_elise.h" +#include +#include "math.h" + +#define SPEAKER_PIN 0b10 +#define BUTTON_PIN 0b1 + +long int timerarray[] = + { + 36364, 34323, 32396, 30578, 28862, 27242, 25713, 24270, + 22908, 21622, 20408, 19263, 18182, 17161, 16198, 15289, + 14431, 13621, 12856, 12135, 11454, 10811, 10204, 9631, + 9091, 8581, 8099, 7645, 7215, 6810, 6428, 6067, 5727, + 5405, 5102, 4816, 4545, 4290, 4050, 3822, 3608, 3405, + 3214, 3034, 2863, 2703, 2551, 2408, 2273, 2145, 2025, + 1911, 1804, 1703, 1607, 1517, 1432, 1351, 1276, 1204, + 1136, 1073, 1012, 956, 902, 851, 804, 758, 716, 676, 638, 602, + 568, 536, 506, 478, 451, 426, 402, 379, 358, 338, 319, 301, 284, + 268, 253, 239 + }; + +bool sound = false; + +ISR(TIMER1_COMPA_vect) +{ + PORTB ^= (1 << PB1); +} + +int main() +{ + DDRB = SPEAKER_PIN; + PORTB = BUTTON_PIN; + + TCCR1A = (0 << COM1A1) | (1 << COM1A0) | (0 << WGM11) | (0 << WGM10); + TCCR1B = (0 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10); + + TIMSK1 |= (1<