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..
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..
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
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
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?
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.
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."
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.
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.
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.
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?
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.
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
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.
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!
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.
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
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.
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.
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
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.
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ß
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
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.