Frage zum Umwandeln von Signalen von 2,65V nach 5V

Hi Forum,

ich versuche momentan einen Arduino Uno und ein Siemens TC35 GSM-Modul via SoftwareSerial miteinander zum sprechen zu bekommen.

Die Output-Pins des Arduinos laufen ja auf TTL-Basis mit 5V.
Das TC35 läuft auch auf TTL-Basis, jedoch nur mit 2,65V.
Grundsätzlich kein Problem, hab einen Spannungsteiler dazwischen gesetzt und in der Richtung vom Arduino zum TC35 funktioniert das auch.

Ich gehe nun mal davon aus, dass der Output vom TC35 ebenfalls mit 2,65V läuft (...zumindest kenne ich kein Shield bei dem die Spannung zwischen Input- und Output-Pins unterschiedlich ist).

Wie bekomme ich denn jetzt die 2,65V vom TC35 auf die 5V vom Arduino damit auch alles über die serielle Schnittstelle sauber verarbeitet wird?
Oder kann der Arduino damit trotzdem umgehen?

Ich bekomme zwar Output, jedoch sieht der so aus als ob etwas mit der Baud-Rate nicht stimmt. Jedoch habe ich schon alle Raten durchprobiert und es ergibt sich keine Änderung.

Für andere Lösungsansätze bin ich ebenfalls dankbar!!!

Black Taurus

Bi-direktionaler Spannungswandler:
http://www.watterott.com/de/8-channel-Bi-directional-Level-Converter-TXB0108?xfed0b=12e4fc68bbf6a7cae384a5d63e06f759

Da steht zwar 3,3V <-> 5V, aber laut Datenblatt geht das IC von 1.2V-3.6V <-> 1.65V-5V:

Diese Platine ist auch als "adafruit level converter" bekannt:

Das Bild sagt auch, das der Bereich größer ist (Aufdruck auf der Platine)

Alternative:

z.B.: http://www.ebay.de/itm/TEXAS-INSTRUMENTS-SN74LVC245AN-LOGIC-BUS-TRANSCVR-OCTAL-20DIP-/350750162256?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item51aa56bd50

Bei diesem IC sind die Bits aber nicht getrennt, sondern man muss die Richtung des ganzen ICs umschalten wenn man das anders herum will. Es ist also nicht wirklich bidirektional.

Cool, danke für die schnelle Antwort!!!

Wie würde ein Arduino denn Signale interpretieren, die nicht auf einen 5V-Pegel angehoben wurden?
Also quasi mit 3.3 bzw. 2.65V ankommen???

Taurus

Siehe Datenblatt, Seite 313:

Min. Input High Voltage = 0,6 * Vcc = 3V
Max. Input Low Voltage = 0,3 * Vcc = 1,5V

Bis 1,5V wird als LOW erkannt. Und ab 3V als HIGH. 3,3V sollte also als HIGH erkannt werden, aber 2,65V sind undefiniert, bzw. unzuverlässig.

Bis 1,5V wird als LOW erkannt. Und ab 3V als HIGH. 3,3V sollte also als HIGH erkannt werden, aber 2,65V sind undefiniert, bzw. unzuverlässig.

...das passt ziemlich gut zu meinem stream auf dem Serial Monitor. Das sieht aus als kommt etwas an, ist aber völlig chaotisch.

Ich werd mich melden wenn der Level-Converter verbaut ist.

Hier ist auch noch was. Wäre wohl das billigste:

Serenifly:
.... aber 2,65V sind undefiniert, bzw. unzuverlässig.

nicht ganz. wennd die Spannung von 0V auf 2,65V geht erkennt der Arduino die 2,65V als LOW. Wenn die Spannung von 5V auf 2,65V geht dann werden die 2,65V als HIGH erkannt. Erst unter 1,5 wird die Spannung als LOW erkannt.
Im Bereich 1,5V bis 3V bleibt der vorherige Zustand unverändert und endert sich erst bei überschreiten des jeweiligen Grenzwertes.
Grüße Uwe

So... watterott war fleißig. Neben jeder Menge anderem Kram kam auch der Pegelwandler mit...
Hab den hier genommen: Level shifter - Watterott electronic

Und prompt tauchen nach den ersten erfolglosen Versuchen meine Fragen auf :frowning:
Leider klappt der Link zum Datasheet auf der Seite von watterott nicht, aber viele sind es ja nicht...

Meine Pin-Belegung:
Arduino - Pegelwandler - TC35
Rx - 1/1 - Rx
Tx - 2/2 - Tx
5V - Hv/Lv - 3.3V

