Ding Dong: ein elektronischer Türgong
von Michael Gaus
Ü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