Ausschalten, Schwänzchen drücken, einstecken, glücklich!
sudo apt-get install avrdude avr-libc gcc-avr subversion
$ svn co https://brezn.muc.ccc.de/svn/badge
$ cd badge/examples/default (Beispiel) $ make
- ehaserl: Schalter auf AUS
- ehaserl: Taster (rechts unten) gedrueckt halten
- ehaserl: In USB einstecken
$ sudo make program
- ehaserl-Taster loslassen
=⇒ (Das geflashte Programm sollte nun starten)
Hinweis: ggf. Target im Makefile ändern
Für ein neues 'superprogramm.c' muss Fisch ggf. den richtigen Namen angeben =⇒
# Target file name (without extension). TARGET = superprogramm
Um zu gucken, ob das Haserl richtig eingesteckt ist, kann Fisch mit:
watch --interval 1 lsusb
prüfen, ob das Haserl in der Liste auftaucht.
http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf
ATmega88P
Von der Rückseite aus betrachtet:
Infos sind aus: http://www.infolexikon.de/blog/atmega-music/
1) Töne sind…was?!
Töne können weitgehend durch Sinus-Wellen erzeugt werden. Töne liegen wohl irgendwo zwischen 200Hz und 1,5kHz. Eine einzige Sinus-Welle, ein sauberer 8-bit Ton!
2) PWM (PulsWeitenModulation)
Wichtig zum Verständnis: die PWM ändert ihre Frequenz NIE, NIEMALS! Alles was sich ändert, sind die Pulsweiten, also die high/low-Phasen, in denen der Ausgang (z.B. Atmega8: PB1=OCR1A…Problem: beim ehaserl ist hier nicht der Piezo, sondern eine LED dran…schade!) getoggelt wird. Die PWM besitzt einen Counter, der ständig hochzählt, bei 8 bit von 0 bis 255.
Um die Pulsweite zu bestimmen, kann man nun einen Vergleichswert setzen. Ist dieser 0 gibt es keine high-phase, ist er 255, gibt es nur high-phasen.
Beispiel: Bei 128 sind die high-phasen z.B. genauso lang wie die low-phasen.
3) Wie stell ich das an?
Den Sinus im Atmega ausrechnen zu lassen würde die ganze Rechenzeit auffressen, der ist einfach nicht schnell genug für sowas.
Also erstellt man erstmal eine Tabelle für die Sinus-Werte, und die wird dann direkt ins Programm kodiert, so muss der Atmega nur noch i.d. Tabelle für die Werte nachschauen.
Frequenz-Tabelle:
// Noten-Frequenzen, // berechnet für 8Mhz und PWM ohne Prescaler #define c 542 #define cis 574 #define d 608 #define dis 644 #define e 682 #define f 722 #define fis 765 #define g 810 #define gis 858 #define a 908 #define b 962 #define h 1019
Zum Vergleich: die wirklichen Ton-Frequenzen
http://de.wikipedia.org/wiki/Frequenzen_der_gleichstufigen_Stimmung
(Frequenz/2=wert aus tabelle)
⇒ Folge:
Die Modulation wirkt wie eine Sinus-Spannung (obwohl es nur ein Wechsel von an und aus ist)
Bild (PWM und Sinus):
(Bild-Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Pwm.png&filetimestamp=20060323084447#file)
Weitere Infos:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29
http://www.arduino.cc/en/Tutorial/PlayMelody
Weil im eHaserl eine PWM nur an den beiden Augen möglich ist - nicht beim Piezo.