Zum Betrieb von alten oder Retro-Telefonen (oftmals Wandtelefon) mit Wählscheibe, also IWV = Impulswahlverfahren auf MFV = Mehrfrequenzverfahren (auch denglisch DTMF genannt), zum Betrieb an einer zu einfachen Telekommunikationsanlage (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.
Es werden folgende Zusatzfunktionen realisiert:
'*'
und '#'
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.
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.
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 Nummernschaltkontakt 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.
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 Eingangsdatenverarbeitung.
Das Hauptprogramm (main()
) schließlich schickt den Prozessor
in den Schlafmodus oder schubst die nächste Tonausgabe an.
Die Mikrocontrollerschaltung liegt in Reihe zum Telefon. Siehe FAQ. Das vereinfacht die Stromversorgung erheblich, denn eine 5,6-V-Zener-Diode D1 parallel zu den Betriebsspannungsanschlüssen des ATtiny25 begrenzt die auftretende Spannung und sorgt für Verpolschutz sowie Sicherheit vor der Rufwechselspannung.
Die Anschlüsse für den Nummernschalter wurden freigemacht und zum Mikrocontroller verdrahtet. So gibt es keine Probleme mit irgendwelchen Potenzialverhä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.
Die Abkopplung des Nummernschaltkontaktes 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 Sonderrufnummern 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 Erstinbetriebnahme 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.
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 … 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 Nummernschaltkontakt 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 Stummschaltkontakt nsa wird in Reihe zu nsi gelegt. Bei dreidrähtigen Nummernscheiben (DDR-Telefone ab den 70ern) ist dies bereits schaltungstechnich 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.
Folgende Symbolik verdeutlicht die Tastendrücke:
|
|
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.
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.
Firmware für Quarzfrequenz 17,28 MHz sowie 14,xxx MHz wie oben und ohne Rufnummernsperre. (Der Quarz lag gerade herum.)
In diesem Fall ist die Einbauanleitung folgende:
positive Spannung an b gegenüber a (regulär) | negative Spannung an b gegenüber a (invers) | ||
---|---|---|---|
|
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 Spannungsbelastung 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.
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:
Steckbrief: ATtiny45, 3 Shift-Ebenen, 22 Kurzwahlspeicher, Wahl bei aufgelegtem Telefonhörer, CLIP + Rückruf, Erde, gleiche Schaltung
Schaltplan und Firmware. Mit Bestückungsvorschlag für Lochstreifenplatine 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.
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 vorkonfektionierten Stecker+Buchsen+Kabel daran anschließen und hat die Platine steckbar im Telefon.
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 Nulldurchgangsdetektors gegenüber der Version mit dem Analog-Digital-Wandler durch die Verwendung des bisher ungenutzten Analogvergleichers (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 Eingangsspannungen jenseits der Betriebsspannungsgrenzen (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 Wechselspannungsamplitude nur unwesentlich. Dabei unterdrückt dieser hörbare Störgeräusche vom Nummernschaltkontakt. Hingegen beteiligt sich R1 an der Leitungsterminierung während der CLIP-Signalisierung, da PB1 dann als High führender Ausgang arbeiten muss, um den invertierenden Eingang des Analogvergleichers an 5P zu fixieren. Nun sind es fünf Widerstände.
Bedingt durch die kapazitive Kopplung zum Wählscheibenkontakt hört man hier die ach-so-typischen Impulswahlgerä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.
Pin | Funktion 1 | Funktion 2 | Funktion 3 |
---|---|---|---|
PB0 | Digital In + Pullup: Wählscheibe abfragen | AC0 + Pullup: CLIP-Empfang | Digital Out H: 425 Hz detektieren |
PB1 | Digital Out: PWM-Tonsynthese mit DDS | Digital Out H: CLIP-Empfang | AC1 + Pullup: 425 Hz detektieren |
PB2 | ADC1 + Pullup: Abheben/Auflegen/Klingeln detektieren | Digital Out L: Stromversorgung | ADC1 + Pullup: DTMF detektieren? |
PB5 | Digital In + Pullup: Erdtaste abfragen | Digital Out: LED | Digital Out: Debug-Ausgang |
Ausgehend von den vorhergehenden Überlegungen komme ich zu dem Schluss, die Speisung und Schleifenstromdetektion 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 Schleifenunterbrechung 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.
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.
Pin | Funktion 1 | Funktion 2 |
---|---|---|
PB0 | Digital In + Pullup: Abheben/Auflegen/Klingeln detektieren | Digital Out H: CLIP-Empfang (AC+ fixiert auf 5P) |
PB1 | Digital Out: PWM-Tonsynthese mit DDS | AC1 + Pullup: CLIP-Empfang (AC– = FSK-Signal) |
PB2 | Digital In + Pullup: Wählscheibe abfragen | ADC1 + Pullup: Hörton (425 Hz) und Wähltöne (DTMF) detektieren |
PB5 | Digital In + Pullup: Erdtaste abfragen | Digital Out: LED / Debug-Ausgang |
Zum Einbau des Impulswahl-zu-Tonwahl-Konverters sind Umbauarbeiten im Telefon erforderlich. Auch andere Projekte im Internet gehen so vor, die Wählscheibe aus dem Telefoniepfad 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 Telefonhö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 Nummernschalters auf der richtigen Seite liegt. Wie nsi und nsa herausgenommen werden ist leider bei jedem Telefon anders zu lösen. Nicht vergessen, den herausgenommenen 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 Gabelumschaltkontakte 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 Übergangswiderstand an Schraubanschlü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 Schaltkontaktzungen 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:
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 Unterbrechung 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 Betriebsspannung (5..5,5 V wenn abgehoben, 3..5 V wenn aufgelegt) richtigherum anliegt. Bei zu wenig Spannung liegt ein Schaltungsfehler vor, oder der Controller steckt verkehrtherum 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-Resetroutine hängengeblieben ist. Dann überbrückt man mal kurz die Speisespannung und löst so einen Reset aus. Ist dann immer noch (bei abgenommenem Hörer!) kein Wählton zu hören wird wohl ein Schaltungsfehler 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überschreitungspieps 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 Resonatorfrequenz 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Ω.
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 Impulslä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 Bedienungsanleitung aus, schreibt die Kurzwahlen dazu und legt/klebt diesen Zettel unter oder neben das Telefon.
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 Programmiergerät eingesehen werden kann. Der EEPROM-Inhalt ist im Quelltext mfv2cd.cpp genau dokumentiert.
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 Programmierprogramm 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 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 Programmiervorgang. 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:
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 Funktionsunfä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 Spritzgusswerkzeug) 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:
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 Digitaloszilloskop „Rigol DS1104“ zur Verfügung.
TLEVEL
aus 256 „plausiblen“ Nulldurchgängen.
TLEVEL
als Low- oder High-Pegel aus.
So verbleiben Marker bei jedem Nulldurchgang.
Die Software sucht von nun an 100 Nulldurchgänge hintereinander
mit tiefer Frequenz (= Mark).
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ösungsmö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 Gleichstromschwankungen vom Kohlekörnermikrofon und Wackelkontakten (des DDR-Telefons „Variant“) die Frequenzerkennung erheblich stören, trotz Hochpass an PB0. Wenn man hingegen nur eine Frequenz im Amplitudenspektrum 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 Hausautomatisierung), bei dem der Berechnungsaufwand um Faktor 7-8 höher liegt.
Die fehleranfälligen Assemblerroutinen habe ich mal in LabVIEW durchsimuliert:
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 schaltungstechnisch aufwändiger. Hier eine Auswahl insbesondere älterer Schaltungen:
Projekt | Mikrocontroller | Im Telefon? | Stromversorgung? | Tastenfeld? | Impuls-Durchlass? | |
---|---|---|---|---|---|---|
👍 | Aus der Niederlande, deutsch übersetzt | PIC12F629 | ja | Amt / Fritzbox (parallel¹) | – | – |
👍 | YouTube-Video, Arduino-Software, gleiche Bediengestik | ATtiny85 | ja | Amt / Fritzbox (parallel¹) | – | – |
🤷 | Einfache Schaltung, einfache Funktion | ATtiny45 | ja | Amt / Fritzbox (parallel¹) | – | – |
🤷 | Bei Mikrocontroller.net, basierend auf ATMEL-Anwenderinformation | ATmega16 | nein | unklar | nein | ja (igitt!) |
👍 | Mit einstelliger Ziffernanzeige | ATtiny2313 | nein | Amt / Fritzbox | nein | ja (igitt!) |
👎 | Nur Generator | ATmega8 | nein | unklar | ungelöst | ungelöst |
👎 | Arduino Uno, dumme Rechteckausgänge mit Filter (englisch) | ATmega328 | nein | USB-Steckernetzteil | ja (igitt!) | – |
👎 | Arduino, Optokoppler, Netzteil, gruselig! | ATmega328 | nein | eingebauter Netztrafo | ja (igitt!) | – |
🤷 | Mit Akkupack | PIC12F629 | nein | Akkupack | nein | ja (igitt!) |
Wunsch | Erfordernisse | erledigt? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dauerstromversorgung | Eingriff ins Telefon | LC-Anzeige | Tasten | Flash oder EEPROM | |||||||||||||||||||||||||||||||||||||||||||||||||||
Wahlmöglichkeit von * und # | - | nein | nein | - | 0 | ja, sogar A..D | |||||||||||||||||||||||||||||||||||||||||||||||||
Wahlwiederholung | - | nein | nein | - | 0 | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Kurzwahl + Programmierung | - | nein | nein | - | 1 KByte | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Autowahl + Programmierung | - | nein | nein | - | 0 | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Flash-Impuls (Amtsholung) | - | nein | nein | - | 0 | Hörergabel antippen | |||||||||||||||||||||||||||||||||||||||||||||||||
Wählen bei aufgelegtem Hörer (= Einhandbedienung) | 100 µA (Vorwiderstand) | ja, außer bei W28, W38 und W48 | nein | - | 0 | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Blitzen einer LED bei verpassten Anrufen | 100 µA (Vorwiderstand) | nein | nein | - | 0 | ja (in Arbeit) | |||||||||||||||||||||||||||||||||||||||||||||||||
Anzeige der gewählten Rufnummer | ¹ | nein | numerisch | - | 0 | Nur mit Display | |||||||||||||||||||||||||||||||||||||||||||||||||
Empfang der eingehenden Rufnummer (CLIP) | 100 µA + dicker Elko | nein | nein | - | 1 KByte | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Anzeige der eingehenden Rufnummer (CLIP) | 2 mA vom Inverter | nein | numerisch | - | 0 | hier: akustisch | |||||||||||||||||||||||||||||||||||||||||||||||||
Rückruf | - | nein | nein | - | 0 | ja | |||||||||||||||||||||||||||||||||||||||||||||||||
Sprachausgabe von Ziffern | - | nein | nein | - | 16 KByte | nein | |||||||||||||||||||||||||||||||||||||||||||||||||
Abgesetzte Anzeige der Landes- und Ortsvorwahl | - | nein | numerisch | - | 1 KByte | Nur mit Display | |||||||||||||||||||||||||||||||||||||||||||||||||
Anzeige von Namen zur Rufnummer (Telefonbuch) | ¹ | nein | alphanumerisch | 3 | + 2..20 KByte | Nur mit Display | |||||||||||||||||||||||||||||||||||||||||||||||||
Anzeige von Ländern und Orten je nach Vorwahl (D+A)¹ | nein | alphanumerisch | - | + 150 KByte | Nur mit Display
| Durchblättern von Listen | ¹ | nein | (alpha)numerisch | 3 | 0 | Nur mit Display
| Eingehende DTMF-Signale dekodieren | (falls die Gegenstelle Tasten drückt) - | nein | numerisch | - | 1 | nein
| Ein Handy anklingeln nach entgangenem Anruf | 100 µA (Vorwiderstand) | nein | nein | 1 KByte | 0 | nein
| Freisprechen bei aufgelegtem Hörer | Netzteil (500 mA) | ja | nein | 1 | 0 | nein
| Anrufbeantworter | 100 µA (Vorwiderstand) | nein | sinnvoll | 3 | + 1/2 MByte pro Minute Sprechdauer | nein
| Konfigurationsschnittstelle (seriell + Optokoppler) | 2 mA vom Inverter | nein | sinnvoll | - | + 2 KByte | nein
| Konfigurationsschnittstelle (USB²) | - | nein | nein | - | + 2 KByte | nein
| |
Für ein Retro-Telefon geht das bestimmt zu weit … Wenn nicht, dann siehe CLIP-Anzeige. Aber erst mal ohne Freisprechen, Anrufbeantworter und Apothekerschaltung.