Stichwörter: Telefon, Pulswahl, pulse dial, Wählscheibe, Tonwahl, tone dial, IWV, MFV, DTMF, CLIP, Dekoder, Fritzbox, DDS, Digitale Frequenzsynthese, Entgangener Anruf, Rückruf, Konverter, Eigenbau, Nachbau, open-source, AVR, ATtiny25, ATtiny45, ATtiny85

Impulswahl (IWV) nach Mehrfrequenzwahl (MFV) konvertieren

Zum Betrieb von alten oder Retro-Telefonen (oftmals Wandtelefon) mit Wählscheibe, also IWV = Impulswahl­verfahren auf MFV = Mehrfrequenz­verfahren (auch denglisch DTMF genannt), zum Betrieb an einer zu einfachen Tele­kommunikations­anlage (TK-Anlage, Haustelefon, Internet-Router).

Hinweis: Fritzboxen, aber auch mein Thomson-Kabelmodem, können mit Impulswahl umgehen. Wer einen solchen Internet-Router hat, braucht das nicht unbedingt, aber der zusätzliche Kurzwahl-Komfort ist ziemlich praktisch. Die Wählbarkeit von „*“ und „#“ erlaubt bei Fritzboxen einen Internruf: „**1“ wählt Fon1, „**2“ wählt Fon2 usw., „**9“ lässt alle internen Telefone klingeln.

Im folgenden geht es um den Einbau einer Schaltung zur Tonwahl in das Telefon. Im Gegensatz zu anderen Vorsatzkonvertern gibt es Komfortfunktionen wie Wahlwiederholung und Kurzwahl. Ohne Stützbatterie und mit minimalem Bastelaufwand. Die Implementierung wertet das Festhalten der Wählscheibe am Fingeranschlag aus und benötigt keine Erdtaste.
(Veraltete) Lösung mit Erdtaste.
(Unfertige) Lösung als Vorsatzgerät.
Verzichtet man als Anwender auf die Extras, wird das Telefon unverändert bedient (= omasicher).

Es werden folgende Zusatzfunktionen realisiert:

Der grundsätzliche Schaltplan von Telefonen mit Wählscheibe ist stets gleich; hier war es hervorragend erklärt: Fernsprecher W611. Das Mikrofon ist normalerweise ein Kohlegrieß-Mikrofon.

Vorüberlegung

Die einzig denkbare „Bediengestik“ zum Erreichen von Komfortfunktionen ist das „Innehalten“ mit dem Finger in der Wählscheibe am Fingeranschlag. Denn im Normalfall wählt der Bediener zügig.

Softwaretechnisch wird der zweite Kontakt des Nummernschalters „nsa“ ausgewertet und eine Zeit­überschreitung detektiert. Da zwei Ebenen Komfortfunktionen erforderlich sind, habe ich zwei Timeouts implementiert, deren Ablauf durch unterschiedliche akustische Signale im Hörer bekannt gegeben werden.

Einfache Mikrocontroller-Schaltung

Steckbrief: ATtiny25, 2 Shift-Ebenen, 10 Kurzwahlspeicher, Wahl bei aufgelegtem Telefonhörer, kein CLIP + Rückruf, optional Rufnummernsperre

Ausgangspunkt war Atmels Application Note AVR314. Es wurde auf einen ATtiny25 umgesetzt und der High-Speed-PWM-Generator im Zeitgeber 1 (mit 64 MHz Taktfrequenz und ≈250 kHz resultierender Trägerfrequenz) benutzt. Nur 1 Eingang für den Nummern­schalt­kontakt wird benötigt. Dadurch reicht der 8-beinige ATtiny25, und der RESET-Eingang kann zur In-System-Programmierung frei bleiben (= kein Hochvolt-Programmiergerät erforderlich). Hier sind es zwei oder drei Widerstände.

Schaltplan, zur Reihenschaltung

Für die Tonerzeugung ist zwingend ein externer Resonator oder Quarz erforderlich; der interne Oszillator erwies sich als zu instabil. Der Firmware-Quelltext läuft mit allem zwischen 3 und 12 MHz. Den Kurvenverlauf generiert Timer0, an dessen Interruptservice die DDS-Kurvenerzeugung „hängt“ sowie die gesamte Eingangs­daten­verarbeitung. Das Hauptprogramm (main()) schließlich schickt den Prozessor in den Schlafmodus oder schubst die nächste Tonausgabe an.

Die Mikrocontroller­schaltung liegt in Reihe zum Telefon. Siehe FAQ. Das vereinfacht die Stromversorgung erheblich, denn eine 5,6-V-Zener-Diode D1 parallel zu den Betriebsspannungs­anschlüssen des ATtiny25 begrenzt die auftretende Spannung und sorgt für Verpolschutz sowie Sicherheit vor der Rufwechsel­spannung.

Die Anschlüsse für den Nummernschalter wurden freigemacht und zum Mikrocontroller verdrahtet. So gibt es keine Probleme mit irgendwelchen Potenzial­verhältnissen.

Über den Widerstand R1 und den Kondensator C3 wird schließlich das Tonwahlsignal als PWM auf die Telefonleitung gegeben. Solange keine Tonausgabe läuft ist der Mikrocontroller-Anschluss hochohmig und stört das Gespräch nicht.

Der Eingriff in das Telefon und der direkte Anschluss der Nummernscheibe an den Mikrocontroller erspart die Notwendigkeit, die Wählimpulse zum Amt hin „wegbügeln“ zu müssen. Denn die Telefonanlage kann diese Wählimpulse als Flash-Impulse missverstehen, wie sie von der Flash-Taste stammen. Das ergibt zumeist Besetzt. Oder das Amt kann doch Impulswahl, und bekommt jede Ziffer 2×, einmal als Pulsfolge, einmal als Ton: Ergebnis = Verwählt.

