Infrarot-Decoder MCP2120

Gast #5297085
Lesenswert?

Moin.

ich habe zwischen zwei Atmegas eine Infrarotstrecke aufgebaut. Besteht 
grundsätzlich aus einem TFDU4301 als Transceiver und einem MCP2120 als 
Dekoder/Encoder für das UART-Signal. Schaltung vom Sender funktioniert 
und das Signal wird über die IR-LED gesendet. Probleme macht der 
Empfänger.
Die Schaltung vom Empfänger ist im Anhang. Der TFDU4301 empfängt das 
IR-Signal und gibt auch ein sauberes Signal aus. (TP1) Nur der MCP2120 
will einfach nicht funktionieren. Egal was am RX-IR Pin anliegt, der 
RX-Ausgang, der zum Atmega geht ist durchgehend auf High-Pegel. Ich habe 
alle Spannungen an den Pins kontrolliert. MODE, ENABLE und !RESET liegen 
auf High, BAUD-Pins sind der Geschwindigkeit entsprechend geschaltet. 
Der Quarz schwingt sauber und gleichmäßig. Nur am RX-Ausgang tut sich 
nix. Jemand eine Idee was das Problem sein könnte? Chip Defekt? Wäre 
komisch - Kommt direkt von der Rolle..
Angehängte Dateien:
Gast #5297161
Lesenswert?

pegel schrieb:
> Wenn du Mode auf L legst, sollten die Daten durch gereicht werden.
> Macht er das?

Probiere ich morgen mal aus.

Marc H. schrieb:
> Du darfst MODE nicht einfach nur auf High oder Low legen! Du musst dem
> umschalten um vom Command in den Data-Mode zu schalten!

Sicher? Wo liest du das? Auf der Senderseite klappt die Kodierung ja 
auch und dort liegt er auch auf High..
Gast #5298170
Lesenswert?

So neuer Tag neues Glück.

pegel schrieb:
> Wenn du Mode auf L legst, sollten die Daten durch gereicht werden.
> Macht er das?

Nein macht er nicht. Der Ausgang ändert sich nicht egal was an MODE 
anliegt.
Er liegt durchgehend auf 3,3 V.

Ich habe im Anhang ein Bild vom Ausang des TFDU4301 angehängt. Das 
Signal geht auf den RX-IR Eingang des MCP2120. Das Signal sieht an sich 
gut aus. Was mir aufgefallen ist, ist dass das Signal nicht bis auf 
Masse gezogen wird, sondern nur bis auf ca. 0,4 -0,5 V. Im Datenblatt 
des MCP2120 steht auf Seite 14, dass der Chip maximal 0,2 V als Low 
Pegal erkennt. Deswegen dachte ich zunächst, dass er deswegen die 
negative Flanke nicht erkennt und den Ausgang dauerhaft auf High legt. 
Ich hab dann aber mal mit einem Kabel den Eingang einfach auf Masse 
gezogen und am Ausang tat sich auch dann rein gar nichts. Als würde der 
Chip schlafen...

Mittlerweile habe ich auch schon beide Chips (MCP2120 und TDFU4301) 
Einmal ausgetauscht um einen Defekt auszuschließen. Noch irgendjemand 
ein Idee? Hier noch das Datenblatt.

http://ww1.microchip.com/downloads/en/DeviceDoc/21618b.pdf

Tausend Dank
Gast #5298216
Lesenswert?

pegel schrieb:
> Das hatte ich im DB falsch interpretiert.
> Bei Mode=L geht der TX vom µC wieder direkt an den RX zum µC.

Mit µC meinst du den MCP2120? Wo steht das im Datenblatt?

pegel schrieb:
> 65 kHz? Komische Frequenz. Ob er damit was anfangen kann?

Hatte mich auch ein wenig gewundert. Aber das Signal wird auf der 
Senderseite auch vom MCP2120 erzeugt. Demnach dachte ich, dass das 
passen sollte. Baudrate liegt bei 115200. Das Signal vom UART ist aber 
ja auch nicht periodisch von daher ist die angezeigte Frequenz wohl 
nicht so ausschlaggebend. BAUD2..1 am MCP2120 ist auf Senderseite und 
Empfängerseite 100. Und auch der Mikrocontroller sendet mit einer 
Baudrate von 115200. Das passt also.
Gast #5298283
Lesenswert?

pegel schrieb:
> Mir ist noch nicht klar wie man 115000 bit/s in ein 65000 Impulse/s
> Datenstrom kriegt.
> Aber vielleicht denke ich verkehrt.

Naja ich habe mir das so erklärt, dass die Daten die ich sende, (In 
meinem Fall ein String mit "123") keine feste Abfolge von Nullen und 
Einsen hat und damit auch keine feste Frequenz. Ich denke also, dass das 
was das Oszi da "misst" nix mit der eigentlichen Frequenz der 
Übertragung zu tun hat.
Gast #5298434
Lesenswert?

Du denkst also, dass der Chip ein falsches Signal bekommt? Ich denke 
selbst dann müsste er irgendetwas dekodieren und nicht einfach 
durchgehend high ausgeben. Die Pulszeiten von bisschen mehr als 2 µs 
sind ja auch voll okay. Also müsste er das auch wieder zurückwandeln 
können.
Gast #5298489
Lesenswert?

Habe gerade an anderer Stelle gelesen, dass der MCP2120 nicht 
gleichzeitig senden und empfangen kann. Anscheinend kann es zu Problemen 
kommen, wenn der TX Pin wie in meinem Fall nicht beschaltet ist. Der 
MCP2120 könnte den floatenden Pin als 0 interpretieren. Man könnte den 
Pin als per Pullup auf logisch 1 ziehen und somit einen inaktiven 
Transmitter "vortäuschen". Denkt ihr, dass das das Problem sein könnte?
Gast #5298536
Lesenswert?

Als nächstes würde ich erst mal versuchen die FIGURE 2-2
im Datenblatt nach zu vollziehen und am Oszi die Sendesignale beobachten 
ob die Zeitlich wie in der Abbildung aussehen. Evtl. die Baudrate runter 
setzen.
#5298581
Lesenswert?

DH schrieb:
> Habe gerade an anderer Stelle gelesen, dass der MCP2120 nicht
> gleichzeitig senden und empfangen kann. Anscheinend kann es zu Problemen
> kommen, wenn der TX Pin wie in meinem Fall nicht beschaltet ist. Der
> MCP2120 könnte den floatenden Pin als 0 interpretieren. Man könnte den
> Pin als per Pullup auf logisch 1 ziehen und somit einen inaktiven
> Transmitter "vortäuschen". Denkt ihr, dass das das Problem sein könnte?

Du darfst ohnehin niemals einen digitalen Input floaten lassen, weil 
dadurch unzulässig hohe Querströme in der Eingangsstufe auftreten 
können.

Pullup dran und gut.

Ich frage mich ohnehin, warum Du nicht einen Chip genommen hast, dessen 
UART IRDA kann. Jeder PIC24 hat es eingebaut.

fchk
Gast #5298737
Lesenswert?

Ich habe mit dem STM32F103 RS232 und IRDA erzeugt und das berechnete 
Timing passt.
Ich denke es braucht schon ein passendes IRDA Protokoll mit stimmigem 
Timing das Decodiert werden kann.
Mit Startbit und Daten.
"Irgendwas" am Eingang bringt keine Daten am Ausgang.

Also am Besten zuerst Das Sende Timing prüfen.
Angehängte Dateien:
Gast #5299303
Lesenswert?

Hi,

erstmal vielen Dank für deine Mühe !

Hast du die Pulse von dir auch mit dem MCP2120 erzeugt oder per 
Software?

Ich verstehe nicht 100%ig wie du auf die Berechnung kommst.

1 Bit ist klar. 1/115200. Wie hast du CLK berechnet?
Pulslänge sollte auch klar sein. (1/7372800)*12

Ich kann leider erst morgen wieder an das Oszi. Auf der Senderseite 
nutze ich den Open Collector Ausgang des TFDU4301 um eine IR-LED 
anzusteuern. Das mache ich um die Reichweite zu erhöhen, da ich so 
mehrere LEDs gleichzeitig ansteuern könnte. Eventuell gibt es auch dort 
bei der Ansteuerung des PNP-Transsistors Probleme..Im Anhang die 
Schaltung auf Senderseite. Das TXD-Signal kommt vom MCP2120. Vielen Dank 
nochmal für die Hilfe bei der Fehlersuche!
Angehängte Dateien:
Gast #5300698
Lesenswert?

Soo..

ich habe heute einiges gemessen. Habe jetzt mit dem Mikrocontroller 0x55 
ausgegeben und eine alternierende Abfolge von Nullen und Einsen zu 
haben. Damit stimmt jetzt die angezeigte Frequenz vom Oszi schonmal. 
57,2 kHz. Das passt für 115200 Baut. Nachdem ich mir die Signale am 
Sender angeschaut habe, bin ich jetzt der Meinung dass das Problem 
bereits auf der Senderseite liegen könnte. In Bild 1 sieht man das 
Eingangssignal vom Mikrocontroller (blau)und die Puls am IR-TX Ausgang 
des MCP2120 (gelb). Das ist allerdings nur eine Momentaufnahme. In der 
laufenden Messung sind die Puls wie in Bild 2 zu sehen verschwommen. Die 
Puls treten also nicht immer an der selben Stelle auf, wobei der Abstand 
zwischen den Pulsen für 8 Bit Übertragung immer gleich ist.   Eventuell 
liegt das an dem Offset, der auf Seite 8 im Datenblatt beschrieben ist?! 
Bis dahin sieht denke ich alles noch okay aus. Die Pulse sind 1,6 µs 
lang und und auch die anderen Berechnungen von dir passen.

Das eigentliche Problem tritt denk ich nach dem TFDU4301 auf. Bild 3 
zeigt das Signal am Ausgang des TFDU4301 vor dem Basiswiderstand. An der 
steigenden Flanke ist eine Stufe zu erkennen. Ich habe keine Ahnung wo 
die herkommt. Allerdings führt sie dazu, dass der Puls vom Signal 
verlängert wird. Denn während der Stufe sperrt der Transistor noch 
nicht. Im vierten Bild ist das Signal, dass an der Basis anliegt. In 
Bild 5 kann man dann die resultierenden Pulse sehen, die auf die LED 
gehen. Der ist dann zu dem Zeitpunkt schon ca. 3,4µs.

Nach dem TFDU4301  Empfängerchip folgt dann Bild 6. Da ist das Signal 
dann 2,24 µs. Vielleicht bekommt der Chip das einfach nicht dekodiert.

Frage ist jetzt..Ist so eine Stufe am Transistor irgendetwas 
charakteristisches, das auf irgendetwas schließen lässt? Ich bin 
überfragt. Vielleicht fällt ja jemand etwas auf. Noch dazu: Elko C37 ist 
noch nicht auf der Platine. Den wollte ich erst einbauen, wenn mehrere 
LEDs an dem Transistor hängen.

Danke
Angehängte Dateien:
Gast #5300737
Lesenswert?

pegel schrieb:
> Probier doch erst mal die interne LED des TFDU4301 ohne Transistorstufe.
> Dazu R10 entfernen und die Anode der LED anschließen.

Muss ich mal probieren ob das möglich ist. Die Chips sind schon auf 
einer gefertigten Platine. Viel Spielraum ist da nicht. Was mir auch 
noch aufgefallen ist. Wenn der Lastkreis nicht angeschlossen ist, dann 
ist das Signal nach dem TFDU4301 sauber.
Gast #5300854
Lesenswert?

pegel schrieb:
> Na also. Da haben wir es.

Was haben wir? :)

pegel schrieb:
> Falls du einen 74AC14 in der Kiste hast kannst du den als LED Treiber
> probieren. Wichtig: AC nicht HC.

Nein leider nicht. Und wie gesagt. Die Platinen sind schon gefertigt und 
bestückt. Müsste doch eigentlich irgendwie an der Transistorbeschaltung 
liegen, wenn das Signal ansonsten sauber ist oder?!..Für was genau soll 
der Chip helfen? Zum Invertieren oder um die Stufe mit dem 
Schmitt-Trigger zu eleminieren?

Danke dir
#5300884
Lesenswert?

DH schrieb:
> Das eigentliche Problem tritt denk ich nach dem TFDU4301 auf. Bild 3
> zeigt das Signal am Ausgang des TFDU4301 vor dem Basiswiderstand. An der
> steigenden Flanke ist eine Stufe zu erkennen. Ich habe keine Ahnung wo
> die herkommt.

Die Stufe ist ganz normal und an sich kein Problem. Der TFDU hat einen 
open-collector Ausgang und das Signal wird an diesem Punkt nur durch R11 
und die BE-Strecke von K1 gegen +3.3V gezogen. Wenn der TFDU abschaltet, 
fällt der Strom schnell ab, der Spannungsabfall über R10 geht auf 0. Das 
ist der schnelle Anstieg.

In der Basis-Zone von K1 ist aber noch Ladung gespeichert und die 
Miller-Kapazität schiebt auch noch ein bißchen nach. Die fließt jetzt 
langsam über R11 nach +3.3V ab. Der Transistor K1 macht langsam (naja) 
zu und gegen Ende des kleinen Plateaus bei (3.3-0.7)V sperrt er 
vollständig.

> Allerdings führt sie dazu, dass der Puls vom Signal
> verlängert wird.

Wenn du willst, daß K1 schneller abschaltet, mach R11 kleiner. Ebenso 
mach R10 nicht kleiner als nötig. K1 soll nur knapp in die Sättigung 
gehen. Je mehr du K1 übersteuerst, desto langsamer schaltet er ab.


pegel schrieb:
> Falls du einen 74AC14 in der Kiste hast kannst du den als LED Treiber
> probieren.

Unsinn. Nicht für 115.2kHz.
#5300895
Lesenswert?

pegel schrieb:
> Axel S. schrieb:
>> Unsinn. Nicht für 115.2kHz.
>
> Wieso nicht? Der kann 24mA treiben und ist schnell.
> Was spricht dagegen?

Daß er vollkommen überzogen ist? 24mA könnte übrigens auch der TFDU4301 
alleine treiben, dafür bräuchte er keinen externen Transistor. Die 
Schaltstufe mit dem BCP51 ist vollkommen daneben dimensioniert:

- es fließen gut 25mA Basisstrom, aber kaum 20mA Kollektorstrom
- der Transistor ist also massiv übersteuert
- R11 ist zum schnellen Abschalten zu groß
Gast #5300901
Lesenswert?

Axel S. schrieb:
> Daß er vollkommen überzogen ist? 24mA könnte übrigens auch der TFDU4301
> alleine treiben, dafür bräuchte er keinen externen Transistor. Die
> Schaltstufe mit dem BCP51 ist vollkommen daneben dimensioniert:
>
> - es fließen gut 25mA Basisstrom, aber kaum 20mA Kollektorstrom
> - der Transistor ist also massiv übersteuert
> - R11 ist zum schnellen Abschalten zu groß

Ich hatte am Anfang erwähnt, dass ich mehr als die eine LED an den 
Transistor hänge will. Da sollten dann bis zu 1 A Pulsstrom fließen. Die 
eine ist momentan nur zu Testzwecken.

Axel S. schrieb:
> Schaltstufe mit dem BCP51 ist vollkommen daneben dimensioniert:

Okay ich werde versuchen R11 zu reduzieren. Sonst noch Vorschläge? 
Dankeschön

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren