EHaserl

Spielen mit dem EHaserl des easterHacks in München

Wisser: Wanda, Samaki
Mitwisser: Skruppy

Status: working, in progress
Tags: elektro, software, AVR, ehaserl, C

Löten

Programmieren:

Ausschalten, Schwänzchen drücken, einstecken, glücklich!

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

Ports

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)

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):

(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.

projects/ehaserl.txt · Zuletzt geändert: 2012/09/19 01:18 von wanda