Ganz nebenbei stört das Herumspielen an der Nummernscheibe nicht das laufende Gespräch.

Ein vorsetzbarer Konverter ist komplizierter, erspart nur den Eingriff. Siehe da.

Firmware

Die Abkopplung des Nummernschalt­kontaktes von der Amtsleitung ermöglicht eine komplette Neuzuweisung von Funktionen. Man könnte allen möglichen Blödsinn damit realisieren, etwa das Abspielen einer Tonfolge („Melodieklingel“) oder gar Sprache („Sie Vollidiot haben sich verwählt!“ wenn Flash-Speicher des Controllers groß genug) beim Wählen einer bestimmten Nummer oder so. Auch das Sperren von teuren Auslands- und Sonder­rufnummern fällt darunter. Auch ein Least-Cost-Router, den man allerdings von Hand aktualisieren müsste. Heutige (2015) Telefonverträge machen sowas allerdings kaum noch attraktiv.

Die Stromaufnahme der Testschaltung (bei 5 V aus dem Labornetzteil) lag bei lastabhängigen 18 mA bei Tonerzeugung sowie bei unter 1 mA in Ruhe. Bei aufgelegtem Hörer sinkt die (mittlere!) Stromaufnahme auf weit unter 100 µA. Die Firmware kann nur bei abgenommenen Hörer starten! Daher zur Erst­inbetriebnahme Hörer kurz abnehmen. Erst danach kann die Firmware entgangene Anrufe zählen.

Die Firmware ist wie immer quelloffen und Freeware. Zudem deutsch kommentiert. Assembler-Routinen wurde nur für den geschwindigkeits-relevanten DDS-Generator verwendet, der Rest ist in C programmiert.

Aufbau

Die wenigen Bauelemente passen auf ein Stück Lochrasterplatine. Nur beim Verdrahten muss man aufpassen, dass man nichts falsch anschließt oder mit dem Lötkolben das Telefongehäuse anschmurgelt. Leider hatte ich keine passenden Steckschuhe …

Ansicht der Platine mfv2 (uralt, C2 habe ich weggelassen.)
Ich hatte gerade keine passende Steckfassung, sondern Goldstaub aus DDR-Zeiten (passend zum Telefon eben).

Vor der Inbetriebnahme ist zu prüfen:

Beim Einbau ist der Nummernschalt­kontakt nsi (parallel nsr) für S1 zu verwenden! Also die beiden Leitungen von der Wählscheibe vom Telefon trennen und mit der Schaltung verbinden. Dieser normalerweise geschlossene Schalter muss daraufhin im Telefon gebrückt werden. Sonst funktioniert gar nichts auf Grund der dauerhaften Unterbrechung der Stromschleife.

Der Stummschalt­kontakt nsa wird in Reihe zu nsi gelegt. Bei dreidrähtigen Nummernscheiben (DDR-Telefone ab den 70ern) ist dies bereits schaltungs­technich der Fall. Er ist normalerweise offen und schließt nur während Aufzug und Ablauf der Wählscheibe und erzeugt so das typische „Geräusch“ im Telefonhörer, dass das Rauschen vom Amt verstummt.

Die Erdtaste — falls vorhanden — ist mit Wahlwiederholung belegt. Wird sie gemeinsam mit dem Ablauf der Wählscheibe betätigt, wird Ebene 2 angesteuert: Mit 2 Fingern kommt man so ohne Warten zu den Sonderfunktionen. Für einige Telefonanlagen wäre die Umrüstung zur Flash-Funktion sinnvoll. Den gleichen Effekt erreicht man aber auch durch kurzes Antippen der Hörergabel.

Bedienungsanleitung

Folgende Symbolik verdeutlicht die Tastendrücke:

Kurz­bedienungs­anleitung (ATtiny25)
alt
Standard
Wählen Rufnummer 0..9 (wie gehabt)
Erste Ebene
Kurzwahl Kurzwahlziffer 0..9 : Ausgabe gespeicherte Rufnummer
Zweite Ebene
Wahlwiederholung 1 : Ausgabe letzte Rufnummer
Zuletzt gewählte Nummer
als Kurzwahl speichern
2 Kurzwahlziffer 0..9
Neue Kurzwahl speichern 3 Rufnummer 0..9 Kurwahlziffer 0..9
A..D wählen 4..7 (kaum eine Telefonanlage kennt das)
* wählen 8
# wählen 9
Letzte Rufnummer löschen 0
neu (ähnlich ATtiny45 mit CLIP)
Standard
Wählen Rufnummer 0..9 (wie gehabt)
Erste Ebene
Kurzwahl Kurzwahlziffer 0..9 : Ausgabe gespeicherte Rufnummer
Zweite Ebene
A..D wählen 1..4 (kaum eine Telefonanlage kennt das)
Wahlwiederholung 5 : Ausgabe letzte Rufnummer
Anrufzähler löschen oder
Letzte Rufnummer löschen
6
Zuletzt gewählte Nummer
als Kurzwahl speichern
7 Kurzwahlziffer 0..9
Neue Kurzwahl speichern 8 Rufnummer 0..9 Kurwahlziffer 0..9
Autowahl festlegen 8 Rufnummer 0..9 5
* wählen 9
# wählen 0

