Hallo,
ich bin kürzlich auf den CLIP-Decoder von Arkadiusz Antoniak gestoßen
und wollte mir mal anschauen, was er da so gebaut hat. Schaltplan und
Quellcode im Anhang. Nun hab ich eine Frage zur Erkennung des
Telefonklingelns:
Der Transistor T2 schaltet durch, wenn die gleichgerichtete
Klingelspannung groß genug ist, um über R18 mindestens 0,7 Volt abfallen
zu lassen ... also so etwa 34 Volt. Soweit ich recherchiert habe,
klingelt bei uns (und vermutlich auch in Polen) eine Wechselspannung mit
25 Hertz und Amplituden >48 Volt. Das sollte also reichen, um T2
durchzuschalten.
Wenn T2 leitet, entlädt sich C10 über R20, und der CALL-Pin (PD3) geht
auf LOW. Wenn T2 sperrt, lädt sich C10 über R20 und R19 auf und CALL
geht auf HIGH.
Dem Quelltext entnehme ich nun, daß die fallende Flanke an PD3 den MC
mit einem externen Interrupt aus dem Schlaf reißt, worauf dann dieses
Stück Code folgt:
1 | i = j = 0;
|
2 | while (1) { // waiting for end of call with timeout
|
3 | Waitms(1);
|
4 | if (CALL_PIN != 0) {
|
5 | j = 0;
|
6 | if (++i >= 150)
|
7 | break;
|
8 | } else {
|
9 | i = 0;
|
10 | if (++j >= 150)
|
11 | break;
|
12 | }
|
13 | }
|
14 |
|
15 | if (j != 0) { // timeout overflow - impulse wasn't call signal
|
16 | Waitms(500);
|
17 | continue;
|
18 | }
|
Hier wird also im Abstand von 1 ms der CALL-Pin überprüft, bis er
entweder 150 ms am Stück HIGH oder 150 ms am Stück LOW war. Letzterer
Fall wird als "kein Klingeln" gewertet und der MC geht wieder schlafen,
bis eine Klingelpuls ihn erneut weckt und das Spiel erneut beginnt.
Die Werte für C10, R20 und R19 sind nun im Schaltplan so gewählt, daß
während eines 25-Hertz-Klingelns die Zähler i und j niemals den Wert 150
erreichen, bevor der CALL-Pin wieder seinen Zustand wechselt und der
jeweils andere Zählen inkrementiert wird. Nur nach dem Ende des
Klingelns erreicht i die Abbruchbedingung und verläßt die
Polling-Schleife.
Was soll das ganze Theater nun überhaupt bezwecken? Auf diese Weise wird
ja jeder Impuls >=34 Volt als Klingeln erkannt. Das hätte man auch
einfacher haben können. Und selbst wenn Widerstände und Kondensator so
gewählt wären, daß der CALL-Pin nicht auf HIGH geht, bevor die nächste
Halbwelle der Klingelspannung den Transistor T2 wieder durchschaltet
(also langsameres Aufladen), käme nichts sinnvolles dabei heraus, weil
dann in obiger Zählschleife j den Wert 150 erreicht und das ganze als
"kein Klingeln" behandelt wird.
Ich kann mir keinen Reim darauf machen, was der gute Arkadiusz damit
eigentlich bezwecken wollte. Kann mich jemand erleuchten?