Zuverlässig schalten mit optischer Übertragung über ein TOSLINK (S/PDIF) Kabel

Zuverlässig schalten mit optischer Übertragung über ein TOSLINK (S/PDIF) Kabel

Es kommt immer wieder vor, dass wir Frickler einen optischen Impuls übertragen wollen, die bewährte Lösung ist, eine LED und eine Fotodiode flach abzufeilen und das Lichtleiterkabel anzukleben. Es gibt auch noch verschiedene verbesserte Versionen dieser Technik.
Aber warum nicht einfach einen Baustein verwenden, der dafür vorgesehen ist? Ich experimentieren ein wenig mit dem GP1FAV51RK0F.

Sharp-Receiver

Sharp GP1FAV51RK0F Fiber Optical Reveiver

Das Geniale

Genial an diesem Baustein ist, dass er

  1. billig zu haben ist (ab 1€)
  2. sehr empfindlich ist
  3. eine Standard Toslink Buchse darstellt
  4. ein Loch für eine Schraube für die Frontplattenmontage hat
  5. über einen integrierten Verstärker verfügt
  6. relativ schnell ist (Transferrate von 13.2 Mb/s, mit den entsprechenden Rise- und Fallzeiten)
  7. in 5 V und 3.3 V zu haben ist
  8. Standard-TTL Pegel liefert

was will man mehr?

Es gibt neben dem GP1FAV51RK0F (Receiver) dem entsprechend den GP1FAV51TK0F (Transmitter) und für 3.3 V noch den GP1FAV31RK0F bzw. GP1FAV31TK0F. Die Bausteine sind sehr tolerant, was die Eingangsspannung angeht (max. 7V). Etwas empfindlich scheinen sie beim Löten zu sein, denn der Hersteller empfiehlt, die Pins nicht direkt mit dem Lötkolben zu berühren! Bei mir ist allerdings deswegen noch keiner kaputt gegangen. (Von einem, den ich mit Netzspannung gut durchgebraten habe berichte ich euch später …)

Das Problem

Im Wesentlichen hatte ich drei Probleme mit dem Teil

  • Das Datenblatt ist nicht exakt eindeutig formuliert und lädt zu Spekulationen ein. Zum Beispiel heisst es dort
    [quote]The output (H/L Level) of this product are not fixed constantly when it receivers the modulating light (including DC light, no input light) less than 0.1 Mb/s [/quote] was an verschiedenen Stellen im Internet zum Beispiel so interpretiert wird, dass der Baustein bei gleichmäßigem Lichteinfall oszillieren würde.
  • Das Ding neigt dazu völlig unkontrolliert zu oszillieren. Manchmal nicht, meist aber doch. Die Oszillationen (siehe Bild) sind so heftig, dass damit kein Blumentopf zu gewinnen ist.
  • Das Ding neigt dazu beim Einschalten auf high-Pegel festzuhängen. Das repariert sich zwar, wenn ein optisches Signal ankommt, aber wenn man einen definierten Einschalt-Zustand braucht, is Essig mit dem Teil.
Kein-Signal

Unkontrollierte Oszillationen

Die Lösung

Ist eigentlich einfach:

  • Das Teil braucht, wie jeder andere digitale Baustein auch einen Entkopplungskondensator. Wegen des Latsch-up Problemes, zeigt sich, dass es eine gute Idee ist, den Entkopplungskondensator eher klein zu wählen.
    Meiner Erfahrung nach ist ein 47 nF Entkopplungskondensator mehr als ausreichend und funktioniert immer perfekt.
  • Der unspezifizierte Einschaltzustand ist ein ernstes Problem. Bei einer ersten Charge ließ sich das Problem durch eine kleine Schaltung für steilere Flanken beim Einschalten sehr gut beheben, eine spätere Charge enthielt jedoch mehrere Bausteine, die dadurch nicht zu beeindrucken waren und dennoch keinen eindeutigen Einschaltzustand annahmen. Auf eine sehr kurze Spannungsunterbrechung nach erfolgtem Einschalten reagierten allerdings auch diese Bausteine mit einem zuverlässigen low-Pegel. Vielleicht könnte man auf dieser Schiene also doch den ein oder anderen Erfolg erzielen?
    Die einzig verlässliche Lösung scheint es soweit sein, entweder nur auf fallende Flanken zu schalten, oder eben einen kleinen Mikrocontroller hinter den Baustein zu hängen. Auch, wenn das den Vorteil bietet, Kodierungen und komplexere Schaltmuster zu implementieren, ist es damit natürlich in der Tat nicht mehr im engeren Sinne einfach.

[toggle title=“Steile Flanken per PNP-Transistor“ style=“fancy“]

Die folgende einfache Schaltung mit einem Standard-Kleinsignal-PNP-Transistor BC856B  sorgt für eine bessere Flankensteilheit beim Einschalten.

Schaltplan_PowerUp

Hier sieht man den Effekt am Beispiel einer linear ansteigenden Versorgungsspannung. In der Realität ist der Effekt noch besser, weil die Versorgungsspannung nicht linear sondern exponentiell ansteigt (normalerweise).

Power-Up

Steilerer Anstieg der Versorgungsspannung.

[/toggle]

Mit dem Satz [quote]The output (H/L Level) of this product are not fixed constantly when it receivers the modulating light (including DC light, no input light) less than 0.1 Mb/s [/quote] ist übrigens einfach gemeint, dass das sich kein konstanter High-Pegel von 5 V ergibt, sondern die Spannung langsam, mit geschätzt 0.05 V/ms abfällt. Wenn man das in kauf nehmen kann, ist es also durchaus möglich sinnvoll mit viel geringeren Frequenzen, als den geforderten 100 kHz zu operieren.

Digitaler Empfänger

Hier ein Schaltplan für einen Atmet ATTINY45 als Decoder an dem optischen Empfänger. Am Programmierheader stehen die digitalen Ausgänge PB5, PB2, PB1 und PB0 für angeschlossene Schaltungen zur Verfügung, PB4 verbindet den optischen Empfänger mit dem Microcontroller. Selbst mit dem 1€ ATTINY45 kann man also hervorragend rumspielen.

Schaltplan_optischer_Empfänger ReceiverBottom ReceiverTop

Ein Beispielprogramm

#include <avr/io.h>
#include <avr/interrupt.h>

#include <util/delay.h>

volatile uint8_t state;
volatile uint8_t level;

int main(void)
{
DDRB = ~(1 << DDB4); // Alle ausser PB4 auf Ausgang (0 = Input, 1 = Output)
PORTB = ~(1 << PB4 | 1 << PB0); // Alle ausser PB4 und PB0 auf high

PCMSK |= _BV(PCINT4);
GIMSK |= _BV(PCIE);

level = PINB & _BV(PB4);

sei();

while(1)
{
}

return 0; /* never reached */
}
// Vorläufig reagiere ich einfach auf eine fallende Flanke und fertig.

ISR(PCINT0_vect)
{
uint8_t pinstate = PINB & _BV(PINB4);

if (pinstate == 0 && level != 0)
{
state = 0;
PORTB |= _BV(PB0);
_delay_ms(50);
PORTB &= ~_BV(PB0);
}

level = pinstate;
}


Tags assigned to this article:
AVRDIYSchaltung

2 comments

Write a comment
  1. Dr. Stack van Hay
    Dr. Stack van Hay 6 Mai, 2013, 18:34

    Yes in deed! Ganz genau dafür dient die ganze Schose auch!
    Irgendwann in ferner Zukunft fügen sich viele einzelne Experimente zu einem nano-Sekunden Blitz für die Mikrophotographie. Und wenn das Teil zündet, will ich definitiv meinen Computer nicht leitfähig damit verbunden haben 🙂

    Reply this comment
  2. Dschen
    Dschen 6 Mai, 2013, 18:10

    Bei meinen Tests zeigte sich, daß übliche Toslink-Kabel (auch mit Geflecht herum und/oder Metall-Steckern) bei 1000V noch einen Widerstand von über 100Gohm haben, also ist die ganze Chose als super-Optokoppler nutzbar.

    CU Dschen

    Reply this comment

Write a Comment