Telefon-Mithöradapter (ISDN)

Bei digitalen Telefonen mitzuhören ist nicht ganz so einfach; bei GSM ist's schon sehr schwer wegen der Verschlüsselung. Bei ISDN und IMHO IP-Telefonie ist aber alles (noch) unverschlüsselt. Gegenüber IP hat ISDN den Vorteil der seit Jahrzehnten gelösten Zentralstromversorgung und dem geringeren Energieverbrauch aller beteiligten Komponenten.

Hier geht es auch um Vorarbeiten für das Türsprechen über ISDN, extra für Fritzboxen.

Siehe auch:

ISDN-Sniffer zum Verstehen

ISDN, genauer: Euro-ISDN, ist alles andere als einfach. Daher, um den Weg dahin durch Erfolgserlebnisse zu ebnen, ein einfacher Adapter für Sigrok/PulseView. Nun, dazu muss „bloß noch“ Python gelernt und ein Protokolldekoder geschrieben werden. Gemacht hat das anscheinend noch niemand, bin wieder mal der erste mit der Machete im Dschungel (2021!).

Kapazitive Kopplung

Schaltplan, mögliches Layout, Fotos

Die Leuchtdiode D1 dient zum Herabsetzen der Spannung für die beiden Spannungsteiler auf zulässige Eingangsspannungen für den LM339, ist nur eine bessere Z-Diode und leuchtet kaum. Die für die Adernpaare 1 und 2 getrennten Spannungsteiler aus R1..R4 bzw. R5..R8 legen die Schaltschwellen auf etwa 300 mV fest und minimieren Übersprecheffekte, die durch den kapazitiven Abgriff von schwankender S0-Speisespannung herrühren.

Funktioniert nicht wegen Erdschleifenbildung beim Anschluss des Logikanalysators. Die Gleichtaktspannungen erwiesen sich als höher als 3 V und damit kommt ein LM339 nicht zurecht.

Transformatorkopplung

Schaltplan, mögliches Layout

Die Transformatorkopplung ist das richtige ISDN-Interface. Hier mit 1:1-Trafos ohne (schwer herzustellende) Mittelanzapfung erleichtern den Nachbau.

ISDN-Sniffer zum Mithören

Hier ist die Idee dazu. Sogar schon ziemlich alt. Einfach ein ISDN-Mithörverstärker. Er schnüffelt am S0-Bus. Technisch würde es auch für einen S2M-Bus funktionieren, aber dafür ist der Mikrocontroller zu lahm.

Schaltung mit ATmega32U4, USB- und Audio-Ausgang

Das ist natürlich etwas genaues! Der „Pro Micro“ (mit ATmega32U4, 16-MHz-Quarz und USB-Buchse) — entsprechend Arduino Leonardo — emuliert eine Soundkarte mit Stereo-Mikrofon und der einzigen Kodierung 8 Bit PCM, A-Law, 8 kSa/s. Sollte jedes Windows und jeder MP3-Kompressor verstehen.

Gerade mal 3 Signalleitungen, PD0, PD1 und PD4, werden zum „Pro Micro“ benötigt. Die Ausgänge der beiden Komparatoren vom Sprechkanal sind zusammengefasst, weil die Rahmensynchronisation per Coderegelverletzung am Hörkanal vollzogen wird. Das Vertauschen der Innen- und Außen-Doppelader ist daher nicht erlaubt; hingegen ist das Vertauschen innerhalb eines Adernpaares unerheblich. Die Audioausgabe kann per High-Speed-PWM mit 11 Bit Auflösung bei 64 kHz Trägerfrequenz erfolgen.

Sollte so funktionieren! Mit USB und 11-bit-Tonausgabe

Die ursprünglich vorgesehene kapazitive Kopplung wurde verworfen; Trafokopplung ist einfach die bessere Wahl. Die Widerstandskette aus R1..R4 legt die jeweiligen Schaltschwellen auf 0,3 V fest. Die Widerstände R5 und R5 begrenzen Eingangsströme des Komparators bei Spannungsspitzen, verursacht durch die ISDN-Speisespannung von 60 V, durch die integrierten Bulk-Dioden hindurch. Der Pullup-Widerstand zu den Open-Collector-Ausgängen der Komparatoren wird durch den im Mikrocontroller zuschaltbaren gebildet.

Reinfall Windows Vista

Windows Vista und neuer weigert sich, ein Audiogerät mit CCITT-Kompandierung (A-Law oder µ-Law) zu unterstützen! Das ist ziemlich schlecht, denn dadurch

Bei Linux tritt das Problem nicht auf; die Beschriftung der Auswahlmöglichkeit B1 oder B2 erscheint sogar mit den USB-String-Deskriptoren, wenn auch nur mit den englischen.

