Inhalte rechts nicht zu sehen?
Verbreitern Sie bitte das Browserfenster
Counter-Box
DTMF-Sender / Empfänger mit Prozessor
eine Bauanleitung für Funkamateure mit Löterfahrung
erschienen in FUNK, Heft 8/2002
Anwendung:
Bedienung der Sprachmailbox DB0DXM
mit geänderter Software: intelligenter DTMF-Sender und Empfänger
Features:
intelligenter DTMF-Sender und -Empfänger
mit DTMF-Transceiver MT8888 (SMD)
vier Tasten zur Funktionsauswahl (per Menü)
ein LCD (16 Zeichen, 2 Zeilen), damit der Anwender etwas sieht
Atmel AVR Prozessor 90S8515
on board programmierbar (ISP-Schnittstelle)
mit RS.232 Schnittstelle für PC-Anschluss
Update:
meines Wissens existiert die Sprachmailbox nicht mehr
der Artikel zeigt aber, wie man mit dem MX8888 schnelle DTMF-Signale erzteugt und dekodiert
Intelligenter DTMF-Geber für die Sprachmailbox:
"DTMF-Technik just for Fun"
In Heft 07/2002 der Zeitschrift FUNK wurde die "DTMF-Sprachmailbox DB0DXM mit untergeordnetem FM-Relaisbetrieb" vorgestellt. Sie verfügt über ein vielfältiges Befehlsrepertoire, das stationär über ein PC-Programm unter Windows bedient wird. Dieser Beitrag beschreibt ein intelligentes DTMF-Terminal, das die Funktionen der Sprachmailbox auch für den Mobil- und Portabelbetrieb verfügbar macht. Wenige Änderungen an der Software lassen eine universelle Anwendung zu.
Soll eine beliebige Sprachmailbox über DTMF bedient werden, wird man zur Erzeugung der DTMF-Tonpaare meist ein Handfunkgerät verwenden. Besteht diese Möglichkeit nicht, kann man auf einen kleinen DTMF-Geber, wie er als Zubehör im Telefonladen erhältlich ist, ausweichen. Für den Portabel- oder Mobilbetrieb wird dann zusätzlich nur noch eine gültige Befehlsliste der Sprachmailbox benötigt. Bei DB0DXM ist das inzwischen etwas anders, hat Sysop Dieter , DL5DK, die Erfahrung machen müssen, dass mit den DTMF-Frequenzen gern von Seiten der Benutzer gespielt und leider zum Teil nicht unerheblich gestört wurde. Um derlei Missvergnügen zu vermeiden, hat er sich ein System einfallen lassen, das zu jedem Befehl auch den Absender ausweist, ähnlich wie es bei Packet Radio der Fall ist. Dort ist jedes Datenpaket mit Absender und Empfänger gekennzeichnet. Auch bei DB0DXM enthält jeder Befehl an die Box eine Absendermarkierung und, bei gesprochenen Mitteilungen, auch eine Information zum Adressaten. Es kommt aber noch besser: Zusätzlich wird auch eine Position übermittelt, die es jedem Mailboxbenutzer erlaubt, diese auf einer Karte (auf dem PC) anzuzeigen. Wird nun gestört, kann jeder Boxbenutzer mit einem Mausklick das Rufzeichen und die Position des Störers erfragen. Derart "geoutet", kann man sich vorstellen, dass es den Störenfrieden unter diesen Umständen kaum Spaß bereitet, andere zu ärgern. Das Antistör-Konzept gepaart mit den vielfältigen Möglichkeiten der Sprachmailbox bedingen einerseits kompliziertere, aber auch längere Befehlssequenzen, die eine Bedienung erst über den PC komfortabel ermöglichen. Mit einem einfachen DTMF-Geber aus dem Telefonladen wäre es sehr mühsam, langwierig und zudem fehleranfällig, einen gültigen Befehl zu erzeugen. Für den PC jedoch existiert, wie in einem früheren Beitrag detailliert beschrieben, ein Bedienungsprogramm für Windows (siehe www.db0dxm.de).
Sprachmailbox und Relais DB0DXM sind im Sauerland auf einem 800 Meter hohen Berg angesiedelt. Die Antennen befinden sich in 860 Meter Höhe über NN auf dem begehbaren Turm. Leider ist die Turmspitze im Nebel verborgen.
s
Das schließt jedoch einen Portabel- und Mobilbetrieb aus, denn kaum ein Boxbenutzer wird einen Laptop im Auto installieren, um eine Sprachmailbox zu bedienen. Daher wurde dieses intelligente DTMF-Terminal entworfen, um mit wenig Aufwand unterwegs Sprachmails abzuhören, zu speichern, sich die Uhrzeit ansagen zu lassen oder die Ausgabe des Deutschlandrundspruchs zu veranlassen.
Das ist Dieter, DL5DK, der Betreiber und Relaisverantwortliche von DB0DXM.
Obwohl dieses Projekt die Sprachmailbox DB0DXM als Beispielanwendung nutzt und die Software darauf ausgerichtet ist, kann man die Hardware als intelligenten DTMF-Geber in vielen Anwendungen einsetzen. Mit einigen Änderungen an der Software, insbesondere des Menüs und der ausgesendeten Befehle, ist die vorhandene Software für den AVR-Prozessor leicht an andere Gegebenheiten anzupassen. Vielleicht findet der eine oder andere Relais- oder Mailboxverantwortliche Spaß an der Sache und passt die Software an seine Sprachmailbox an. Aber nicht nur dort, sondern überall, wo mittels DTMF etwas gesteuert wird, bietet das DTMF-Terminal Funktionen auf Knopfdruck und entlastet den Anwender von dem Wissen um die Befehlssequenzen.
Anforderung und Realisierung
Grundsätzlich sollte ein mobiles DTMF-Terminal so klein wie möglich, so flexibel wie nötig und so stromsparend sein, wie es die Technologie ermöglicht. Einerseits benötigt man einige Tasten zur Eingabe von Befehlen, andererseits ein Display, um aus einem Menü die Befehle wählen zu können. Dazu gesellen sich ein DTMF-Transceiver-IC und eine serielle Schnittstelle, um das Gebilde auch stationär am PC zu betreiben. Die Funktionsblöcke spiegeln sich im Schaltbild wider.
So sieht die bestückte Platine aus.
Schaltung und Realisierung beschreiben einen Prototypen, der mit einer halben Eurokarte (100x82 mm) zwar für den Mobilbetrieb geeignet, für portable Anwendungen aber noch etwas sperrig ist. Als Vorteil kann die einseitige, also leicht herstellbare Platine, die geringe Bestückungsdichte und der weitgehende Verzicht auf oberflächenmontierte Bauelemente (SMD) gelten. Erste Reaktionen der Boxbenutzer auf dieses Projekt weisen jedoch stark auf eine gute Akzeptanz dieser bedrahteten Lösung hin, während eine komplett in SMD gehaltene Variante den Anwendern doch sichtlich Probleme bereiten würde. Eine Platine mit SMD wird es also nur bei ausreichender Nachfrage geben. Etwas SMD ist jedoch auch hier vonnöten: Der MT8888, ein 20 Pin SOIC, nimmt auf der Kupferseite der Platine Platz!
Als Anzeige kommt ein LC-Display (alphanumerische Matrixanzeige) mit dem üblichen Standardprozessor Hitachi HD44780 (oder kompatibel) zur Anwendung. Ich benutze wegen der kompakten Maße ein zweizeiliges Display mit Hintergrundbeleuchtung zu 8 Zeichen je Zeile, Dieter bevorzugte für seinen Prototypen ein ebenfalls zweizeiliges, aber 16-stelliges Display, leider ohne "Nachtdesign". Vier Tasten dienen zur Steuerung des Menüs, das im Wesentlichen aus der Auswahl einer Funktion und einigen Untermenüs besteht. Wie die Spinne im Netz sitzt der Mikroprozessor aus der AVR-Serie von Atmel inmitten der Schaltung. Im 44-poligen PLCC-Gehäuse verstecken sich vier 8-Bit-Ports, eine serielle Schnittstelle, 8 KB RAM für das Programm, 512 Byte EEPROM für Texte und Konstanten sowie 512 Byte SRAM für Variable. Der 90S8515 wurde gewählt, weil er im Gegensatz zu den kleineren Prozessorbrüdern über den benötigten Speicherplatz und die Anzahl der Ports verfügt, um Tasten, LCD, MAX232 und das DTMF-IC MT8888 zu bedienen. Ferner integriert er zwei 8-Bit-Timer bzw. Zähler und einen vielseitigen 16-Bit-Counter. Auch einen Analogkomparator gibt es, der für diese Anwendung jedoch nicht genutzt wird. Das verwendete RISC-Konzept verarbeitet bei einer Taktfrequenz von 3,579545 MHz weit über drei Millionen Befehle je Sekunde. Das sind etwa 285 ns je Befehl. Diese ungewöhnliche Taktfrequenz wird vom DTMF-IC vorgegeben, das daraus hochpräzise DTMF-Tonpaare erzeugt und dekodiert. So werden von einem Quarz sowohl Prozessor, als auch DTMF-IC gleichermaßen versorgt.
Alles neu ... und unbekannt
Für den Autor stellte dieses Projekt eine kleine Herausforderung dar: Es war das erste, das primär auf einen AVR-Prozessor basiert, das erste mit dem Bascom-AVR-Compiler und schließlich das erste Mal, dass der DTMF-IC MT8888 von Zarlink -- früher Mitel -- in Basic programmiert wurde. So konnten einige Schwierigkeiten nicht ausbleiben, auch zeigte sich der DTMF-IC anfangs recht störrisch. Die Sturheit lag allerdings ebenso auf Seiten des Programmierers, schließlich sollten DTMF-Töne möglichst schnell versandt und empfangen werden können. In Anwendungen für die Telefonie wird meist der Burst-Modus genutzt. Er ist definiert durch 50 ms DTMF-Ton und 50 ms Pausenzeit. Zusammen sind das je zu wählende Telefonziffer gut 100 Millisekunden. Zehn Ziffern je Sekunde mag für ein Telefonwählsystem ausreichend schnell sein, für Anwendungen zur Daten- und Befehlsübertragung, und darum geht es ja bei einer Sprachmailbox, reicht die Geschwindigkeit nicht aus. Im Datenblatt wird mit einem Nebensatz eine andere Möglichkeit erwähnt: Beim MT8888 ist es so, dass der Sendeoszillator immer läuft und Einschwingzeiten daher entfallen. Den Transmitter, hier die Aufschaltung des Tones auf des Ausgang des IC zum Senden von DTMF-Frequenzen, kann man mit einem Bit im Statusregister ein- bzw. ausschalten. Leider zeigte sich schnell ein ungewollter Nebeneffekt: Soll ein String (eine Zeichenkette) übertragen werden, so funktionierte das zwar wunderbar, jedoch wiederholte das IC vor der neuen Aussendung noch einmal das letzte Zeichen der letzten Aussendung. In solch hartnäckigen Fällen zahlt es sich meist aus, mit einer E-Mail an das Unternehmen heranzutreten. Der Hersteller antwortete auf eine entsprechende Anfrage bereits nach einigen Tagen mit der Lösung - Details des Timings, die man im Datenblatt vergeblich sucht!
Ein anderer Effekt betraf das Fehlen der Interrupts beim DTMF-Empfang. Auf dem Oszilloskop konnte kein Interrupt festgestellt werden, obwohl die Programmierung des IC korrekt schien. Wie so oft konnte schließlich ein Kombinationsfehler aus Hard- und Software als "Bösewicht" ausgemacht werden: Die Programmierung des Ports musste entgegen der Beschreibung im Atmel Datenblatt - nun ja, es war eine ältere Vorabversion - auf Input erfolgen und das Timing der Interruptroutine musste optimiert werden.
Im Takt des Quarzes - Prozessor und Software
Was macht die Software? Im Stationärbetrieb sorgt sie für den DTMF-Empfang und das Senden der vom PC über die serielle Schnittstelle kommenden Befehle und ersetzt damit den bisherigen DTMF-Auswerter von DB0DXM, der lediglich für den Betrieb im Shack konzipiert wurde. Auch die PTT des Funkgerätes wird vom Prozessor bedient. Im Mobil- und Portabelbetrieb kommt die Bedienung des Menüs über vier Tasten und das Senden der entsprechenden Befehlssequenzen hinzu. Damit ist die Platine für alle Einsätze, ob stationär mit PC oder portabel und mobil bestens gerüstet.
Betrachten wir die einzelnen Softwarefunktionen etwas genauer: Empfängt der DTMF-IC ein gültiges Tonpaar, zieht es die Interruptleitung INT0 des Prozessors auf Low-Pegel. Der Prozessor lässt alles stehen und liegen und springt unverzüglich in die Interruptroutine, liest das MT8888-Statusregister und holt den DTMF-Code aus dem Receive Data Register des MT8888. Nun speichert die Interruptroutine das "Zeichen" in einer Variable und setzt ein Flag. Damit ist die Bearbeitung des Interrupts abgeschlossen und die Routine wird verlassen. Der Prozessor kehrt nun zu seiner bisherigen Tätigkeit irgendwo in der Hauptschleife des Programms zurück. Dort wird bald das zuvor gesetzte Flag abgefragt und der DTMF-Code nach ASCII gewandelt und schließlich über die serielle Schnittstelle mit 4800 Baud zum PC übertragen. Das ist für den Stationsbetrieb notwendig, wenn die Platine als Vermittler zwischen PC-Programm und Sprachmailbox fungiert. Dann passiert es auch, dass der Prozessor über die serielle Schnittstelle Daten erhält. Es sind Befehle des PC an den AVR, etwa, um die PTT (Push To Talk) ein- bzw. auszuschalten oder einen String über DTMF zu versenden. Die Länge der zu sendenden Strings (Zeichenketten) ist dabei erst einmal undefiniert. Erst ein CR (Carriage Return / Wagenrücklauf = ASCII-Zeichen 13) deutet auf das Ende der Aussendung hin. Dadurch sind auch größere Datenmengen, etwa für Grafiken und andere Anwendungen möglich. Jeden Vorteil erkauft man sich jedoch mit einem Nachteil: Der Prozessor empfangt Zeichen mit 4800 Baud, das entspricht etwa 480 Zeichen je Sekunde, kann in diesem Zeitraum aber nur 40 bis 60 Zeichen via DTMF senden. Leider ist der Prozessor auf Grund seiner Ressourcen kaum in der Lage, eine unbegrenzte Menge von Zeichen zwischenspeichern. Die Sendegeschwindigkeit des PC muss daher an die DTMF-Ausgabe des Prozessors angepasst werden, damit keine Zeichen verloren gehen. Es bleibt dabei bei 4800 Baud, jedoch mit Pausen von einigen Millisekunden zwischen den Zeichen. Damit kann man auf ein echtes Handshaking zwischen PC und Prozessor verzichten. Zur Kommunikation werden daher lediglich RxD (Empfangsdaten), TxD (Sendedaten) und GND (Masse) benötigt.
Im Mobil- und Portabelbetrieb sieht es etwas einfacher aus: Der Anwender löst über ein paar Tasten eine Funktion aus, die darin besteht, einen vordefinierten String per DTMF an die Box zu übermitteln. Eine Auswertung der von der Box gesendeten DTMF-Codes erfolgt zwar wie zuvor beschrieben, läuft aber ins Leere, da portabel und mobil die serielle Schnittstelle in der Regel nicht belegt ist. Ein Empfang von Grafiken oder Ähnlichem ist portabel nicht sinnvoll, da das LCD-Punktmatrixmodul diese nicht darstellen kann und zudem keine Möglichkeit besteht, größere Datenmengen zu speichern. So beschränkt sich der Portabel- und Mobilbetrieb auf die wichtigen Funktionen wie Abrufen der eigenen Nachrichten aus der Sprachmailbox, das Sprechen neuer Nachrichten an User oder in eine öffentliche Boxrubrik und auf das Abrufen von Funktionen, die keine oder nur geringe Interaktion zwischen Mensch und "Maschine" erfordern. Dazu zählt beispielsweise der Abruf des Deutschlandrundspruchs, des Morsekurses und weiterer Dienste. Als nettes Gimmick ist auch die eigene Rufzeichennennung mit dabei, sowohl in CW, als auch über die synthetische Sprachausgabe der Box "Dies ist Delta Lime eins Delta Mike Whiskey"! Als einzige Interaktion setzen diese Funktionen die Bestätigung der gewählten Funktionen mit OK, Abbruch, Beantworten, Weiter etc. von Seiten des Boxnutzers voraus.
Das Geheimnis der vier Tasten
Wie kurz angesprochen, bedient man das Menü des DTMF-Gebers über vier Tasten, die folgende Funktion haben:
Taste 1: Menüfunktion wählen
Taste 2: Untermenü aufrufen
Taste 3: Zurück zum Hauptmenü
Taste 4: Enter-Taste/OK, Funktion auslösen
Für die Funktion "Sprachmail versenden" oder den Versand einer DTMF-Kurznachricht (DTMF-SMS) ist zudem die Eingabe einer Rubriknummer oder das Rufzeichen des Adressaten erforderlich. Bei DL5DK's Sprachmailbox sind die Nummern der Boxrubriken vierstellig. Bei der Eingabe dieser Zeichen- und Ziffernfolgen sind die Tasten wie folgt belegt:
Taste 1: Ziffer bzw. Buchstabe wählen
Taste 2: Cursor nach rechts, springt zur nächsten Eingabestelle
Taste 3: bisherige Eingabe löschen
Taste 4: Enter-Taste/OK, Eingabe komplett
Um die Bedienung des intelligenten DTMF-Terminals weiter zu vereinfachen, bietet das Menü nach Auswahl einer Funktion folgerichtig weitere Funktionen an, die der Nutzer in dieser Situation benötigt. Das erspart unnötiges Navigieren im Menü. Dazu ein Beispiel: Betätige ich die Funktion "Sprachmails abrufen", wird die Box nach Vorspielen der ersten gesprochenen Mitteilung bald nach einer Anweisung fragen, die "OK-Weiter", "Abbruch", "Beantworten" oder "Löschen" lauten kann. Wird also die Funktion "Sprachmails abrufen" ausgelöst, befindet man sich sofort in dem Menü, das die angesprochenen Funktionen zur Auswahl bereit hält. In der Anzeige des LCD ist in der ersten Zeile durchgängig das aktive Menü eingeblendet, in der zweiten Zeile die aktuelle Menüfunktion.
Oben Begrüßungsmeldung, darunter das erste Menü.
Oben, das aufgerufene Menü, darunter ein Menübefehl.
Eingabe einer User-Nummer oder Boxnummer zum Versand einer Sprachmitteilung an einen Benutzer oder in eine Boxrubrik.
Interna
Die Software für den DTMF-Sender / Empfänger wurde in Bascom-AVR geschrieben, einem leistungsfähigen Basic-Compiler für die AVR-Prozessoren, der die Hardware wie Prozessor, LCD etc. gut unterstützt. Stellvertretend für den fast 30 KB umfassenden Code sei hier eine kleine Basic-Subroutine abgedruckt, die maßgeblich für die hohe Geschwindigkeit der DTMF-Ausgabe verantwortlich ist. Sie schaltet den Ausgang des Oszillators im MT8888 auf den Ausgang des IC durch. Dazu wird - wie bereits erwähnt - das Control-Register A im MT8888 programmiert.
' 0 = Tone off , 1 = Tone ON
Sub Mt8888_tone(byval Value_a As Byte)
Value_a = Value_a + 4
Portc = Value_a
Reset Mt8888_cs
Set Mt8888_rs0
Reset Mt8888_wr
$asm
nop
nop
$end Asm
Set Mt8888_wr
Reset Mt8888_rs0
Set Mt8888_cs
End Sub
Der Wert, der dieser Prozedur übergeben wird, darf Null (aus) oder eins (an) sein. Zudem muss im Control-Register das Bit 2 gesetzt werden, daher wird 4 hinzu addiert. Nun wird der Wert mit Portc= Value_a auf den Datenbus gelegt, Chipselect (CS) mit dem Kommando Reset MT8888_cs auf Masse gezogen, RS0 gesetzt (high) und WR auf Masse gezogen. Damit werden die Daten in das Control-Register A geschrieben. Nach einer kleinen Pause von zwei NOP's (Leerbefehle des Prozessors zur Zeitverschwendung) nehmen wir die Pegel an WR, RS0 und CD zurück. Wichtig ist hierbei die Reihenfolge, mit der das geschieht.
Das Layout ist hier verkleinert dargestellt. Die Originalmaße der Platine sind 100 x 82 mm.
Platinen und Bausätze
Für dieses Projekt bietet Dieter, DL5DK, einen Platinenservice an. Sie erreichen ihn am besten per dl5dk at darc.de.
In der Datei dtmf_db0dxm.zip sind alle Informationen verfügbar, die für den erfolgreichen Aufbau erforderlich sind. Dazu gibt es zwei Versionen des Basic-Programmes: Ein Programmiergerüst, das auch mit der BASCOM-AVR-Demo kompiliert werden kann und die wichtigsten MT8888-Routinen enthält. Relaisbetreiber sind so in der Lage, das Programm auf eigene Bedürfnisse anzupassen bzw. zu erweitern. Möchte man allerdings mehr als 2 KB Code produzieren, reicht die Bascom-AVR-Demo nicht mehr aus. Die Vollversion kann recht preiswert unter www.Elektronikladen.de bezogen werden. Für Benutzer der Sprachmailbox DB0DXM ist auch eine HEX- und BIN-Datei mit dabei. Damit kann der Prozessor direkt programmiert werden. Wer letztere mangels AVR-Programmer nicht auf den Chip laden kann, findet auf diesen Internet-Seiten auch einen AVR-Programmer, der sich direkt an die Platine anschließen lässt. Wer programmierte Prozessoren haben möchte, wendet sich an den Programmierservice (siehe oben)
Anfragen zur Sprachmailbox DB0DXM sind möglichst per E-Mail an OM Dieter, DL5DK at darc.de zu richten. Info zur Mailbox findet man unter www.db0dxm.de. Viel Freude am Nachbau und Betrieb des intelligenten DTMF-Terminals!
Zip-Datei in ein (leeres) Verzeichnis kopieren, dann bitte mit WinZip, PKunzip o. ä. entpacken. Das Layout-Programm EAGLE finden Sie unter www.cadsoft.de in einer Freeware-Version. Diese reicht für das Ändern, Bearbeiten und Ausdrucken der Platine (auf transparente Folie) aus.