Forum: Mikrocontroller und Digitale Elektronik Level shifter für UART


von Eugen T. (der_eugen_thorben)


Angehängte Dateien:

Lesenswert?

Hi, ich hoffe ich kann mein Problem gut umschreiben.

Ich verwende einen Atmega2560 und möchte ein Display damit steuern.
Das Display besitzt eine Intelligenz und gibt leider 3.3V aus.

Der Atmega reagiert in der UART Interrupt Routine nicht, sobald das 
Display etwas sendet.

Ich wollte einen Level Shifter verwenden, jedoch klappt es nicht.

Ich habe mir den 40109BE ausgesucht und habe Vcc und ENABLE A mit 3.3 V, 
VDD mit 5V verbunden. Der TX Ausgang vom Display ist mit dem Eingang A 
verbunden und E mit dem RX Eingang vom Atmega.

Der RX Pin vom Atmega hat die Spannung 5V.

Es ist so, dass wenn am Eingang 'A' 0 V anliegen, dass am Ausgang 'E' ca 
2.5 V anliegen. Das heißt, dass es so nicht funktioniert.

Der Levelshifter funktioniert. Wenn ich an A 3.3 V anschließe, dann sind 
am Ausgang 5 V, wenn jetzt dort nicht RX vom Atmega anliegen.

Im Anhang ist ein Blockschaltbild.

Hier ist das Datenblatt zum Shifter zu finden:
http://www.ti.com/lit/ds/symlink/cd40109b.pdf


Es ist auch alles korrekt angeschlossen.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

TX und RX gekreuzt?

Und: Du hast Dir einen ziemlich alten Chip ausgesucht. Ein 74LVC1T45 
wäre das, was man heute nehmen würde.

fchk

von Uwe B. (uwe_beis)


Lesenswert?

Vom Anschluss her scheint mir alles richtig.

Zur Sicherheit:

Atmega Rx nicht angeschlossen:
A: 0V   -> E: 0V
A: 3,3V -> E: 5V
Atmega Rx angeschlossen:
A: 0V   -> E: 2,5V
A: 3,3V -> E: 5V  <-- ?
Korrekt?

Wenn ja: Offensichtlich zieht der Rx-Eingang die Leitung und damit den 
Ausgang E hoch, es ist also entweder kein Eingang, sondern ein Ausgang, 
oder ein Pull-Up im Atmega ist so stark bzw. der 40109 ist so schwach, 
dass er nicht gegen den Pull-Up ankommt. Tipp: Mess' mal den Strom auf 
der Rx-Leitung.

von U. M. (oeletronika)


Lesenswert?

Hallo,
evtl. leigt das Problem ganz wo anders und du machst jetzt viel Aufwand 
und es funktioniert trotzdem nicht. Warum erklärst du nnicht das ganze 
Thema etwas genauer.

Deshalb einige Fragen:
1. Um was für ein Display handelt es sich?

2. Ist der Eingang des Display 5V-tolerant?
Wenn nicht, kann man das auch leicht mit einem Spannungteiler beheben.

3. Was für Pegel gibt das Display konkret aus?
Mit einem Logigpegel von 3,3V kann man normal eine 5V-Logik noch gut 
betreiben. Evtl. reicht ein Pullup gegen 5V.

4. Welche Baudraten werden überhaupt verwendet?
Gruß Öletronika

von Eugen T. (der_eugen_thorben)


Lesenswert?

uwe_beis hat es gut beschrieben. die rate ist 9600.
das display ist 5v tolerant, gibt jedoch 3.3V aus. RX und TX sind 
korrekt angeschlossen und nicht vertauscht.

find die Idee auch gut einfach einen pullup auf TX vom Display 
anschließen.

sollte eigentlich gehen.

falls nicht werd ich mir den anderen Chip 74LVC1T45 ebenfalls holen und 
es mit dem testen.

ich schreib dann, wenn das problem behoben ist.

von S. Landolt (Gast)


Lesenswert?

U. M. schrieb:
> Mit einem Logigpegel von 3,3V kann man normal eine
> 5V-Logik noch gut betreiben.
Eben, im Datenblatt des ATmega2560 lese ich für V(IH) (bei Vcc= 5.0 V) 
ein Minimum von 0.6*Vcc, also 3.0 V. Da stimmt etwas anderes nicht.

von Eugen T. (der_eugen_thorben)


Lesenswert?

ja, das hab ich auch gedacht, dass 3.3V klar gehen. Wenn ich zum 
Beispiel die Spannung am RX Pin vom Atmega messe, dann reagiert die 
Interrupt Routine, weil dann eine LED leuchtet. Eigentlich sollte es 
nicht leuchten, wenn man misst, jedoch reagiert dann die Routine.

von Dietrich L. (dietrichl)


Lesenswert?

Eugen T. schrieb:
> Eigentlich sollte es
> nicht leuchten, wenn man misst, jedoch reagiert dann die Routine.

Wie hast Du denn den Enable-Pin des 40109 beschaltet? Vielleicht ist er 
ja disabled und der RX hängt in der Luft ...
Der Fall "A: 3,3V -> E: 5V" ist damit zwar nicht erklärbar, ist aber 
vielleicht ein Zufallsprodukt.

Gruß Dietrich

von S. Landolt (Gast)


Lesenswert?

> das display ist 5v tolerant
Folglich muss es ohne Pegelwandler funktionieren, dieser ist nur eine 
zusätzliche Fehlerquelle.

von Eugen T. (der_eugen_thorben)


Lesenswert?

enable A hängt an 3.3V. jedoch ist es so, dass wenn enable A undefiniert 
ist, es auch klappt, erst wenn dort 0v sind, klappts nicht.

von Dietrich L. (dietrichl)


Lesenswert?

Eugen T. schrieb:
> enable A hängt an 3.3V. jedoch ist es so, dass wenn enable A undefiniert
> ist, es auch klappt,

Das ist aber Zufall. CMOS-Eingänge sind sehr hochohmig. Wenn sie nicht 
beschaltet sind, entstehen dort durch kapazitive Einstreuung oder durch 
Restströme irgendwelche Spannungen. Verlassen kann man sich darauf aber 
nicht ...

Gruß Dietrich

von Eugen T. (der_eugen_thorben)


Lesenswert?

Fehler behoben, hatte nen Kurzschluss benachbarter Pins. Jedoch kriege 
ich die Spannung trotzdem nicht auf 5V mit einem Pullup. Die erhöht sich 
auf 3.6 V.

Die 3.3V werden jedoch vom Atmega erkannt.
Soll ich es mit dem Pullup machen, dass es ein 3.6 V Pegel ist, oder 
ohne?

: Bearbeitet durch User
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.