====== EHaserl ====== ---- datatemplateentry project ---- template : :sys:tpl:project description : Spielen mit dem EHaserl des easterHacks in München coordinators : [[:users:wanda:]], [[:users:samaki:]] confidants : [[:users:skruppy:]] state_tags : working, in progress type_tags : elektro, software, AVR, ehaserl, C ---- ===== Löten ===== * Vorderseite: https://brezn.muc.ccc.de/~schneider/badge/board/brd-top1.png * Rückseite: https://brezn.muc.ccc.de/~schneider/badge/board/brd-bot1.png * Schaltplan: https://brezn.muc.ccc.de/~schneider/badge/board/sch.png * Tipps: http://wiki.muc.ccc.de/eh2010:badge ===== Programmieren: ===== Ausschalten, Schwänzchen drücken, einstecken, glücklich! *Beispiele: https://brezn.muc.ccc.de/svn/badge/ == Folgende Tools werden benoetigt: == sudo apt-get install avrdude avr-libc gcc-avr subversion == Code zu finden unter: == $ svn co https://brezn.muc.ccc.de/svn/badge == Flashen: == $ 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 ==Tipp== 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. ===== Chipinfo ===== http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf\\ \\ **ATmega88P**\\ * Flash (Kbytes): 8 * Pin Count: 32 * Max. Operating Frequency: 20 * CPU: 8-bit AVR === Pins === {{::atmega88p.png?350|}} {{::pins.png?350|}} === Ports === {{::ports.png?400|}} == leds == * RR - Pin 12 - PD6 (Rot rechts) * RL - Pin 15 - PB1 (Rot links) - PWM möglich * GL - Pin 16 - PB2 (Grün links) - PWM möglich * GR - Pin 17 - PB3 (Grün rechts) {{::leds.png?300|}} == Taster (an den Ohren) == Von der Rückseite aus betrachtet: * SL - Pin 14 - PB0 (Ohr links - das Kleine) * SR - Pin 13 - PD7 (Ohr rechts - das Große) == Piezo == * PIEZO - Pin 18 - PB4 == Lichtsensor == * LIGHT - Pin 24 - PC1 ===== C-Programme: Wie macht Fisch eigentlich... ===== ==== Töne mit dem Piezo ==== 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): \\ {{::pwm.png?300|}} \\ (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 ==== LED-Fading ==== Weil im eHaserl eine PWM nur an den beiden Augen möglich ist - nicht beim Piezo.