Schaltung mit ATtiny25, Audioausgang

Wer ganz mutig ist, lässt die Transistoren weg und lässt den „Analogvergleich“ durch die Digitalschaltschwelle der AVR-Eingänge erledigen! Die Hysterese ist laut Datenblatt ziemlich klein, am kleinsten bei 3,3 V mit Werten um 0,3 V. 1:2-Transformatoren sind hierzu empfehlenswert. Dazu genügt 1 Trimmpotenziometer 100 kΩ zwischen UCC und Masse mit dem Schleifer an den beiden Mittelanzapfungen. Je nach Chip muss die Teilspannung entsprechend eingestellt werden, siehe jeweiliges Datenblatt unter „Pin Threshold and Hysteresis“. Vorteilhafterweise oberhalb der Schaltschwelle, sodass die Eingänge Low-Impulse „sehen“, da muss man die Firmware nicht mal ändern, und die Eingänge sind besser vor Überspannung geschützt als bei der Wahl der Teilerspannung unterhalb der Schaltschwelle. Quarzlose Mikrocontroller müssen ein Stück Software enthalten, um die Bitzeit bezüglich ihrer Taktfrequenz zu messen, oder müssen im voraus „zu Fuß“ kalibriert werden.

Sollte so funktionieren! Ohne USB; die Tonausgabe ist mit 8 Bit etwas mau

Aus S0-Bus-Sicht wird ein unendlicher Eingangswiderstand „gesehen“, erst bei Begrenzungseinsatz die Parallelschaltung der beiden Teilwiderstände. Diese Trickserei verträgt sich nicht mit durchgehendem Batteriebetrieb, weil die ständig nahe dem verbotenen Bereich liegenden Eingänge deutlich Querstrom fressen. Für Batteriebetrieb muss ein stromsparender Komparator davor, etwa MCP6564, sowie möglichst hochohmige und/oder vom Mikrocontroller zuschaltbare Spannungsteiler.

Schaltung mit AT90USB162: USB- und Audio-Ausgang

Als Mikrocontroller muss ein Typ mit eingebautem USB Full-Speed sowie Unterstützung isochroner Pipes verwendet werden. Damit fällt sowohl V-USB als auch MSP430F5xx aus der Selektion möglicher Lösungen heraus. Ein PIC16F1454 wie in USB2LPT13 wäre auch nicht schlecht. Seine Vorteile wären:

Aber PIC ist nicht meine Welt. Langsamer ist seine CPU obendrein.

Die Entscheidung fiel damals auf Atmels AT90USB162, weil

Nicht gerade vorteilhaft für den Nachbau ist die Transformatorkopplung mit den Transistoren und der dabei notwendigen Trafo-Mittelanzapfungen.

Schaltung des bidirektionalen Schnüfflers

Der zentrale Baustein ist der ISDN-Koppeltransformator T1 VOGT 15316, der kurzerhand aus einer alten Fritzbox 7170 ausgelötet wurde. Auch der eingangsseitige Schaltungsteil mit C2 und C3 sowie L1 .. L4 wurde so aus der Fritzbox kopiert.
Die Fritzbox ist danach keineswegs unbrauchbar! Nur die ISDN-Buchse ist tot. In der Regel unmerklich. Die Fritzbox selbst ist durch die gesehene (verfolgte) ISDN-Hardware nicht geeignet, als bidirektionaler Sniffer zu fungieren. Zudem beinhaltet diese die 100-Ω-Terminierung fest eingebaut.

Das Übersetzungsverhältnis ist hier 1:1. Daher wurde die sekundärseitige Mittelanzapfung mit je einer Vorspannung (Bias) von 0,4 Volt belegt. Dadurch öffnen die Transistoren Q1 .. Q4 bei 0,3 Volt Sekundärspannung. Besser wären Trafos mit Übersetzungsverhältnis 1:2, die doppelte Windungszahl auf der rechten Seite. Dann können die Mittelanzapfungen auf Masse gelegt werden, und die Bias-Widerstände R1, R2, R7 und R8 entfallen. Die Lage der Spulenanfänge spielt keine Rolle, da auch a und b (wie beim analogen Telefon) vertauscht werden dürfen.

An den Anschlüssen PAD1 und PAD2 kann die ISDN-Speisespannung gemessen, abgenommen oder eingespeist werden. Da dies potenzialgetrennt (= aufwändig mit DC/DC-Wandler) erfolgen müsste, wurde diese Möglichkeit nicht vorgesehen. Die Widerstände R15 und R16 dienen der Terminierung des S0-Busses und sind nur bei Bedarf zu bestücken.

Die übrige Beschaltung des Mikrocontrollers ist entsprechend Datenblatt.

Die beiden PWM-Ausgänge liefern das Gespräch als Hörton mit knapp 10 Bit Auflösung: 16 MHz / 16 kHz = 1000 ≈ 1024. Das Pfeifen der Trägerfrequenz ist zumindest für ältere Menschen nicht wahrnehmbar.

Der Schalter S1 erfüllt eine Doppelfunktion:

Für die Firmware-Entwicklung ist der Lötanschluss RxD und TxD an X5 .. X6 vorgesehen, und für den Notfall des Zerschießens der klassische AVR-SPI-Programmieranschluss X1 .. X4. Im Prinzip sind diese und noch weitere Beinchen frei, etwa zur Ansteuerung eines LC-Displays im Nibble Mode. Im Platinenentwurf sind alle freien Pins als Lötaugen nach außen geführt.

Über die Widerstände R11..R14 ist das Schreiben des S0-Busses möglich. Etwa um ein Hook-Off auszulösen und damit bei aufgelegtem Telefonhörer (!?) zu schnüffeln.

Die Pinzuordnung zum Mikrocontroller und das Leiterplatten-Design ist für minimale Durchkontaktierungen, breiten Leiterzügen und großen Abständen für die Hobby-Fertigung optimiert. Alle Durchsteck-Bauelemente sind von der Unterseite her kontaktiert. Das ergibt die folgende Platine:

Doppelseitige Platine im Maßstab 2:1

Der SMD-Transformater erzwingt die (für die Serienfertigung ungünstige) doppelseitige SMD-Bestückung. Er ist für die Unterseite zu hoch.

Als vorherrschende SMD-Größe wurde 0805 gewählt, mit reichlich Abstand zwischen den Bauelementen. Darauf kann man zur Not auch 0603 oder 1206 bestücken.

Programmieren

Normalerweise verweist Atmel auf sein Flip-Programmiertool. Dieser 22 Megabyte fette Windows-Brocken installiert Java — mit all seinen Widrigkeiten, etwa dass das Klickibunti-Programm sich wie ein Fremdkörper verhält, und das Java ständig nach Updates schreit. Kommandozeile fürs Makefile? Fehlanzeige!

Da muss es etwas besseres geben. Gibt's auch: DFU-Programmer für Windows. Funktioniert, aber nur, wenn man stets mit Nachdruck (--force) arbeitet:

flash: $(PROJECT).hex
	dfu-programmer $(DEVICE) erase --force --suppress-validation
	dfu-programmer $(DEVICE) flash --force --suppress-validation $<
	dfu-programmer $(DEVICE) launch

ubaboot, der 512-Byte-Urlader, habe ich noch nicht auf AT90USB162 umgesetzt.

Firmware

Die Implemenierung der Firmware ist noch zu erledigen.

Die Zeit für die ISR-Abarbeitung ist sehr knapp: Es stehen maximal 83 CPU-Takte zur Verfügung! Gelegentlich darf diese Zahl etwas überschritten werden, die ISR verträgt das, aber das Hauptprogramm und die PWM-Ausgabe-ISR (für die Kontroll-Analogausgabe) müssen ja auch zum Zuge kommen. Um den Tabellenzugriff auf die Expansionstabellen (hier: nur A-Law) zu beschleunigen, sind diese an glatten Adressen angeordnet sowie in Low- und High-Teil aufgetrennt.

ISDN-Simulator

Für den Test ohne vorhandene ISDN-Telefonanlage dient ein ATmega48 im Steckbrett. Die Außenbeschaltung ist dabei nicht allzu üppig. Ein 12-MHz-Quarz war gerade verfügbar. Durch die Verwendung sowohl des Überlauf-Interrupts als auch eines Compare-Interrupts lässt sich mit dem Frequenzverhältnis von 12 MHz / 192 kHz = 62,5 leben.

Die verschiedenen Signalzustände S0..S4 werden durchsimuliert; während S3+S4 wird auf B1 und B2 ein Kennmuster ausgegeben, welches schließlich im Audiorecorder wieder auftauchen muss.

Von links nach rechts: S0 (Ruhe), S1+S2 (Signalisierung), S3+S4 (Gespräch mit allen B1-, B2- und D-Bits = 1)

Die Horizontalablenkung wurde so eingestellt, dass jede Bit-Zeit einem Feinteilungsstrich entspricht. Dem Oszilloskop wird eigens ein Triggersignal zum Rahmenstart des voreilenden Kanals NT⇒TE „Hören“ mitgegeben, welches vom Mikrocontroller produziert wird. Damit erscheint der Rahmenstart des unteren Strahls an der linken Bildkante.