Ding Dong: ein elektronischer Türgong

von Michael Gaus

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller


Über 2 Taster können 2 verschiedene Sounds abgespielt werden und anschließend wird für ca. 3 Sekunden ein passendes Logo blinkend in der LED-Anzeige dargestellt. Taster 1 bewrikt eins Soundausgabe "dingdong" für den Türgong, als Logo wird eine Glocke dargestellt. Beim Betätigen des Tasters 2 ertönt eine Sprachausgabe "Sie haben Post" und es wird ein Briefumschlag angezeigt. Taster 2 könnte z.B. als Öffnerkontakt an der Klappe des Briefkastens angebracht werden, sodass er auslöst, sobald die Klappe angehoben wird, wenn Post eingeworfen wird. Die Soundausgabe erledigt der Atmega8 der Ping Pong Platine, indem er eine von 2 kleinen WAV-Dateien über die integrierte PWM-Einheit abspielt. Diese WAV-Dateien sind im on-chip Flash gespeichert, es wird kein zusätzlicher Speicher benötigt. Ziel war es, mit möglichst wenigen externen Bauelementen auszukommen. Hier werden nur 3 zusätzliche Bauteile plus die Taster benötigt.


Zusätzlich benötigte Hardware

a) Bauteile: 1 Kondensator, 1 Widerstand, Lautsprecher.

b) 2 Taster oder je nach gewünschtem Auslösekontakt auch Optokoppler oder Relais. Diese werden an den Portpins D.3 oder D.2 (also Lötpads D3 und D2) gegen GND angeschlossen. Die benötigten Pullup-Widerstände werden im Controller intern hinzugeschaltet.

Ein Schaltplan ist in der Datei dingdong_schaltplan.png zu finden.

Da mit einer minimalen Anzahl von Bauelementen ausgekommen werden soll, wurde auf den eigentlich erforderlichen Tiefpass am PWM-Ausgang des ATmega8 verzichtet. Stattdessen wird über einen Elko plus Vorwiderstand direkt ein kleiner Lautsprecher angeschlossen. Zu beachten ist, dass hier kein Verstärker und keine Aktivboxen angeschlossen werden dürfen, da diese ohne Tiefpass zerstört werden könnten.

Da der verwendete PWM-Ausgang OC1A (PB1) auf der Ping Pong Platine normalerweise die unterste LED-Reihe ansteuert, sollte man am besten den Widerstand R10 auslöten, damit keine weitere Belastung an diesem Pin hängt, die sich störend auf die Soundausgabe auswirkt.



Anzeige und Bedienung

Direkt nach dem Einschalten der Spannungsversorgung wird der Türgong aktiviert und danach das Logo blinkend angezeigt. Anschließend wird der Atmega8 in den stromsparenden Standybymodus versetzt. Sobald einer der beiden Taster betätigt wird, wird der Standbymodus beendet und der entsprechende Sound abgespielt sowie das Logo angezeigt. Wird während der Sound- / Logoausgabe der andere Taster betätigt, wird dies gespeichert und direkt anschließend der andere Sound abgespielt.
Ein Video kann hier angesehen werden: http://www.youtube.com/watch?v=5eaWmnauhWc


WAV-Dateien konvertieren

Die WAV-Dateien müssen folgendes Format aufweisen: RIFF-WAVE Format/PCM, 8-bit, mono und 4 kHz Samplingrate.
Der Flashspeicher des ATmega8 ist 8 kBytes groß. Für die Firmware sind 1,5 kBytes (also 1536 Bytes) reserviert, sodass für die beiden WAV-Dateien maximal 6656 Bytes zur Verfügung stehen. Das enspricht einer Gesamtspieldauer von ca. 1,6 Sekunden.
Die Firmware liegt im Bereich von 0x0000-0x05FF, ab 0x0600 beginnen die WAV-Dateien. Die Speicheraufteilung sieht wie folgt aus:
0x0000-0x05FF: Firmware
0x0600:        Anzahl der gespeicherten WAV-Dateien (hier 2)
0x0601-0x0602: Größe von WAV-Datei 1 (16-Bit Wert Highbyte / Lowbyte)
0x0603-0x0604: Größe von WAV-Datei 2 (16-Bit Wert Highbyte / Lowbyte)
0x0605-0x1FFF: WAV-Dateien ohne Header, hintereinander binär gespeichert

