DTMF-Generierung Umsetzung mit einer FPGA-Steuerung

DTMF mit a/b-Anschluss lässt sich mit einer kleinen FPGA-Steuerung einfach realisieren.
DTMF lässt sich mit einer kleinen FPGA-Steuerung schnell realisieren.

Will man eine Telefonnummer anrufen, so muss das analoge Telefon am a/b-Anschluss „DTMF“, also „dual tone multi frequency“, sprechen können. Die Tonhöhen, Dauer und Pause sind definiert; außerdem gibt es klare Anforderungen an die Pegel. Mit einer PGA-Steuerung lässt sich dies einfach realisieren.

Das Zeitalter der Analogtelefonie ist längst zu Ende. Nicht erst seit der Einführung von Voice over-IP ist ein Sprachtelefonat im Wesentlichen ein Austausch von Nullen und Einsen zwischen zwei Endgeräten. Bereits in den 80er Jahren des vergangenen Jahrhunderts haben die großen Telekommunikationsunternehmen begonnen, die Gespräche in der Vermittlungsstelle zu digitalisieren und über digitale Netze zur Vermittlungsstelle des Empfängers zu transportieren, wo sie wieder in analoge Signale zurückgewandelt wurden. Lediglich die berühmte letzte Meile von der Vermittlungsstelle zum Telefonanschluss in der Wohnung blieb lange Zeit analog. Heute ist die Telefonwelt größtenteils bis in die Wohnung hinein digital – sei es dank ISDN oder DSL-VoIP. Trotzdem sind Analogtelefone innerhalb der Wohnungen weiterhin Standard.

In den Unternehmen hat das Analogtelefon ebenfalls ausgedient. Üblich ist heute ein Telefon mit Netzwerkanschluss, das eine zweite Netzwerkbuchse für den Anschluss des PCs beinhaltet. So reicht eine Netzwerkdose pro Arbeitsplatz für den Anschluss beider Geräte an das Netzwerk aus. Die Verbindung zum „Amt“, wenn es denn eine gibt, erfolgt zentral von einer lokalen Telefon¬anlage aus. Manchmal arbeitet statt dieser auch ein Telefon-Router, der über das Internet die Gespräche an eine VoIP-Einwahlstelle übergibt. Aber auch die zentrale Telefonanlage oder der VoIP-Router haben in den meisten Fällen ein paar a/b-Ports für den Anschluss analoger Telefone.

Diese a/b-An- schlüsse eröffnen sowohl im privaten als auch im geschäftlichen Bereich Möglichkeiten der Kommunikation, Sicherung und Überwachung. So kann z.B. ein lokales Ereignis (Anlagenfehler, Alarm etc.) einfach durch die Wahl der Rufnummer eines Empfängers gemeldet werden. Eine autarke Steuerung muss dazu lediglich in der Lage sein, eine zuvor festgelegte Telefonnummer anzurufen. Die Verbindung selbst muss dabei gar nicht mal zustande kommen, der Anruf an sich reicht eigentlich aus.

Sprechen Sie bereits DTMF?

Um eine Telefonnummer anzurufen, muss man am a/b-Anschluss „DTMF sprechen können“, also „dual tone multi frequency“. Fast jeder hat diese Pieptöne schon einmal gehört, die aus der Überlagerung zweier Sinussignale bestehen. Die Tonhöhen, Dauer und Pause sind definiert; außerdem gibt es klare Anforderungen an die Pegel, mit denen die Signale an den a/b-Anschluss angelegt werden müssen. Eine kleine Steuerung mit einem Mikrocontroller oder besser noch einem kleinen FPGA müsste das eigentlich hinbekommen.

Um einen sinusförmigen Signalverlauf zu erzeugen, muss man entweder eine Sinusfunktion berechnen können oder die vorberechneten Ergebnisse in einer Tabelle ablegen und diese Ergebnisse dann zur Laufzeit aus der Tabelle auslesen. Letzteres erscheint einfacher – vor allem, wenn die Steuerung auf einem Prozessor ohne Fließkommaeinheit basiert oder die Logikschaltung in einem kleinen FPGA untergebracht werden soll. In diesem Fall würde man die Werte in einem internen ROM ablegen und einen Zähler für die Adressierung des ROMs verwenden. Dieser Zähler wird dann so oft um eins weiter gezählt, bis nach der gewünschten Periodendauer des Sinussignals ein Überlauf stattfindet und das ROM wieder von vorne ausgelesen wird. Die aus dem ROM gelesenen Werte müssen dann noch in eine analoge Ausgangsspannung gewandelt werden, und fertig ist der Sinuston der gewünschten Frequenz.

Da für eine DTMF-codierte Ziffer zwei Töne zeitgleich erzeugt werden müssen, werden dafür auch zwei Tongeneratoren benötigt, die sich im Fall von beschränkten Ressourcen im FPGA die Sinustabelle teilen können. Die Ergebnisse der beiden Tongeneratoren muss man dann noch mit unterschiedlichen Verstärkungsfaktoren beaufschlagen, zusammen mischen und in ein differenzielles, analoges Signal wandeln. Da in kleinen FPGAs üblicherweise keine D/A-Wandler enthalten sind, bietet es sich an, einen digitalen Delta-Sigma-Wandler in das FPGA zu integrieren und die differenziellen Ausgänge mittels externer R/C-Glieder zu filtern.
Für die Speicherung der anzurufenden Telefonnummer benötigt man ebenfalls ein kleines ROM. 16 Stellen × 4 bit reichen hierfür aus. Die Telefonnummer wird dabei in die Initialisierungsdatei geschrieben, die den ROM-Inhalt definiert.