Im Gegensatz zu „normalen“ analogen Tastentelefonen vergisst diese Schaltung die eingespeicherten Nummern nicht bei Stromausfall oder Abziehen der Telefonleitung! Eine Batteriestütze o. ä. ist daher nicht erforderlich. Neu hinzugekommen ist die Autowahl. Die Autowahl ist die Nummer, die beim Abheben automatisch gewählt wird (Oma-Modus). (Natürlich nur, wenn's nicht gerade geklingelt hat.)

Beim Einspeichern ist die Wahl von *, # sowie A..D möglich: Es ist 9², 0² bzw. 1²..4² zu wählen (² = 2 Pieptöne). Bei 5² wird Autowahl festgelegt, bei 6², 7² und 8² passiert nichts.

Kapazität des Kurzwahl-Speichers

Diese ist an die EEPROM-Größe von 128 Byte eines ATtiny25 angepasst: Wahlwiederholungs- und Kurzwahlspeicher sind für 20 Ziffern ausgelegt. Macht 12 Nummern à 10 Byte = 120 Byte. Sind noch 8 Byte frei, für den Anrufzähler und zum Debuggen.

Fragen am Rande

Der Quarz ist beliebig?
Ja, in Grenzen, 3..20 MHz. Für CLIP / Rückruf ein Resonator (kein Quarz) mit exakt 4 oder 8 MHz.
Kann ich einen programmierten Controller bekommen?
Ja, per Briefpost. Sie müssen mir allerdings mitteilen: Kosten = (Reichelt oder Pollin) + Versand, Vorkasse. Programmierung gratis, auch bei SO8. Und es kann etwas dauern.
Weitere Fragen verschoben nach dort.

Einsatzerfahrung

Ich benutze eigentlich nur den Kurzwahlspeicher. Damit macht das Telefonieren, genauer das Wählen so richtig Spaß. Während ich bei jedem anderen Telefon schon x-mal die Nummern neu eingeben musste (nach Stromausfall), halten die Nummern bei diesem Telefon länger als die Nummern der Angerufenen.

Berichtet wurde von einem Problem bei der Direktwahl mit einigen Kabelmodems: Durch die lange Pause zwischen den Wähltönen kommt das Modem durcheinander und meldet „besetzt“. Besonders bei langen Nummern. Lösung: Die Nummer zu Ende wählen, dann die Funktion „Wahlwiederholung“ + 1 verwenden.

Implementierung auf Kundenwunsch

Firmware für Quarzfrequenz 17,28 MHz sowie 14,xxx MHz wie oben und ohne Rufnummernsperre. (Der Quarz lag gerade herum.)

W48 von innen

In diesem Fall ist die Einbauanleitung folgende:

positive Spannung an b gegenüber a (regulär) negative Spannung an b gegenüber a (invers)
  • b (braun) abtrennen (wegen Gabelumschalter an a) und Schaltung in Reihe einbauen:
    • X2 an b des Telefons
    • X1 an die braune Ader zum Amt bzw. Modem (weil das „positiver“ ist als X2)
  • b (braun) abtrennen (wegen Gabelumschalter an a) und Schaltung in Reihe einbauen:
    • X1 an b des Telefons
    • X2 an die braune Ader zum Amt bzw. Modem (weil das „negativer“ ist als X1)
  • X3 an M' (leise MFV-Töne) oder M (laute MFV-Töne) dazu klemmen.
X3 an M' (leise MFV-Töne) oder M (laute MFV-Töne) dazu klemmen.

Aufbauerfahrung

Achtung! Der Mikrocontroller funktioniert nicht, wenn das Mikrofon kaputt ist! Dann ist die Stromaufnahme des Telefons zu gering.

Sollte das Amt oder das Kabelmodem während des Einspeicherns von Kurzwahlen auf Besetztton umschalten: Ignorieren und Weitermachen! Alles was der Mikrocontroller vom Amt erwartet ist Strom. Klar, von dem nächsten Rauswählen muss man den Hörer kurz auflegen.

Zur Funktionsanzeige im Bastellabor bietet es sich an, D1 durch 2 parallel geschaltete, weiße LED zu ersetzen. Da einfache LED maximal 20 mA vertragen, wird der max. 40 mA Schleifenstrom auf beide LEDs verteilt. Da LEDs gern mal kaputt gehen, ist trotzdem eine Z-Diode zur Absicherung gegen Überspannung notwendig, dann mit 5,6 V. Außerdem als Verpolschutz. Da diese LEDs sehr hell leuchten, kann man damit bspw. die Nummernscheibe beleuchten.

Nach Meldung eines Nachnutzers funktionierte der Konverter nicht mit Telekom Speedport und auch nicht mit einer Auerswald-Telefonanlage. Nach seiner Untersuchung ist das MFV-Signal für diese „Analoganschlüsse“ zu leise: USS = 100 mV. Laut ETSI-Standard sollen es Ueff ≈ 500 mV sein, für jeden einzelnen Sinuston. Die Verringerung des Widerstandes R1 von 10 kΩ auf 1 kΩ brachte die erwünschte Funktion. Dazu muss C5 von 100 nF auf 330 nF erhöht werden. Im Schaltplan ist's entsprechend aktualisiert worden.

Da dann die Hörerlautstärke unerträglich laut sein kann, sollte dann am Mikrofon eingespeist werden, nicht auf der a-Ader. Außerdem bringt die Spannungs­belastung an C5 und die höheren Ströme in das Mikrocontroller-Pin beim Klingeln Probleme, wenn man an der a-Ader einspeist. Daher verändert man die Schaltung am besten zur Version wie in der FAQ, Frage 2 angegeben: „Hinter“ dem Gabelumschalter, so wie ich es selbst zunächst gemacht hatte.

Mit CLIP-Dekodierung und Rückruf

Wie kann das funktionieren — ohne Display?? Ein Display im Telefon würde — aus Sicht der meisten Anwender — die Ästhetik des Telefons verschandeln. Außerdem ist's umständlich zu basteln und zum Nachbauen eher schwierig. Von dessen Stromversorgung ganz zu schweigen. Daher wurde ein Vergleich mit dem Kurzwahlspeicher eingebaut und eine Tonausgabe für verpasste Anrufe folgendermaßen realisiert:

Die Möglichkeit, den Anrufer während des Klingelns zu identifizieren und den Anruf ggf. abzulehnen besteht nicht. Nimmt man den Hörer während des Klingelns ab (= Gesprächsannahme), gibt es einen (für beide Partner hörbaren) Piepton, wenn der Gesprächspartner bereits vorher versucht hatte, anzurufen. So kann man sich auf die „Dringlichkeit“ seines Anrufs einstellen. Außerdem wird diese Nummer aus der Liste der verpassten Anrufe gelöscht: Unabhängig davon, wie oft dieser Teilnehmer bereits angerufen hatte, werden alle passenden Einträge gelöscht.

CLIP mit A/D-Wandler

Steckbrief: ATtiny45, 3 Shift-Ebenen, 22 Kurzwahlspeicher, Wahl bei aufgelegtem Telefonhörer, CLIP + Rückruf, Erde, gleiche Schaltung
Schaltplan, Firmware ist funktionstüchtig

Schaltplan und Firmware. Mit Bestückungs­vorschlag für Lochstreifen­platine und „Bohrplan“ für Unterbrechungen. Dazu wurden alle Register gezogen, um CLIP-Dekodierung ohne Stromversorgung hinzubekommen! Hier gilt die neue Zuordnung von Sonderfunktionen. Auch hier ist die Erdtaste optional; bei Nichtverwendung ist das RESET-Pin frei für ISP-Programmierung. Nun sind es immer noch zwei oder drei Widerstände. Sorgt man für mehr Wechselspannung an PB2 = ADC1 benötigt man vier Widerstände.

Fotos vom Prototyp im Telefon „Variant“

Sowohl mfv2b als auch mfv2c (diese Firmware) enthalten eine Erkennung des Störfalls „Keine Amtsspeisung“ sowie „Paralleles Telefon abgehoben“. Dies macht sich softwaremäßig als „Telefon abgehoben“ bemerkbar, aber dann sinkt die Speisespannung rapide, und der Mikrocontroller würde verrecken und könnte bis zum nächsten Abheben keine verpassten Anrufe mehr detektieren. In so einem Fall wird der Watchdog auf seine längste Wartezeit (8 s) gesetzt und zyklisch die Betriebsspannung so lange überwacht, bis diese wieder 4,4 V (nominell) erreicht. Die Stromaufnahme sollte dann laut Datenblatt 6 µA betragen und ein 470-µF-Elko für C1 3 Minuten durchhalten.

Die Platine ist so gestaltet, dass alle notwendigen Anschlüsse auf einer einreihigen, 5-poligen Stiftleiste herausgeführt sind. Man kann so die nicht ganz billigen, aber praktischen vor­konfektionierten Stecker+Buchsen+Kabel daran anschließen und hat die Platine steckbar im Telefon.

CLIP mit Analogvergleicher

Steckbrief: ATtiny45, 3 Shift-Ebenen, 22 Kurzwahlspeicher, Wahl bei aufgelegtem Telefonhörer, CLIP + Rückruf, Erde, fast gleiche Schaltung

Mit dem CLIP-Enkoder und -Dekoder in JavaScript wurden verschiedene Methoden der CLIP-Dekodierung untersucht:

Dabei stellte sich heraus, dass die simple Methode der Nulldurchgänge am besten funktioniert, solange die Abtastrate (hier: die Zählfrequenz) hoch genug ist, etwa 48 kHz. Das ist viel mehr als die gängige Telofonie-Abtastrate (8 kHz). Mit dem A/D-Wandler oben liegt die Abtastrate bei 19 kHz, zu wenig. PLL und Costas-Loop erfordern Multiplikationen (die ATtinys als Zweitaktbefehl fehlen), und die Schleifenfilter sind schwer zu dimensionieren und zu implementieren.

Es ist erstaunlich, dass es mit dem bereits voll belegten 8-beinigen Mikrocontroller ATtiny45 noch möglich ist, einen Zusatznutzen mit nur wenigen weiteren Bauelementen herauszukitzeln. Hier geht es darum, die Empfindlichkeit des Nulldurchgangs­detektors gegenüber der Version mit dem Analog-Digital-Wandler durch die Verwendung des bisher ungenutzten Analog­vergleichers (Analog Comparator, ich kürze diesen fortan mit AC ab) zu steigern. Die Idee war, dass AIN0 (AIN+) = PB0 während des CLIP-Empfangs offen mit internem Pullup ist (der Anwender wird schon nicht, wenn's klingelt, an der Wählscheibe herumspielen!) und AIN1 (AIN-) = PB1 auf High-Potenzial festgenagelt werden kann. In einem Vor-Experiment wurde nachgewiesen, dass der Analogvergleicher auch mit Eingangs­spannungen jenseits der Betriebs­spannungs­grenzen (max. 500 mV wurden ausprobiert) zurecht kommt und korrekt arbeitet. Es handelt sich also um echte Rail-To-Rail-Eingänge. Als Offsetspannung für den Komparator wurde <3 mV herausgefunden. Daher genügt für die Zuführung des FSK-Signals ein Kondensator C4, der mit dem internen Pullup einen Hochpass bildet. Der Serienwiderstand R4 dient nur zum Schutz des Mikrocontrollers bei Spannungssprüngen und reduziert die Wechsel­spannungs­amplitude nur unwesentlich. Dabei unterdrückt dieser hörbare Störgeräusche vom Nummern­schaltkontakt. Hingegen beteiligt sich R1 an der Leitungs­terminierung während der CLIP-Signalisierung, da PB1 dann als High führender Ausgang arbeiten muss, um den invertierenden Eingang des Analog­vergleichers an 5P zu fixieren. Nun sind es fünf Widerstände.

Firmware ist funktionstüchtig

Schaltplan und Firmware.

Bedingt durch die kapazitive Kopplung zum Wählscheiben­kontakt hört man hier die ach-so-typischen Impulswahl­geräusche leise durch. Ist vielleicht gar nicht schlecht, denn so hat man eine einfache akustische Kontrolle der sauberen Kontaktgabe. Der Wert von R4 wurde dazu schon recht hoch angesetzt.

Mehrfachbelegung der Pins des Mikrocontrollers
PinFunktion 1Funktion 2Funktion 3
PB0Digital In + Pullup: Wählscheibe abfragenAC0 + Pullup: CLIP-EmpfangDigital Out H: 425 Hz detektieren
PB1Digital Out: PWM-Tonsynthese mit DDSDigital Out H: CLIP-EmpfangAC1 + Pullup: 425 Hz detektieren
PB2ADC1 + Pullup: Abheben/Auflegen/Klingeln detektierenDigital Out L: StromversorgungADC1 + Pullup: DTMF detektieren?
PB5Digital In + Pullup: Erdtaste abfragenDigital Out: LEDDigital Out: Debug-Ausgang

Wird alles anders

Ausgehend von den vorhergehenden Überlegungen komme ich zu dem Schluss, die Speisung und Schleifen­strom­detektion nicht mehr über PB2 / ADC1 sondern über PB0 (als Digitaleingang) laufen zu lassen. Denn der bisherige Versuch, den 680-kΩ-Widerstand R2 mit einem Hochpass aud C4 und R4 zu überbrücken, um an ADC1 mehr Amplitude für Frequenzmessung und DFT zur Verfügung zu haben, biss sich mit dem stromsparenden, schnellen Erkennen des Schleifenstroms in Watchdog-Unterbrechungen, weil dazu immer der Kondensator geladen werden muss. Um dabei Low für Schleifen­unterbrechung zu detektieren muss R2 auf 430 kΩ verkleinert werden (Schaltschwelle = UB/2). Damit die Wahl bei aufgelegtem Telefonhörer möglich bleibt, muss die Wählscheibe woanders hin; nun ist es PB2. Nun sind es sechs Widerstände.

Firmware ist nicht da

Die CLIP-Erkennung erfolgt entweder per Analogvergleicher an PB1 oder per A/D-Wandler an PB2.

Der Clou ist hier, dass der Resonator auf 8 MHz hochgesetzt wurde, damit trotz fehlendem MUL-Befehl die Detektion von DTMF möglich ist. DTMF-Empfang ist vor allem dazu sinnvoll, dass der Gesprächspartner per Tastenwahl eine Telefonnummer übermitteln kann, die man nachher abspeichern oder weiterverarbeiten kann — ohne Zettel und Bleistift. Auch ist die Hörton-Erkennung per DFT funktionssicherer als die Messung von Nulldurchgangs-Abständen, weil Geräusche vom Mikrofon dabei vollkommen stören.

Mehrfachbelegung der Pins des Mikrocontrollers
PinFunktion 1Funktion 2
PB0Digital In + Pullup: Abheben/Auflegen/Klingeln detektierenDigital Out H: CLIP-Empfang (AC+ fixiert auf 5P)
PB1Digital Out: PWM-Tonsynthese mit DDSAC1 + Pullup: CLIP-Empfang (AC– = FSK-Signal)
PB2Digital In + Pullup: Wählscheibe abfragenADC1 + Pullup: Hörton (425 Hz) und Wähltöne (DTMF) detektieren
PB5Digital In + Pullup: Erdtaste abfragenDigital Out: LED / Debug-Ausgang

Umstricken des Telefons

Zum Einbau des Impulswahl-zu-Tonwahl-Konverters sind Umbau­arbeiten im Telefon erforderlich. Auch andere Projekte im Internet gehen so vor, die Wählscheibe aus dem Telefonie­pfad zu entfernen. Das hat mehrere Vorteile: Zum einen kann während des Gesprächs an der Wählscheibe herumgespielt werden, ohne das Gespräch zu stören, und zum anderen vereinfacht sich die Schaltung enorm. Obendrein kann so bei aufgelegtem Telefon­hörer gewählt werden: Man kann so einhändig wählen und telefonieren.

Häufig ist zweckmäßig, die Anschlüsse a und b zu tauschen, weil dann sogleich der nsi-Kontakt des Nummern­schalters auf der richtigen Seite liegt. Wie nsi und nsa herausgenommen werden ist leider bei jedem Telefon anders zu lösen. Nicht vergessen, den heraus­genommenen nsi zu brücken, sonst ist das Telefon tot.

Die Erdtaste, die so auch bei aufgelegtem Hörer funktioniert, ist vom in Reihe geschalteten Gabelumschalter zu trennen oder dieser zu überbrücken. Für bessere Kontaktsicherheit schaltet man beide Gabelumschalt­kontakte parallel. Inzwischen ausgelaufene 1-µF-Kondensatoren für die Klingel (Wecker) kann man getrost durch einen klitzekleinen Elko 1 µF / 63 V ersetzen, da heutzutage (am DSL-Router) die Polarität bekannt und nicht tauschbar ist. Schließlich sollte man neben der einwandfreien Funktion aller Kontakte auch den Übergangs­widerstand an Schraub­anschlüssen mit dem Ohmmeter überprüfen und alles was mehr als 1 Ω anzeigt nacharbeiten.

Man kann nun abwägen, ob man so wenig wie möglich am Telefon ändert und die Platine „geschickt“ am Klemmenfeld anschließt (das erfordert praktisch immer ein paar Klemmen „in der Luft“) oder ob man rigoros am Klemmenfeld und an Schalt­kontakt­zungen herumlötet, damit insbesondere die Wählscheibe unverändert angeschlossen bleiben kann. Beides hat Vor- und Nachteile. Ich habe mich im obigen Abschnitt für letzteres entschieden: Es sieht im Innern schön aufgeräumt aus. Ein Rückbau zur Impulswahl ist nicht vorgesehen.

Ressourcen als große Bilder:

Inbetriebnahme

Nach dem Einbau der Schaltung sollte das Telefon angerufen werden. Bei Verwendung der Fritzbox beispielsweise mit dem Internruf **9. Das Telefon muss klingeln, und nach dem Abheben muss man ein Gespräch führen können. Für diese beiden Funktionen hätte man auch keine Schaltung einbauen brauchen. Ist das nicht der Fall, liegt meistens eine Unter­brechung vor.

Als nächstes wählt man eine Ziffer und hört, ob ein typischer Wählton zu hören ist. Ist das nicht der Fall, prüft man zunächst, ob über dem Mikrocontroller die richtige Betriebs­spannung (5..5,5 V wenn abgehoben, 3..5 V wenn aufgelegt) richtigherum anliegt. Bei zu wenig Spannung liegt ein Schaltungs­fehler vor, oder der Controller steckt verkehrt­herum in der Fassung (passiert schnell mal, ging aber bei mir nie kaputt). Oder dem Controller fehlt die Firmware. Stimmt die Spannung, kann es sein, dass der Controller in einer Powerdown-Reset­routine hängengeblieben ist. Dann überbrückt man mal kurz die Speise­spannung und löst so einen Reset aus. Ist dann immer noch (bei abgenommenem Hörer!) kein Wählton zu hören wird wohl ein Schaltungs­fehler vorliegen. Um die Funktion der Wählscheibe zu prüfen zieht man die Wählscheibe auf (= schließt den nsa-Kontakt) und hält diese am Fingeranschlag für 2 s. Im Hörer muss ein Zeit­überschreitungs­pieps hörbar sein. Mit dem anschließenden Ablauf der Wählscheibe müsste der nsi-Kontakt arbeiten. Wenn nicht, kommt es zu keiner Tonausgabe. (TODO: Da könnte ein Fehlerpiep kommen.)

Als nächstes prüft man, ob die Fritzbox den DTMF-Ton akzeptiert. Dazu hebt man ab, wartet das Freizeichen ab, und wählt eine Ziffer. Mit dem Ertönen des Wähltons muss das Freizeichen verstummen. Ist das nicht der Fall, kann das an einer falschen Resonator­frequenz oder an zu wenig (oder zu viel) Lautstärke liegen. Ob die Frequenz stimmt prüft man am einfachsten durch Vergleich der Tonhöhe mit einem Tastentelefon oder Handy. Die Lautstärke variiert man mit dem Wert von R1 = nominell 1 kΩ.

Fotos aus Österreich

Nun ist zu prüfen, dass die richtigen Wähltöne ausgegeben werden: Eine bekannte Nummer wählen und testen, ob der Anruf durchkommt. Wird eine falsche Nummer ausgegeben, funktioniert sicherlich die Wählscheibe nicht richtig und hält die Impuls­längen nicht ein. Die gewählte Nummer ist im Webinterface der Fritzbox sichtbar.

Den korrekten CLIP-Empfang (wenn vorhanden) prüft man schließlich durch Anruf des Telefons, bspw. mit Internruf **9. Das Telefon lässt man „ausklingeln“, der Anrufer legt zuerst auf. Die LED, wenn vorhanden, müsste nun den verpassten Anruf durch Aufblitzen alle 4 s anzeigen, auch ohne CLIP. Beim Abnehmen des Hörers muss nun ein Doppelton (= 2 Piep hintereinander) mit gleicher (oder steigender) Tonhöhe zu hören sein. Bei fallender Tonhöhe ist irgendetwas gestört, und man sollte mit dem Oszi an die Fehlersuche gehen und wie unten beschrieben die Oszillogramme ggf. mit dem Debug-Image des Mikrocontroller-Programms überprüfen.

Schließlich füttert man den Kurzwahlspeicher mit den häufig zu wählenden Nummern, druckt ein Blatt mit der Bedienungs­anleitung aus, schreibt die Kurzwahlen dazu und legt/klebt diesen Zettel unter oder neben das Telefon.

Das Debug-Image

Das Debug-Image dient zur Fehlersuche vor allem beim CLIP-Empfang. Es wird aktiviert durch die Verwendung eines ATtiny85 (8 KByte Flash, mehr RAM, mehr EEPROM) und ggf. Aktivierung des Debug-Schalters J im Makefile Zeile 18, danach Neuübersetzung.

Beim Verwenden des Debug-Images ist die LED abzustecken; sie würde den Elko vorzeitig entladen. Das Debug-Image benötigt einen ATtiny85 als Mikrocontroller und PB5 zur Statusanzeige und damit ein Hochvolt-Programmiergerät. Zusätzlich zeichnet es das empfangene CLIP-Telegramm und ein Histogramm beim Abheben (erst dann!) im EEPROM auf, das mit dem Programmier­gerät eingesehen werden kann. Der EEPROM-Inhalt ist im Quelltext mfv2cd.cpp genau dokumentiert.

Hochvolt-Programmierung

Möchte man Pin 1 als I/O-Port PB5 (für die LED und/oder die Erdtaste und/oder zum Debuggen) verwenden und den Chip nicht nachher wegwerfen müssen braucht man die sogenannte Hochvolt-Programmierung. Mit Hochvolt sind 12 V gemeint.

Am einfachsten geht das mit einem Parallelport: Also alten Rechner herauskramen und ElmChans Schaltung aufbauen. Dabei wird nur die 8-polige Fassung benötigt; Q5 (witzigerweise 2× vorhanden) kann man (beide Exemplare) weglassen. Das Programmier­programm dazu habe ich für Windows und Linux geschrieben. Abgesehen davon dass es, im Gegensatz zu avrdude, komfortablen farbigen Flash-, EEPROM- und Fuse-Dump ausgeben sowie ELF-Dateien laden kann, ist es obendrein winzig klein und rasend schnell.

Wer hat, nimmt ein genügend modernes professionelles (USB-)Programmiergerät, etwa STK200 oder TL866. Sogenannte ISP-Programmiergeräte gehen dafür nicht!

Eigene Firmware erstellen

Eigene Firmware muss man bei Änderung der Resonatorfrequenz erstellen. Oder beim sonstigen Frickeln am Quelltext. Ein Upgrade zu einem größeren Controller (also wenn man statt 'nem ATtiny25 gerade nur einen ATtiny45 zur Hand hat) benötigt nicht unbedingt eine Neuerstellung, besser ist es aber, dann passt die Chip-Signatur beim Programmier­vorgang. Zumindest habe ich die Firmware so erstellt, dass sie trotzdem läuft: Der Stackpointer wird nicht initialisiert — das ist der entscheidende Kniff!

Die Vorgehensweise ist einfach und immer gleich:

Die LED

Typ: Die Status-LED am Pin 1 des ATtinyx5, muss, falls dort auch die Erdtaste angeschlossen ist, unbedingt eine weiße oder blaue LED sein wegen ihrer höheren Flussspannung, oder 2 konventionelle (rote, gelbe grüne) in Reihe. Ansonsten könnte die Erdtaste im aufgelegten Zustand den Elko bis zur Funktions­unfähigkeit des Mikrocontrollers entladen. Ist keine Erdtaste angeschlossen, sorgt die Software dafür, dass der Elko nicht zu sehr entladen wird; die Farbe ist beliebig. Der Wert des Vorwiderstandes sollte nicht verkleinert werden; ist die LED zu dunkel nehme man gefälligst eine modernere, hellere LED.

Einbau: Die (getestet) beste Möglichkeit, die LED unauffällig und ohne Beschädigung am Telefonapparat anzubringen ist es, sie durch ein vorhandenes Loch an der Unterseite auf den Boden leuchten zu lassen. Sowohl am Telefon „Variant“ (= Ausschnitt für Spritzguss­werkzeug) als auch am „W38“ (= unter den Weckerschalen) gibt es geeignete Löcher, die sich hinreichend weit vorn am Apparat befinden. Dort wird die LED nach schräg vorn strahlend mit Schmelzklebstoff von innen fixiert.

Funktion: Die LED zeigt folgende Zustände an:

CLIP-Empfang

Als technisches Detail zeige ich hier, wie die FSK-Wechselspannung am Pin5 (PB0) anliegt und wie die Software daraus Bits und Bytes macht. Dazu wird die Debug-Funktion am Pin 1 (PB5) genutzt, die die Funktion der Firmware wie eine Art Logikanalysator zeigt. Zur Aufzeichnung der Signalverläufe stand ein modernes Digital­oszilloskop „Rigol DS1104“ zur Verfügung.

Oszillogramme, blau = Pin 5 = PB0 = Analogvergleicher, AC-Kopplung; rot = Pin 1 = PB5 = Debug-Ausgang, DC-Kopplung, je 2V/div

Hörton-Empfang

Als technisches Detail zeige ich hier die Funktion des Hörton-Detektors. Der Hörton-Detektor wird vor allem dazu gebraucht, um beim Abheben nach Klingeln festzustellen, ob man den Anruf verpasst hat (d.h. Rückruffunktion sinnvoll) oder das Gespräch läuft (Rückruf ist dann Quatsch). Dazu gibt es zwei prinzipielle Lösungs­möglichkeiten:

Während beim CLIP-Empfang sich der Analogvergleicher als klarer Favorit herausgestellt hat, erweist sich dasselbe Unterfangen für den Hörton als wenig zielführend, weil überlagerte (Sprech-)Wechselspannungen und Gleichstrom­schwankungen vom Kohlekörner­mikrofon und Wackelkontakten (des DDR-Telefons „Variant“) die Frequenzerkennung erheblich stören, trotz Hochpass an PB0. Wenn man hingegen nur eine Frequenz im Amplituden­spektrum sucht, kann man sich die Fensterfunktion ersparen, wenn man ein (in etwa) ganzzahliges Vielfaches der Periodendauer des gesuchten Signals von 425 Hz festlegt. Als Favorit schweben mir 6 Perioden (14 ms, weniger als Watchdog-Timeout) oder auch 8 Perioden (16 ms, mehr als Watchdog-Timeout) vor.

Da der ATtiny keinen Hardware-Multiplizierer enthält, galt es im voraus abzuschätzen, ob und bei welcher Abtastrate der das überhaupt schafft. Es genügt im Continuous-Mode (13 A/D-Takte pro Abtastwert) ein A/D-Vorteiler von 16, macht 13×16 = 208 Takte verfügbare Rechenzeit zwischen 2 Abtastwerten. Für sportliche 9,6 kSa/s braucht es so eine Resonatorfrequenz von mindestens 2 MHz: Kein Problem. Das ist schon mal eine Vorausabschätzung für die künftige DTMF-Erkennung (nicht -Generierung; braucht man für Türsprechanlagen und den Türöffner sowie für einfache Aufgaben in der Haus­automatisierung), bei dem der Berechnungs­aufwand um Faktor 7-8 höher liegt.

Die fehleranfälligen Assemblerroutinen habe ich mal in LabVIEW durchsimuliert:

Alternativen

Impulswahl-Tonwahl-Konverter als Bastelobjekt gibt es inzwischen (2020) wie Sand am Meer. Aber alle sind deutlich umständlicher und bieten keine Extras für den aufgelegten Zustand. Alle sind schaltungs­technisch aufwändiger. Hier eine Auswahl insbesondere älterer Schaltungen:

Andere, ältere, umständlichere Lösungen der IWV-MFV-Konvertierung
ProjektMikrocontrollerIm Telefon?Stromversorgung?Tastenfeld?Impuls-Durchlass?
👍Aus der Niederlande, deutsch übersetzt PIC12F629jaAmt / Fritzbox (parallel¹)
👍YouTube-Video, Arduino-Software, gleiche Bediengestik ATtiny85jaAmt / Fritzbox (parallel¹)
🤷Einfache Schaltung, einfache Funktion ATtiny45jaAmt / Fritzbox (parallel¹)
🤷Bei Mikrocontroller.net, basierend auf ATMEL-Anwender­information ATmega16neinunklarneinja (igitt!)
👍Mit einstelliger Ziffernanzeige ATtiny2313neinAmt / Fritzboxneinja (igitt!)
👎Nur Generator ATmega8neinunklarungelöstungelöst
👎Arduino Uno, dumme Rechteckausgänge mit Filter (englisch) ATmega328neinUSB-Steckernetzteilja (igitt!)
👎Arduino, Optokoppler, Netzteil, gruselig! ATmega328neineingebauter Netztrafoja (igitt!)
🤷Mit Akkupack PIC12F629neinAkkupackneinja (igitt!)
  1. Parallelschaltung erfordert, dass am Telefon bei abgenommenem Hörer deutlich mehr als 5 V abfallen. Das ist beim W38 nicht der Fall, da habe ich 2 V gemessen! Eine solche Schaltung funktioniert allenfalls bei Telefonen mit modernem Elektretmikrofon, nicht mit originalem Kohlegrieß-Mikrofon.

Optionen für mehr Komfort
WunschErfordernisseerledigt?
Dauerstrom­versorgungEingriff ins TelefonLC-AnzeigeTastenFlash oder EEPROM
Wahlmöglichkeit von * und #-neinnein-0ja, sogar A..D
Wahlwiederholung-neinnein-0ja
Kurzwahl + Programmierung-neinnein-1 KByteja
Autowahl + Programmierung-neinnein-0ja
Flash-Impuls (Amtsholung)-neinnein-0Hörergabel antippen
Wählen bei aufgelegtem Hörer (= Einhandbedienung)100 µA (Vorwiderstand)ja, außer bei W28, W38 und W48nein-0ja
Blitzen einer LED bei verpassten Anrufen100 µA (Vorwiderstand)neinnein-0ja (in Arbeit)
Anzeige der gewählten Rufnummer¹neinnumerisch-0Nur mit Display
Empfang der eingehenden Rufnummer (CLIP)100 µA + dicker Elkoneinnein-1 KByteja
Anzeige der eingehenden Rufnummer (CLIP)2 mA vom Inverterneinnumerisch-0hier: akustisch
Rückruf-neinnein-0ja
Sprachausgabe von Ziffern-neinnein-16 KBytenein
Abgesetzte Anzeige der Landes- und Ortsvorwahl-neinnumerisch-1 KByteNur mit Display
Anzeige von Namen zur Rufnummer (Telefonbuch)¹neinalphanumerisch3+ 2..20 KByteNur mit Display
Anzeige von Ländern und Orten je nach Vorwahl (D+A)¹neinalphanumerisch-+ 150 KByteNur mit Display
Durchblättern von Listen¹nein(alpha)numerisch30Nur mit Display
Eingehende DTMF-Signale dekodieren
(falls die Gegenstelle Tasten drückt)
-neinnumerisch-1nein
Ein Handy anklingeln nach entgangenem Anruf100 µA (Vorwiderstand)neinnein1 KByte0nein
Freisprechen bei aufgelegtem HörerNetzteil (500 mA)janein10nein
Anrufbeantworter100 µA (Vorwiderstand)neinsinnvoll3+ 1/2 MByte pro Minute Sprechdauernein
Konfigurations­schnittstelle (seriell + Optokoppler)2 mA vom Inverterneinsinnvoll-+ 2 KBytenein
Konfigurations­schnittstelle (USB²)-neinnein-+ 2 KBytenein
  1. 2 mA vom Inverter bei aufgelegtem Hörer, sonst kein Strom (bedeutet keine Anzeige bei aufgelegtem Hörer — blöd).
    LED-Anzeigen erfordern Netzteil.
  2. Gemeint ist USB-Schnittstelle des Mikrocontrollers: V-USB oder ATmega32U4. Wegen der Potenzial­verhältnisse ist nur Konfiguration oder Betrieb möglich. Das muss durch die Hardware­konstruktion narrensicher realisiert werden, etwa durch sich gegenseitig versperrende Buchsen.

Für ein Retro-Telefon geht das bestimmt zu weit … Wenn nicht, dann siehe CLIP-Anzeige. Aber erst mal ohne Freisprechen, Anrufbeantworter und Apotheker­schaltung.