Hierbei geht es um die (unsichtbare) Umrüstung eines DDR-Telefons „Variant“ mit Wählscheibe. Dafür gibt es zwar Konverter, die man in die Telefonzuleitungen hängt, aber es sollten folgende Zusatzfunktionen realisiert werden:
'*'
und '#'
Die im Innern befindliche Platine ist zwar mit gerade mal 8 Bauelementen bestückt, aber dennoch derart unübersichtlich, dass ich hier erst mal einen Schaltplan mit lagerichtiger Kontaktanordnung erstellen musste.
Der grundsätzliche Schaltplan von Telefonen mit Wählscheibe ist stets gleich; hier ist es hervorragend erklärt: Fernsprecher W611. Das Mikrofon ist normalerweise ein Kohlegrieß-Mikrofon.
Wie man erahnen kann, ist es wesentlich leichter, die Wählscheibe vom Telefon zu trennen und dem Mikrocontroller zuzuordnen als einen Vorsatzkonverter zu bauen.
Von der „Amtsleitung“ (ein Kabelmodem) kommen ≈ 50 V Leerlaufspannung. Bei abgehobenem Telefonhörer fällt diese auf unter 5 V zusammen, und es fließen ≈ 40 mA. Das ist schon ziemlich gefräßig. Somit kann man den Mikrocontroller gut in Reihe platzieren; Parallelschaltung ist eher unzweckmäßig.
Für die Tonerzeugung ist zwingend ein externer Resonator
oder Quarz erforderlich; der interne Oszillator
erwies sich als zu instabil.
(Daher funktioniert jene Schaltung nicht.)
Der Firmware-Quelltext läuft mit allem zwischen 8 und 20 MHz.
Weniger Megahertz wäre für eine präzise Tonausgabe ungünstig.
Das erledigt 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.
Außer für die CPU-belastende PWM-Tongenerierung genügt dem Controller eine wesentlich geringere Speisespannung von 1,8 V. Dieser reduzierte Spannungsabfall sorgt für mehr Restspannung am Telefon und damit für eine leicht bessere Sprachqualität sowie mehr Klingel-Lautstärke als ohne so eine Maßnahme. Dazu könnte softwaremäßig parallel zur Zener-Diode eine alte Leuchtdiode geschaltet werden, wie im alten Schaltplan angegeben. Diese dient zugleich auch zur Betriebskontrolle (Anzeige des Schleifenstroms).
Leider erwies sich dieser Trick als Mikrocontroller-Töter! Offenbar verträgt der ATtiny keine wechselnden Betriebsspannungen. (Steht gar nicht im Datenblatt!) Das Symptom war, dass der Mikrocontroller abstürzte aber nach Reset wieder funktionierte, allerdings war er (via SPI) unprogrammierbar. So hatte ich eine Reihe Mikrocontroller verschlissen.
Die Anschlüsse für den Nummernschalter und die Erdtaste wurden freigemacht und zum Mikrocontroller verdrahtet. So gibt es keine Probleme mit irgendwelchen Potenzialverhältnissen.
Über den Widerstand R1 und den Kondensator C5 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 überhaupt nicht.
Die Firmware ist wie immer quelloffen und Freeware. Zudem deutsch kommentiert. Sie passt auch mühelos in den ATtiny25 (Füllgrad rund 60 %), da ist noch Platz für eigene Erweiterungen.
Umständliche, frühere Schaltungsrealisierungen verwenden einen speziellem DTMF-Chip. Auch die Verwendung eines Mikrocontrollers mit zwei Rechteckgenerator-Ausgängen und anschließender Tiefpassfilterung und Summation erschien mir zu „unsportlich“, wie anderswo mit PIC gesehen (Link fehlt).
Schließlich gibt es heutzutage bereits Lösungen für Mikrocontroller, DTMF-Signale zu dekodieren, was für die Firmware deutlich anspruchsvoller ist. (Andere Lösung)
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 nicht benötigt. Ob man ihn im Telefon wirksam lässt oder abklemmt ist egal. 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.
Auch die Erdtaste ist vom Rest des Telefons zu trennen und an die Schaltung anzuschließen. Auch dieser Schalter ist im Normalfall offen, und sein Fehlen stört dem Telefon nicht.
Wie sonst auch muss vor dem Bedienen der Hörer abgenommen werden. (Sonst fehlt der Schleifenstrom für den Mikrocontroller.)
Ein-Finger-Bedingung | |
---|---|
Wählen |
Rufnummer |
Kurzwahl | ♪ — Kurzwahlziffer 0..9 |
Kurzwahl speichern |
♫
— Rufnummer |
Zwei-Finger-Bedingung (Erde und Wählscheibe gleichzeitig, zumindest am Sequenzbeginn) | |
Wahlwiederholung | 1 |
Zuletzt gewählte Nummer speichern | 2 ♪ — Kurzwahlziffer 0..9 ♪ |
Kurzwahl speichern (wie oben) |
3 ♪
— Rufnummer |
A..D wählen | 4..7 |
* wählen | 8 |
# wählen | 9 |
Letzte Rufnummer löschen | 0 |
Alle Programmierungen und Funktionen lassen sich „mittendrin“ durch Betätigen der Hörergabel oder Auflegen des Hörers abbrechen.
Führende Ziffern | Bedeutung |
---|---|
00 | Ausland |
01 | Dienste (0180), Handys, Call-By-Call |
0700 | Persönliche (nomadische) Rufnummern (nie gesehen) |
090 | Premium-Dienste (0900) |
118 | Telefonauskunft |
Der Filter lässt sich durch mindestens folgende Tricks überlisten:
Der Aufbau ist simpel:
EEMEM struct{ BYTE len; // Länge der Nummer: 0..22 BYTE data[ 11 ]; // 22 (BCD-)Ziffern, A-D, "*"=14, "#"=15}pre[]={ { 0 }, // Wahlwiederholung (hier: leer){ 11 ,{0x03 ,0x71 ,0x33 ,0x96 ,0x01 ,0x80 }}, // Kurzwahl "1" = 0371 3396018, absichtlich in "lesbarer" Folge{ 12 ,{0x01 ,0x76 ,0x21 ,0x69 ,0x56 ,0x71 }}, // Kurzwahl "2" = 0176 21695671}; // usw. bis zur Kurzwahl "0"
rand()
.
Bei einem größeren Controller steigt auch der Aufwand,
Interruptbehandlungsroutinen mit hoher Aufruffrequenz
(hier: die DDS-Routine) sicher ausführen zu lassen,
da andere Teilprogramme Interrupts sperren können;
man muss die volle Kontrolle über den gesamten Quelltext behalten.
Das ist nichts für Skript-Kiddies, die nicht wissen,
was sie da gerade zusammenklicken.
Der Einsatz des Arduino-Frameworks
verbietet sich dadurch von selbst.
Natürlich funktioniert die o.a. Schaltung auch für ein W38.
Denkbare Erweiterungen:
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.