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:
Programmierbare Kurzwahl (10 Nummern genügen)
Wahlwiederholung
Wählbarkeit von '*' und '#'
Rufnummern-Filterung (festprogrammierte Regeln)
Schaltplan des Telefons „Variant“
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.
Mikrocontroller-Schaltung
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.
Firmware
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)
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 …
Ich hatte gerade keine passende Steckfassung,
sondern Goldstaub aus DDR-Zeiten (passend zum Telefon eben).
Vor der Inbetriebnahme ist zu prüfen:
Ist die Z-Diode richtig herum? Sonst kann der Mikrocontroller sterben:
Beim Klingeln (Wechselspannung!) oder bei Falschpolung.
Sind die Elkos richtig herum?
Sonst explodieren sie nach einigen Minuten bis Tagen
Nach Anschluss des Telefons, bei aufgelegtem Hörer,
muss eine niederohmige Verbindung
zwischen X2 und X3 nachweisbar sein!
Sonst Gefahr für den Elko C5 (zu hohe Spannung), den Mikrocontroller
(Stromstoß mit Überspannung) sowie Nichtfunktion.
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.
Bedienungsanleitung
Wie sonst auch muss vor dem Bedienen der Hörer abgenommen werden.
(Sonst fehlt der Schleifenstrom für den Mikrocontroller.)
Folgende Symbolik verdeutlicht die Tastendrücke:
♁♪ = Erd-Taste kurz drücken
(das ist die eine Taste am Telefon, die sonst nie benutzt wurde)
♁♫ = Erd-Taste länger drücken bis zum zweiten Ton
0..9 ☎ = Wählscheibe betätigen und Ziffer wählen
♁ 0..9 ☎ =
Gleichzeitig Erd-Taste drücken und Ziffer wählen
♪ = Es erfolgt eine Sinustonausgabe zur Kontrolle;
dieser unterscheidet sich deutlich von den
dissonanzbehafteten
Wähltönen
✁
Kurzbedienungsanleitung
Ein-Finger-Bedingung
Wählen
Rufnummer 0..9 ☎ (wie gehabt)
Kurzwahl
♁♪
— Kurzwahlziffer 0..9 ☎
Kurzwahl speichern
♁♫
— Rufnummer 0..9 ☎♪
— Kurzwahlziffer ♁♪
Zwei-Finger-Bedingung
(Erde und Wählscheibe gleichzeitig, zumindest am Sequenzbeginn)
Alle Programmierungen und Funktionen lassen sich „mittendrin“
durch Betätigen der Hörergabel oder Auflegen des Hörers abbrechen.
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.
Kapazität des Kurzwahl-Speichers
Diese ist an die EEPROM-Größe von 128 Byte eines ATtiny25 optimal angepasst:
Wahlwiederholungs- und Kurzwahlspeicher sind für 22 Ziffern ausgelegt.
Beim ATtiny25 (statt ATtiny45) stehen für die Kurzwahl auf Ziffer "0"
nur 14 Ziffern zur Verfügung; bei mehr gibt es eine (unabgefangene)
Kollision mit dem Speicher für Wahlwiederholung.
Rufnummern-Sperre
Die vorliegende, für
VoIP in Deutschland
gemachte Firmware sperrt folgende Rufnummern:
Gefilterte und gesperrte Rufnummern
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
Werden diese Ziffern am Anfang gewählt, ertönt ein Dauerton
(„Todespiep“), der nur durch Auflegen des Hörers beendet werden kann,
folgende Wählversuche werden abgewiesen.
Der Filter lässt sich durch mindestens folgende Tricks überlisten:
Durch Einspeichern und Wiedergabe einer Kurzwahl
(beabsichtigtes Verhalten).
Durch Vorwahl von A..D
(weil von den meisten Telefonanlagen ignoriert).
Kurzwahl-Vorprogrammierung
Die Kurzwahl-Nummern können auch durch eine EEPROM-Datei befüllt werden.
(Man muss sie nicht mit der Wählscheibe eingeben,
wenn man schon ein Programmiergerät besitzt.)
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"
Fragen am Rande
Was passiert wenn man die a und b-Ader vertauscht?
Der Mikrocontroller wird durch die Z-Diode D1 vor
Falschpolung geschützt, allerdings kann man mit dem Telefon
nur noch Rufe entgegennehmen, da die Wählfunktion nicht funktioniert.
Also richtig herum anschließen.
Standardmäßig ist a negativ, b positiv,
und der Gabelumschalter des Telefons ist am a-Anschluss.
Ist das nicht der Fall, sollte vorzugsweise der Installationsfehler
beseitigt werden.
Bei Kabelmodems werden die -60 V üblicherweise mit einem
Inverter
aus der Speisespannung (bspw. 12 V) generiert,
daher liegt b auf Erdpotenzial, also Antennenschirm.
Beim o.a. Anschluss (Schaltplan)
sind daher keine berührgefährlichen Spannungen zu erwarten.
Was passiert wenn man b-amt mit b-tel verwechselt?
Die Tonausgabe hat falschen Massebezug!
Gefahr für Mikrocontroller-Ausgang PB1!
Kontrolle: An X2 muss das andere Ende vom Mikrofon liegen.
Liegt das Mikrofon an X1, muss C5 umgepolt werden.
Liegt das Mikrofon weder an X1 noch an X2,
muss man die a-Ader anzapfen. Hängt vom Telefon ab.
Beim Anschluss ans Mikrofon ist das Tonsignal leise im Hörer
zu hören; beim Anschluss ans Spulenende dagegen ziemlich laut.
Ausprobieren, wie's gefällt!
Gegebenenfalls einen Serienwiderstand verwenden.
Der Anschluss am Mikrofon ist zu bevorzugen an echten Telefonanschlüssen
(= lange Analogleitungen zum Amt), weil diese Anschlussart
besser vor Überspannungsspitzen bei Blitzschlag schützt.
Der Quarz oder Keramikresonator ist beliebig?
Ja, in Grenzen: mfv2a: 10..20 MHz; mfv2b, mfv2c: 3..8 MHz,
möglichst als Resonator,
allerdings muss man dann das Makefile anpassen
und die Quelle neu übersetzen; die beigefügte Hex-Datei
geht dann natürlich nicht.
Die Hex-Datei für mfv2a ist für die NTSC-Quarzfrequenz 14318,18 kHz erstellt,
bei anderen Quarzen kommen schlichtweg falsche Töne und Zeiten heraus.
Laut Datenblatt (Bild 21-2) muss für diese Frequenz die Speisespannung 3,5 V betragen.
Die AVR-Mikrocontroller sind jedoch extrem robust bezüglich Übertaktung.
Achtung (mfv2b, mfv2c):
Die Fusebits sollten auch bei Verwendung eines Quarzes
auf Resonatorbetrieb (= kurze Hochlaufzeit) stehen,
sonst kann zumindest die CLIP-Erkennung nicht funktionieren.
Die Z-Diode muss ein 5,6-V-Typ sein.
Da geht nicht mehr (weil Gefährdung des Mikrocontrollers)
und nicht weniger (weil zuviel Querstrom).
Was passiert, wenn die Stromaufnahme des Telefons
kleiner ist als die des Mikrocontrollers?
Das sollte nie passieren!
Der Mindest-Schleifenstrom ist 20 mA;
ein 20 mA fressender Mikrocontroller … gibt's die überhaupt noch?
Wenn doch, dann ist das Mikrofon kaputt.
Wenn dasteht, R2 (680k) ist für „Wahl bei aufgelegtem Telefonhörer“ erforderlich,
kann man diesen weglassen, wenn man das Feature nicht benötigt?
Das betrifft derzeit mfv2b und mfv2c:
Kann man mit der derzeitigen Firmware nicht, weil dieser auch zur Detektion von
„Paralleles Telefon abgehoben“ herangezogen wird.
Bei Fehlen dieses Widerstandes würde das Programm nach dem Abheben einige Sekunden
brauchen, um festzustellen, dass abgehoben wurde
und genügend Versorgungsspannung bereitsteht.
Kann die o.a. Firmware auf einen größeren Mikrocontroller,
etwa einem ATmega328 auf einem Arduino Uno umgesetzt werden?
Um's kurz zu fassen: Ich mag Arduinos nicht.
In der Langfassung:
Die Firmware ist extra dazu gemacht, in einen
ATtiny25 (mfv2c: ATtiny45) gequetscht zu werden.
Diese verwendet den High-Speed-Timer mit 64 MHz Taktfrequenz,
der im ATmega328 gar nicht enthalten ist.
Will man ohne High-Speed-Timer arbeiten, reduziert sich die Trägerfrequenz
von 250 kHz auf bspw. 31 kHz, und man muss über's Filtern nachdenken.
Außerdem verwendet die Firmware viele Register,
was bei einem großen Mikrocontroller wenig sinnvoll ist,
weil man mit diesem auch noch andere Aufgaben erledigen will.
Die Verwendung von Registern beißt sich zudem mit einigen Routinen
der C-Standardbibliothek von avr-gcc, welche ein globales
Register-Push eincompiliert haben, etwa 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.
2017: Es gibt eine Umsetzung dieses Projektes auf Arduino:
Hier auf der Softwaremüllhalde.
Der Typ hat alles eingeenglischt (Toll! Dankeschön!),
auf Arduino-Stil getabt (anders ausgedrückt: aufgeblasen)
und die Anzahl der Kurzwahlen auf 5 halbiert.
Und noch einiges anderes verschlimmbessert.
Den "*" auf die 7 gelegt, ist womöglich besser.
Wer's haben will, soll's nehmen!
Ich brauche keine Kondensatoren an den Nummernschaltkontakten:
Denn ich bin nicht auf die bescheuerte Idee gekommen,
Schalter per Pegelwechsel-Interrupt abzufragen.
Kann ich einen programmierten Controller bekommen?
Ja, per Briefpost.
Sie müssen mir allerdings mitteilen:
Ihre Quarzfrequenz
Gewünschtes Gehäuse (Durchsteck oder SMD)
Lieferadresse, Stückzahl
Kosten = (Reichelt oder Pollin) + Versand, Vorkasse.
Programmierung gratis, auch bei SO8.
Und es kann etwas dauern.
Passt die Firmware noch in einen ATtiny25?
Mein Brennprogramm meckert wegen ungültiger Adressen.
Sie verwenden avrdude oder ein ähnlich altertümliches Brennprogramm,
welches nicht mit von-neumannisierten Speicherbereichen zurecht kommt.
Das doofe avrdude stolpert über die in der HEX-Datei
enthaltenen Fuses und verweigert die Arbeit. Blöd. Ein Kündigungsgrund.
Seine Kommandozeile ist megakryptisch. Ein weiterer Kündigungsgrund.
Wenn Sie partout bei avrdude bleiben wollen,
löschen Sie die überflüssigen Zeilen aus der HEX-Datei.
Die Fuses müssen Sie dann unbedingt zu Fuß setzen,
sonst schwingt der Quarz nicht, und der interne RC-Oszillator
produziert falsche Töne.
Wieviel Zeit habe ich zum Wählen? Von Ziffer zu Ziffer?
Das legt das Amt bzw. das Kabelmodem fest.
Der Mikrocontroller hat hier keine Timeouts eingebaut.
Ist die Zeit dem Amt zu lang, und es „beschwert“ sich mit
Besetztzeichen: Weiterwählen, 5 Sekunden warten
(= Timeout zum Abspeichern der letzten Nummer),
Auflegen, Abheben, Wahlwiederholung benutzen.
Wieviel Zeit habe ich zum Einspeichern von Kurzwahlen?
Von Ziffer zu Ziffer und insgesamt?
Es gibt keine Timeouts.
Das einzige was passieren könnte ist dass das Amt nach einiger
Zeit der Inaktivität die Leitung kappt, um Energie zu sparen.
Das ist dann wie Hörer auflegen.
Üblich hingegen ist, dass das Amt auf Besetztzeichen umschaltet.
Ignorieren und weitermachen.
Kann ich während des Gesprächs eine Telefonnummer speichern?
Ja. Der Gesprächspartner bekommt dabei (nur) die
Quittungstöne zu hören.
Da im Gegensatz zu Vorsatzkonvertern die Wählscheibe aus dem
Schleifenstrompfad herausgenommen wurde, ist Weitersprechen
uneingeschränkt möglich.
Kann ich während des Gesprächs DTMF-Zeichen geben?
Etwa um einen Kode zu übermitteln.
Ja. Diese sind nicht von einem echten Tastentelefon zu unterscheiden;
nur die Abstände dazwischen sind prinzipbedingt länger.
Kann ich die Telefonnummer des Anrufers
für einen Rückruf speichern?
Nur in der Schaltungs- und Firmware-Version mfv2c.
Denn darin enthalten ist ein einfacher
CLIP-Dekoder.
Für mehr Komfort braucht es auch ein Display
(typisch LC-Display mit HD44780-Controller und 2×16 oder besser 2×20 Zeichen,
preiswerter: Pollin-Vollgrafikdisplay mit Zeichenbildern im AVR)
und ein Telefonbuch.
Deshalb dieses größere Projekt
einer einbaubaren oder vorsetzbaren
Rufnummern-Anzeige, die diesen IWV-MFV-Konverter mit einschließt.
Genügen kleinere Brötchen,
wird die Anzahl entgangener Anrufe beim Abheben akustisch mitgeteilt,
und man kann dann Anruf für Anruf zurückrufen
(ohne die Nummer zu kennen oder zu sehen) sowie abspeichern.
Telefon W38 mit MFV
Natürlich funktioniert die o.a. Schaltung auch für ein W38.
Denkbare Erweiterungen:
„Lange“ zweistellige Kurzwahlnummern bei wählbaren Präfixen
(gemeint sind bspw. einstellige Kurzwahlen 1..8 und zweistellige von 91..99 und 00..09,
damit sind 30 Kurzwahlen möglich; erfordert mehr EEPROM)
Vorrangig Kurzwahl, Direktwahl mit ☎ 0 davor („Amtsholung“)
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.