Falls die WAV-Datei noch nicht im oben genannten PCM-Format vorliegt, kann sie mit dem Freewaretool Audacity konvertiert werden.
Dazu öffnet man die Datei in Audacity und wählt unten links bei "Projektrate" den Punkt "Andere" aus und tippt dann 4000 ein für 4 KHz. Außerdem kann man bestimmte Bereiche der WAV-Datei markieren und ausschneiden, z.B. Pausen am Anfang oder Ende. Um bei Stereoformat auf Mono zu wechseln, klickt man im Kästchen mit dem Dateinamen auf den kleinen Pfeil und wählt "Stereotonspur aufteilen". Anschließend kann man z.B. den rechten Tonkanal durch Klick auf das X löschen und beim linken Tonkanal durch erneuten Klick auf den kleinen Pfeil "Mono" auswählen. Bei "Bearbeiten" => "Einstellungen" muss bei "Dateiformat" als unkomprimiertes Exportformat "WAV (Microsoft 8 bit PCM) eingestellt werden. Um die Datei zu speichern markiert man den gewünschten Bereich und wählt unter "Datei" den Punkt "Exportieren als WAV" aus. Nun müsste die Datei im korrekten Format vorliegen. Im Windows Explorer kann mit einem Rechtsklick auf die Datei unter "Eigenschaften" und dann "Dateiinfo" das Format nochmals überprüfen.

Um die WAV-Dateien in das Hexfile zur Programmierung des Atmega8 zu bekommen ist ein weiteres selbstgeschriebenes Tool "wav2pong" erforderlich, das im ZIP-File enthalten ist. Das Tool entfernt die 44 Bytes großen Header der WAV-Dateien und fügt diese zu einer Binärdatei zusammen, wobei am Anfang die Anzahl der gespeicherten WAV-Dateien sowie die Größen der Dateien abgespeichert werden. Anschließend wird die Binärdatei über ein hex2bin Tool in das Intelhex-Format konvertiert und in das Hexfile, das beim Kompilieren/Linken entstanden ist ab Adresse 0x0600 eingefügt, sodass am Ende eine Hexdatei bestehend aus Firmware und WAV-Dateien entsteht, die in den Atmega8 programmiert wird. Der komplette Konvertiervorgang wird über eine Batchdatei convert.bat gestartet.

Folgende Schritte sind erforderlich:
a) In das Verzeichnis "wav2pong" (im ZIP-File enthalten) wechseln.
b) Falls die Firmware geändert wurde, muss die neu erstellte Firmware dingdong.hex in das Verzeichnis wav2pong kopiert werden.
c) Die gewünschten WV-Dateien in das Verzeichnis wav2pong kopieren.
d) Die Datei setup.ini mit einem Texteditor öffnen und bei "file1" und "file2" die Dateinamen der WAV-Dateien eintragen.
e) Batchdatei convert.bat starten. Es werden die Dateien wav.bin (enthält den Bereich mit den WAV-Dateien, so wie bei der Speicheraufteilung ab 0x0600 beschrieben) und code.hex neu erzeugt.
f) code.hex ist die Komplettdatei bestehend aus Firmware und WAV-Dateien, die dann in den ATmega8 programmiert werden kann.


Programmierung der Ping Pong Platine

Ein fertiges Hexfile mit Firmware plus den zwei WAV-Dateien "dingdong" und "post" ist im ZIP-File unter dem Namen "code.hex" bereits enthalten. Dieses kann direkt in den Atmega8 programmiert werden.
Achtung: das im Unterverzeichnis "code" enthaltene Hexfile "dingdong.hex" ist nur die reine Firmware, also ohne integrierte WAV-Dateien. Es kann verwendet werden, falls eigene WAV-Dateien integriert werden sollen, die per Batchfile in diese Hexdatei angegeliedert werden wie unter 4) beschrieben.


Quellcode

Der Code für den ATmega8 auf der Ping Pong Platine wurde mit dem C-Compiler CodeVision AVR (Version 2.04.6 Evaluation) erstellt. Diese Evaluation-Version kann für den privaten nicht-kommerziellen Gebrauch kostenlos verwendet werden und ist auf eine Codegröße von 3 kB beschränkt, was für diese Anwendung ausreicht. Das komplette Projekt ist in der ZIP-Datei enthalten (Projektdatei für CodeVison AVR ist dingdong.prj).


Quellen/Links:
Video: http://www.youtube.com/watch?v=5eaWmnauhWc
Tool zum Bearbeiten von WAV-Dateien: Audacity: http://audacity.sourceforge.net
C-Compiler CodeVision AVR: http://www.hpinfotech.ro/html/download.htm


Download:  1003dingdong.zip

Download:  1003wav2pong.zip


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller