Forum: Mikrocontroller und Digitale Elektronik Infrarot-Decoder MCP2120


von DH (Gast)


Angehängte Dateien:

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..

von pegel (Gast)


Lesenswert?

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

von Marc H. (marchorby)


Lesenswert?

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

von DH (Gast)


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..

von DH (Gast)


Lesenswert?

DH 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!

Hier steht auf Seite 5 auch, dass man ihn auf VSS oder VCC legen soll, 
wenn man die Baudrate per Hardware festlegt.

http://ww1.microchip.com/downloads/en/AppNotes/00756a.pdf

von DH (Gast)


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

von DH (Gast)


Angehängte Dateien:

Lesenswert?

Bild vergessen...

von pegel (Gast)


Lesenswert?

DH schrieb:
> Der Ausgang ändert sich nicht egal was an MODE
> anliegt.

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

65 kHz? Komische Frequenz. Ob er damit was anfangen kann?

von DH (Gast)


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.

von pegel (Gast)


Lesenswert?

DH schrieb:
> Mit µC meinst du den MCP2120?

Nein, den, der Daten vom und zum MCP2120 schaufelt.

Es sich auch an beiden Seiten die gleichen Quarze?

von pegel (Gast)


Lesenswert?

2.4.1.2. "To place the MCP2120 into Command Mode, the
MODE pin must be at a low level. When in this mode,
any data that is received by the MCP2120’s UART is
"echoed" back to the controller and no encoding/
decoding occurs."

von pegel (Gast)


Lesenswert?

Sollte heissen:

Es befinden sich auch an beiden Seiten die gleichen Quarze?

von DH (Gast)


Lesenswert?

pegel schrieb:
> Es befinden sich auch an beiden Seiten die gleichen Quarze?

Ja die Quarze sind auf beiden Seiten baugleich und schwingen auch. Mit 
Oszi geprüft. Beide haben 7,3728 MHz.

von pegel (Gast)


Lesenswert?

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

von DH (Gast)


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.

von pegel (Gast)


Lesenswert?

Sende doch mal was anderes. Z.B. 0xAA in einer Schleife.

Dann am Oszi so einstellen das ein oder zwei Byte komplett zu sehen 
sind.

von DH (Gast)


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.

von DH (Gast)


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?

von pegel (Gast)


Lesenswert?

Probier es einfach aus.
Vielleicht auch mal ein Reset auslösen und sehen ob sich etwas tut.

von pegel (Gast)


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.

von Frank K. (fchk)


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

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mal die Sende Timings für 115200Baud berechnet.

von pegel (Gast)


Angehängte Dateien:

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.

von pegel (Gast)


Lesenswert?

Die Impulse auf dem Oszi Bild sind auch 2,4µs lang, dass sollten 1,63µs 
sein. Vielleicht ist das schon problematisch.

von pegel (Gast)


Lesenswert?

Ich meine die Impulse auf deinem Oszi Bild, die vom STM32 passen,
so wie im Datenblatt vom MCP.

von DH (Gast)


Angehängte Dateien:

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!

von pegel (Gast)


Lesenswert?

Hallo,

DH schrieb:
> Hast du die Pulse von dir auch mit dem MCP2120 erzeugt oder per
> Software?

nein, weder noch. Das macht das Hardware IRDA im STM32.

DH schrieb:
> 1 Bit ist klar. 1/115200. Wie hast du CLK berechnet?

16 CLK ergeben 1Bit.

Kannst ja mal direkt am IRDA_C und dann an der LED messen und 
vergleichen.
Notfalls zum Test die LED im TFDU direkt nutzen.

von DH (Gast)


Angehängte Dateien:

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

von pegel (Gast)


Lesenswert?

So ein Widerstand Spannungsteiler kann das Signal schon verändern.

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

von DH (Gast)


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.

von pegel (Gast)


Lesenswert?

DH schrieb:
> Wenn der Lastkreis nicht angeschlossen ist, dann
> ist das Signal nach dem TFDU4301 sauber.

Na also. Da haben wir es.

von pegel (Gast)


Lesenswert?

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

von DH (Gast)


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

von Axel S. (a-za-z0-9)


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.

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Axel S. schrieb:
> Unsinn. Nicht für 115.2kHz.

Wieso nicht? Der kann 24mA treiben und ist schnell.
Was spricht dagegen?

von Axel S. (a-za-z0-9)


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ß

von DH (Gast)


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

von pegel (Gast)


Lesenswert?

DH schrieb:
> Ich hatte am Anfang erwähnt, dass ich mehr als die eine LED an den
> Transistor hänge will.

Daran hatte ich auch gedacht.
Für jede LED einen 74AC14 und die Belastung des TFDU4301 hält sich sehr 
in Grenzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.