Das gleiche Problem haben doch alle! Und jeder bastelt „seine“ Lösung.
Türsprech-Anlage für analoge Haustelefonzentrale
Die Qualität einer Türsprecheinrichtung steht und fällt
mit der Echokompensation!
Denn einerseits ist's per Zweidraht-Anschluss verbunden,
und andererseits handelt es sich um eine
Freisprech-Einrichtung mit all ihren Tücken,
üblicherweise in seiner Neigung zu Pfeifgeräuschen
sowie lausigem Gegensprechen.
Mit ATtiny861
Die Echokompensation per Laufzeitglied zu erschlagen,
warum eigentlich nicht?
Der ATtiny861 ermöglicht gleich zwei Kanäle mit 10-bit-A/D-Wandler,
Signalverzögerung (muss ja nicht viel sein) und 10-bit-D/A-Wandler
per High-Speed-PWM.
Die PWM läuft mit stattlichen 64 MHz Eingangsfrequenz,
was eine resultierende Trägerfrequenz von knapp 64 kHz ergibt,
was sich noch gut filtern lässt.
10 Bit sind für Sprache schon recht luxuriös,
fürs Türsprechen allemal.
Zumal die Firmware auch eine Dynamikkompression
(in Binärstufen mangels Multiplizierer) vollziehen kann.
Die Echokompensation erfolgt eisenlos und adaptiv.
Ganz nebenbei übernimmt der Mikrocontroller auch so „nebensächliches“
wie die Türklingel (DTMF-Generator)
und den Türöffner (25-Hz-Detektor).
Signalisierung per DDS
Die vorberechnete Sinustabelle (∿)
enthält 256 Stützstellen für eine ganze Periode.
Für das Phasen-Register genügen 16 Bit: Der Low-Teil
dient zur genauen Frequenzsynthese, der High-Teil
dient als Index für die Sinustabelle.
Überläufe stören so überhaupt nicht.
Das Diagramm wird mit mindestens 8 kHz (125 µs) durchlaufen,
kein Problem für jeden Mikrocontroller.
Umgesetzt ist es bereits dort
und jahrelang im Einsatz.
Tür öffnen per Goertzel
Das Mittel der Wahl ist üblicherweise der
Goertzel-Algorithmus.
Ich habe den Goertzel-Algorithmus nicht verstanden (hm),
insbesondere nicht, wo dieser gegenüber der DFT effizienter ist.
Die Koeffizienten k1 und k2 sind für jede Frequenz fix.
Deren Berechnung ist nichtlinear (mit Kosinus)
und muss je nach Abtastrate extern vorberechnet werden;
ein #define geht da nicht.
Die Multiplikation muss, um Grenzzyklen zu minimieren, 16 Bit breit sein.
Tür öffnen per DFT
Das hier beschreibt die
Diskrete Fouriertransformation (DFT).
Gegenüber dem Goertzel-Algorithmus ergeben sich folgende Vorteile:
Weiter Bereich der Abtastrate, keine Polstellen der Koeffizienten
Einfachere Schlussrechnung
Und folgende Nachteile:
Erhöhter Speicherverbrauch durch Sinustabelle (256 Byte)
Pro zu suchender Spektralkomponente (Frequenz) und Abtastwert
sind 2 Multiplikationen und Additionen (MULADD) erforderlich.
Zusätzlich sind zur Fensterung und Summenleistungsbildung
2 Multiplikationen und 1 Additionpro Abtastwert nötig.
Zum Abschluss der Summation, hier nach 20 ms = 178 Abtastwerten,
sind pro Kanal das Betragsquadrat = Spektralleistung zu bilden
und mit der Summenleistung auszuwerten.
Um überhaupt mit der knappen Rechenleistung zu Rande zu kommen,
wurden folgende Bitbreiten festgelegt:
Abtastwert: 8 Bit vorzeichenbehaftet (vzb.)
Sinustabellen-Länge und -Wertebereich: 8 Bit vzb. (±122 für „glatten“ Anstieg am Nulldurchgang)
Frequenz und Phase: 16 Bit, High-Teil = Index für Sinustabelle
Akkumulatoren: 24 Bit; Weiterrechnung mit 16 Bit
Vom zu untersuchenden Frequenzgemisch wird sowohl die Summenleistung
ermittelt (unterer Signalpfad) als auch mit Sinus und Kosinus der beiden
Suchfrequenzen korrelliert (übrige vier Signalpfade), die aus einem
DDS-Generator wie oben stammen.
Die Bandbreite entspricht der Länge des Suchfensters
und damit der Anzahl der Abtastwerte im linken, schnellen Teil.
Während die Summenleistung bereits als Quadrat vorliegt, werden die Sinus-
und Kosinus-Komponenten (wegen unbekannter Phasenlage des Eingangssignals)
quadriert und addiert,
es ergibt sich eine Spektralleistung.
Die Division relativiert die Spektralleistung zur Summenleistung.
Sie ist stets ≤1.
Beispiel: Besteht das Eingangssignal exakt aus
dem direkten Ausgangssignal des zweiten DDS-Generators (dritter Pfad),
enthält Akku 3 (Mitte) und Akku 5 (unten) den gleichen Wert,
die anderen Akkus den Wert 0.
Die Fensterung, üblicherweise cos², wird von einer gesonderten Tabelle gespeist,
deren Länge abhängig von der Quarzfrequenz ist,
genau wie auch die Werte von f1 und f2
von der Quarzfrequenz und dem Teiler des A/D-Wandlers abhängen.
Die Fensterung beseitigt Abschneidefehler nahezu vollkommen.
Bei 16 MHz Quarzfrequenz „purzeln“ alle 89 Abtastwerte = 10 ms
neue Ergebnisse heraus, und das Fenster ist genauso lang.
Da der Algorithmus beim Übergang von Block zu Block „blind“ ist
(durch die cos²-Fensterung), bietet es sich an,
den gesamten Algorithmus mit zwei Datensätzen doppelt auszuführen,
wobei deren Fensterung mit 180° phasenverschoben ist.
Nur bei ATmegas mit MUL-Befehl ist für diese zweite Berechnung genügend Reserve vorhanden.
Das Fenster wäre dann bei 16 MHz Quarzfrequenz 2×89 = 178 Abtastwerte = 20 ms lang,
und trotzdem „purzeln“ alle 10 ms neue Ergebnisse heraus.
Mit einem Windows-Programm
habe ich die Prinzipfunktion verifiziert.
Dabei kommt das Programm auch probeweise mit 4-Bit und sogar 3-Bit-Input zurecht,
es ist also sehr robust gegenüber kleiner Signalamplitude.
Mit 256 Abtastwerten pro Block und telefon-typischen 8 kHz Abtastrate
ergibt sich eine günstige Blocklänge von 31 ms.
Dass sich dabei zwischen jedem Block wegen der Hann-Fensterung
ein blinder Fleck ergibt ist für die DTMF-Detektion praktisch unerheblich.
Alle Multiplikation sind 8×8 = 16 bit, sehr günstig für ATmega und ATtiny.
Angezeigt wird unten in magenta
die Summenleistung (logarithmisch),
in grün und türkis
die doppelte Spektralleistung (logarithmisch), für jeden Block
von links nach rechts, von oben nach unten.
Darüber der gefundene Kode.
Das Erkennen von Lücken ist dann eine andere Aufgabe.
Die übliche schlampige Implementierung beachtet die Summenleistung nicht
und führt zu Fehldetektionen.
Betragsbildung
Das geht ohne Wurzelziehen hinreichend genau,
wie die folgende Grafik zeigt.
Das Bild zeigt Berechnungsmöglichkeiten für den Betrag einer komplexen
Zahl:
mittels Satz des Pythagoras
r = √x²+y²
und damit einer Wurzelfunktion (ergibt einen Kreis)
mittels Überabschätzung
r = |x|>|y| ? |x|+|y|>>1 : |y|+|x|>>1,
also ohne eine Wurzel zu ziehen (ergibt ein kreisähnliches Kleeblatt)
mittels Rundung
r = |x|>|y| ? |x|+|y|>>2 : |y|+|x|>>2,
schneller aber mehr maximale Abweichung
Die Lautsprecher-Endstufe wird sich nicht mit dem
Beinahe-Kurzschlussstrom der Telefonanlage begnügen.
Daher sorgt ein Schaltregler für die
Entnahme des Leistungsmaximums bei höherer
Spannung als 5 V.
Integrierte Schaltkreise sind für 60 V nicht zu haben,
also ist hier alles schön diskret.
Auch nicht viel komplizierter, wenn man eine
Drosselspule mit Koppelwicklung benutzt.
Mit MSP430
Typen mit integriertem 12-bit-D/A-Wandler erledigen das Ganze
komfortabler, vor allem gleich mit integriertem Multiplizierer.
Allerdings bedarf es einer analogen Endstufe zum Lautsprecher
und zur Leitung.
Anzapfung Türsprech-Anlage für analoges Schnurlos-Telefon
Türsprech-Anlagen gibt es (tatsächlich!) in zwei Ausführungen:
Voll analog, wobei jeder Mietpartei eine eigene Klingelleitung zugeordnet ist.
Im allgemeinen sind die Fernsprechleitungen für alle Mietparteien zu einem Bus zusammengefasst,
und gegenseitiges Mithören ist möglich.
Gesehen bei STR.
Teilweise digital mit einem Zweidraht-Bussystem,
welches Fernwirken (= Klingeln, Gespräch aufbauen, Gespräch abbauen)
mit RS-232 9600 Baud erledigt.
Die Tonübertragung und ggf. Bildübertragung erfolgt über dasselbe Kabel analog.
Gesehen bei BTicino,
wobei ticinoTessin heißt.
Etwas ordentliches bietet die IP-basierte Klingelanlage.
Dies ist hier nicht Thema.
In den USA gibt es GSM-Klingelanlagen, und das ist überaus praktisch:
Die Haustürklingel ist nichts anderes als ein Handy mit fest vergebenen Kurzwahlnummern.
Das Öffnen von Türen erfolgt vom mietereigenen Telefon oder Handy aus
durch Drücken einer Ziffernkombination.
Das klappt auch, wenn der Angerufene gerade durch Europa tourt.
(Ob das 'was nützt steht auf einem anderen Blatt.)
Die Telefonrechnung wird kurzerhand auf die Mieter verteilt.
Vorgefundene Schaltung
Zumindest die Sprechkapsel einer STR-Türsprechanlage ist mir mal in die Hände gefallen.
So sieht der Schaltplan rund um das Elektretmikrofon aus:
Das Ganze ist natürlich eine tonadergespeiste Verstärkerschaltung.
Ausführlich dort dokumentiert.
Zusätzlich ist noch ein Ausgangs-Tiefpass (Kondensator 100 nF × unbekannter Quellwiderstand)
sowie ein Verpolschutz (1N4004) eingebaut.
Mit dem Oszilloskop ließ sich (an 5 V und 1 kΩ) eine gut funktionierende Signalverstärkung sehen.
Ader v.l.n.r.
Kennung
Bedeutung
rot
1
(ÖT): (Tür)Öffner-Taste gegen 0
blau
M
Mikrofon, ca. 11 kΩ gegen 0
weiß
T
Hörkapsel, 45 Ω gegen 0
weiß
S
Summer, „schnarrende Klingel“, ca. 15-50 Ω gegen 0
grün
0
Masse, Bezugspotenzial
braun
Z
(ZT): Zusatztaster (z.B. für Treppenlicht, derzeit funktionslos) gehen 0
T,M,0
Sprechleitungen
GS
Gabelschalter (geschlossen, wenn Hörer abgenommen)
ET
Etagenruftaster (= Klingelknopf vor der Wohnungstür)
RTL
Ruftonlautsprecher (= Lautsprecher für den ET)
Gesehene Anschlüsse am Mietergerät
Der überwiegende Rest der SchaltungVerdrahtung ist
hier zu sehen.
Oder hier mit Spannungsangaben.
Über
Strichzeichnungen in JPG
kann ich eh' nur kotzen.
Funktionsweise
Echter Telefonanschluss vom Amt
Der Mikrocontroller muss eine Mini-Telefonanlage realisieren,
die zwischen Amt und Tür umschalten kann.
Bei höheren Komfortansprüchen mit kreuzweiser Anklopf-Funktion
und Rufnummern-Übermittlung mit CLIP.
Im Ruhezustand hängt das Telefon über das Relais K1 am Amt.
Der Mikrocontroller IC1 überwacht mit den beiden Optokopplern
OK1 und OK2 den Schleifenstrom in beiden Richtungen:
Fließt Schleifenstrom in eine Richtung,
ist das Telefon abgehoben, und vermutlich läuft ein Gespräch.
Fließt der Schleifenstrom in beide Richtungen,
klingelt das Telefon gerade.
Ansonsten ist das Telefon in Ruhe.
Weiterhin befindet sich ein NF-Übertrager T1
in der Amts-Telefonleitung, um:
während des Gesprächs einen Ton beim Klingeln einzublenden
(= Anklopfen)
Kurzzeitiges Anziehen von K1 würde dem Amt Auflegen signalisieren,
daher muss der Schleifenstrom ununterbrochen sein.
DTMF-Signale vom Telefon mitzuschneiden, um vom Telefon aus
die Tür(sprechstelle) anzuwählen (etwa mit der Rufnummer 702).
In Folge wird mit K1 das Telefon vom Amt auf die Tür
umgeschaltet:
Das Amt „sieht“ einen aufgelegten Telefonhörer.
Wenn jemand an der Tür klingelt und der Telefonhörer aufgelegt ist,
schaltet K1 und K2 um und gibt die Wechselspannung
vom STR-Klingelsignal direkt aufs Telefon: Es klingelt.
Verschwindet die Wechselspannung wieder, fällt K2 ab
und legt die Gleichspannung von der Hilfsspannungsquelle auf das Telefon.
Einige Millisekunden danach wird mittels CLIP die Rufnummer
der Tür zum Telefon gesendet, womit das Telefon „erkennt“,
dass der Anruf von der Tür kommt.
Dieser Zustand hält einige 10 Sekunden an (konfigurierbar).
Wünscht man einen vorzeitigen Abbruch,
dann am einfachsten durch kurzes Abheben des Telefonhörers.
Da das Telefon durch das Ausbleiben weiterer Klingelsignale „feststellt“,
dass ein „Anruf entgangen“ ist, sollten entweder:
dies ignoriert werden und durch Abheben des Telefonhörers das Gespräch
mit der Tür trotzdem geführt werden, oder
der Mikrocontroller (irgendwie) weitere Klingelsignale generieren
Nach Ablauf des Timeouts kann jederzeit per Tür-Rückruf (702)
das Gespräch mit der Tür aufgenommen werden,
daher ist das Timeout wenig kritisch.
Das Timeout sollte, falls vorhanden, mit dem der Tür übereinstimmen.
Solange das Tür-Gespräch besteht, übernimmt der Mikrocontroller
die Echokompensation in Software, und dekodiert DTMF.
Dabei werden 2 Rufnummern ausgewertet, etwa die 1 für den Türöffner
und die 2 für das Treppenlicht.
Die Klingelwechselspannung vom Amt wird ebenfalls überwacht
und ein Anklopfton (425 Hz 200 ms - Pause 200 ms - 425 Hz 200 ms) gesendet.
Die CLIP des Anrufers wird durch kurzzeitiges Abfallen von K1
zum Telefon durchgereicht.
Das Auflegen (die Unterbrechung des Schleifenstroms) führt
zum Abfall von K1 und effektiv zum Reset des Mikrocontrollers.
Dabei darf auch die Hilfsspannungserzeugung zusammenbrechen.
Es wurde Wert auf saubere Potenzialverhältnisse gelegt.
Der Einfachheit halber „springt“ das Telefon zwischen Amt- und Türpotenzial
mittels Relais K1 hin und her.
Dadurch ersparen sich breitbandige Analogsignal-Übertrager.
Nur der Hilfsübertrager T1 ist unverzichtbar,
um die Anklopf- und Türwählfunktion zu ermöglichen.
Interessant ist, dass der Teilnehmer während des Türsprechens
für das Amt nicht als „besetzt“ gilt sondern angeklopft werden kann.
Das (und nur das) erfordert eine Hilfsspannungsquelle.
Fritzbox
Eine bessere Fritzbox hat selbst schon Türsprechstellen-Funktion an der a-b-Doppelader.
Dafür scheint es keinen richtigen Standard (über dessen Betriebsweise) zu geben.
Zumindest konnte ich nichts auffinden.
Denn Türfreisprechstellen sind zwar so etwas ähnliches wie Telefone, aber nicht dasselbe.
Insbesondere fehlt ihnen das Merkmal Abheben und Auflegen.
So wie ich's aus dem Netz zusammenwursteln konnte funktioniert es so:
Der Klingelknopf lässt das „Telefon“ abheben (stellt Schleifenstrom her),
wählt daraufhin eine feste Nummer (701) und legt gleich wieder auf.
Eine Sprechverbindung wird anscheinend ausschließlich von der Fritzbox aufgebaut.
Wie diese initiiert wird ist unklar. Eventuell durch Klingeln.
Danach muss die Türstelle „abheben“.
Der Kode zum Türöffnen wird ebenfalls per DTMF übermittelt, etwa *9.
Wie der Abbau der Sprechverbindung erfolgt ist unklar.
Dies kann nur durch Tonsignal von der Fritzbox ausgelöst werden,
worauf die Türstelle durch Auflegen (Unterbrechung des Schleifenstroms) reagiert.
Vielleicht kann die Fritzbox auch den Schleifenstrom kappen.
Alle Fragezeichen lösen sich in Wohlgefallen auf, wenn die Türstelle
permanent oder zumindest lange Zeit (1 Minute und mehr)
nach dem Klingeln „abgehoben“ bleiben kann,
und die Fritzbox trotzdem unbeirrt IP-Gespräche führen kann.
Vielleicht ist das auch so.
Dann benötigt man extern nur einen
DTMF-Generator (zur Not IWF) und einen „Dekoder“
für die Ansteuerung des Türöffners.
Im Falle der alten STR-Anlage auch eine Gabelschaltung,
wenn's geht mit adaptiver Echokompensation.
Also genau wie oben!
Im Fall der STR-Anlage in einer Hausgemeinschaft
mit zusätzlichem Koppeltrafo auf der a-b-Doppelader
und, falls erforderlich, einer Schleifenauftrennung per Optokoppler.