Zuerst einmal... passt die Belegung?
Erfolg hatte ich damit nämlich keinen. Habe auch schon alle Varianten durchprobiert und bin bei keiner Variante zum Erfolg gekommen.
Und irgendwie fehlt mir auch rein von der Logik her noch ein Anschluß für GND... :fearful:

Wenn ich den Pegelwandler entferne und das TC35 direkt dran hänge klappt es aber, jedoch natürlich nur mit Datenmüll...

Beide Geräte müssen die gleiche Bezugsmasse haben, du brauchst also eine Verbindung vom GND des Arduinos zu deinem Modul.
RX und TX müssen sich jeweils kreuzen, das R in RX steht ja für Receiver (Empfänger), das T in TX steht für Transmitter (Sender).

Das mit Tx auf Rx war meine Anfangskonfiguration, hab aber irgendwo gelesen das es bei der Version des TC35 die ich habe 1:1 verbunden wird. Ist aber egal denn getestet hab ich es natürlich... änderte aber nix.

Hast du einen Vorschlag wo ich GND anpinne?
Es ist ein 4-Kanal-Pegelwandler... allerdings ohne irgendeinen GND-Pin...
Bislang hab ich nur 2 Kanäle belegt. Es ist auf jeder Seite noch je einmal "1" , "2" , und "Lv" bzw "Hv" über...
Macht aber für mich rein logisch keinen Sinn GND an den freien Lv/Hv zu hängen... oder?

hi,

nicht der pegelwandler, sondern der arduino und Dein modul brauchen gleiche masse.

gruß stefan

Ich kann die zip-Datei runterladen:
https://github.com/watterott/Level-Shifter/archive/master.zip

Das ist eine pdf Datei drin. Sowie das Schaltbild da ist brauchst du keine Masse, auch wenn das erst mal seltsam erscheint. Hast du die Masse des Arduinos mit der Masse des TC35 verbunden?

Hast du mal fest 5V am Eingang angelegt und mit einem Multimeter am Ausgang gemessen?

Hab GND(Arduino) und GND(TC35) verbunden.
Das TC35 wird extern über 5V gespeist.
Der Uno läuf über USB.

Über deinen Link hab ich die Shetts jetzt auch. Danke! 8)

Serenifly:
Hast du mal fest 5V am Eingang angelegt und mit einem Multimeter am Ausgang gemessen?

Kannst du mal genauer Erklären was du meinst?

Wo bekommst du die LV-Spannung genau her? Im Eingangspost schreibst du was von 2,65V. Aber bei deiner Verdrahtung erwähnst du 3.3V. Wenn der TC35 2,65V ausgibt dann sollte LV auch 2,65V haben und nicht 3,3V.

Ich meinte du legst die zwei Pegel an HV und LV an. Dann verbindest du mal einen Eingang auf der HV-Seite auch mit 5V. Und misst was an der LV-Seite anliegt. Und auch mal anders herum probieren, d.h. 2,65V an die LV-Seite eines der Transistoren und dann auf der HV-Seite messen.

Also ich steh völlig auf dem Schlauch :relaxed: :relaxed: :relaxed:
Auf der Suche nach meinen "2.65V" die ich nur aus dem Datenblatt des TC35 habe, hab ich mal die verwendeten Pins durchgemessen.

Betrieben wird das Modul mit einem Netzteil mit 5V.
Daraus werden dann onboard 3.3V am Vcc gemacht.
Der Tx-Pin (welcher gemäß Datenblatt 2.65V ausspucken sollte) gibt aber 5V aus.
...jetzt könnte man ja sagen "Du Trottel! Schließ es direkt an den Arduino!" :smiley:
Hab ich natürlich schon zu Anfang gemacht... und hier ein Auszug aus dem (sinnlosen) Output.

0,255,0,0,255,0,255,0,0,0,255,0,255,0,255,0,255,0,255,0,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,0,0,0,255

Hab natürlich auch schon alle verschiedenen Baud-Raten durchprobiert...

Noch einer hilfreiche Vorschläge? Oder kann ich den Hammer holen? ]:slight_smile: ]:slight_smile: ]:slight_smile:

255 ist vermutlich eigentlich -1:

if ( Serial.read() == -1 ) 
{ 
   // es war gar kein Zeichen empfangen worden 
}

Eine 0 kriegst du nur , wenn zwischen einem permanenten Stop-Zustand ( HIGH ) das Signal auch mal auf LOW gegangen ist.
Die Baudraten sollten einigermassen zusammenpassen, wenn der Empfänger viel zu schnell ist, kann er nur 0 oder nichts empfangen :wink: