Forum: Mikrocontroller und Digitale Elektronik Inverted-TTL-serial nach nicht invertiert-TTL-serial


von Iguan (Gast)


Lesenswert?

Hallo zusammen

Ich hoffe ihr kennt euch etwas besser aus in sachen invertierte serielle 
Schnittstelle als ich.

Ich habe ein GPS Empfänger, welcher mir mit 4800 Baud mit invertiertem 
TTL signal, die seriellen Daten liefert. Meinem Mikrocontroller macht 
das aber Probleme.

Wie kann ich das Signal zu einem nicht-invertierten TTL Signal wandeln 
(Hardware-mässig)?
Mit einem Inverter hab ichs schon versucht, geht aber nicht --> da 
kommen
nur komische Zeichen. Liegt wohl am irgendwie Start bzw. am Stop-Bit..

Könnt ihr mir helfen?


mfg

Iguan

von Wolfgang (Gast)


Lesenswert?

Iguan schrieb:
> Mit einem Inverter hab ichs schon versucht, geht aber nicht

Wie willst du die Signale sonst invertieren? Außerdem sind die seriellen 
TTL-Signale gegenüber RS232 i.A. immer invertiert.

Der Fehler wird woanders liegen. Bist du dir mit den 4800Bd sicher?

von Hubsy (Gast)


Lesenswert?

Welchen GPS-Empfänger bzw. Mikrocontroller verwendest du?

von Iguan (Gast)


Lesenswert?

Mit den 4800 Baud bin ich mir sicher!
Ich arbeite mit einem Arduino Mega ADK. Wenn ich den GPS empfänger
an einen Hardware-Uart-Eingang hänge, dann bekomme ich keine gescheiten 
Daten.
Wenn ich die Arduino-Library "SoftwareSerial" verwende, kommen auch 
keine gescheiten Daten.

Erst mit der neusten Version von der Arduino-Library "SoftwareSerial" 
kann man angeben, dass das Signal invertiert ist:

    SoftwareSerial gps_serial(GPS_RX_Pin, GPS_TX_Pin, true);

Das "true" bedeutet invertiert.

Auf diese Weise bekomme ich saubere GPS-NMEA-Datensätze. Nur blöd
dass diese Library die interrupts kurzzeitig abschaltet und 
anschliessend
wieder einschaltet. Dadurch entstehen Probleme mit anderen 
Interrupt-Librarys.

Aus diesem Grund möchte ich das Signal hardwaremässig zu einem
nicht-invertierten-TTL-uart konvertieren, damit ich den GPS-Empfänger an 
eine Hardware-UART hängen kann.

Mit einem NAND-Baustein (Wo beide Eingänge zusammen gelegt sind) habe 
ich versucht das Signal zu einem nicht-invertierten TTL signal zu 
wandeln. Das hat aber nicht geklappt (Da kamen alles "0" als output"). 
Ich nehme an, dass das Start- bzw. das Stop bit nicht invertiert werden 
darf... bin mir aber nicht sicher...

Ich weiss echt nicht mehr weiter...

mfg

Iguan

von Helmut L. (helmi1)


Lesenswert?

Iguan schrieb:
> Ich weiss echt nicht mehr weiter...

Dann fang mal an jetzt zu messen anstatt wild drauf rumzuprobieren.
Oszi an die Datenleitung und dann messen wie das Signal aussieht.
Ansonsten muss ein normaler Inverter aussreichen der macht kein 
Unterschied zwischen Daten und Start u. Stopbits.
Also stimmen Baudrate,Parity und Anzahl der Stopbits?

von pöserpursche (Gast)


Lesenswert?

nimm einen 7400 wenn du es Hardwaremässig machen möchtest.

PP

von Jim M. (turboj)


Lesenswert?

Iguan schrieb:
> Mit einem NAND-Baustein (Wo beide Eingänge zusammen gelegt sind) habe
> ich versucht das Signal zu einem nicht-invertierten TTL signal zu
> wandeln. Das hat aber nicht geklappt (Da kamen alles "0" als output").

Das hast Du den Chip offensichtlich falsch angeschlossen.

> Ich nehme an, dass das Start- bzw. das Stop bit nicht invertiert werden
> darf... bin mir aber nicht sicher..

NACK. Wenn UART invertiert, dann wird alles invertiert.

Hast Du mal die Signalpegel des GPS geprüft? Inveritertes UART Signal 
deutet auf Pegelwandler wie MAX232 hin - das ist nicht mehr TTL.

von Iguan (Gast)


Lesenswert?

Danke für die schnelle Antwort

Einen Oszi habe ich leider nicht. Ich habe dennoch mal die Spannung des
Daten-Pins (tx) vom GPS gemessen. Die Anzeige schwankt von 0V bis -5V.
Das erstaunt mich, dachte es liefert TTL  (0 bis +5V). Messe ich da was 
falsches? Auf die polarität des messgerätes (Mastech MY64) habe ich 
geachtet.
Wie konnte ich dann überhautp daten auslesen?

@pöserpursche: ich habs mit einem SN74LS00N versucht (pin 1+2 zusammen 
an TX pin vom GPS-Empfänger, und pin 3 an den uC  RX-Pin)

von Iguan (Gast)


Lesenswert?

Wie kriege ich nun den offset hin, damit ich 0..+5V habe anstelle 
0..-5V??

mfg

Iguan

von 小鬼 (Gast)


Lesenswert?

Ohne jetzt unhöflich wirken zu wollen,

Hubsy schrieb:
> Welchen GPS-Empfänger ... verwendest du?

von spess53 (Gast)


Lesenswert?

Hi

>Aber auch
>unter unter PonyProg bekomme ich kein Kommunikation mit dem ATmega1284P
>zustande.

Schlieiß das Teil einfach richtig an.

MfG Spess

von inverter (Gast)


Lesenswert?

>Die Anzeige schwankt von 0V bis -5V.

GND mit Vcc vertauscht?

von Iguan (Gast)


Lesenswert?

GND und VCC sind nicht vertauscht. die LED des GPS-Empfängers leuchtet. 
Andersrum nicht.

Ich verwende den GPS-Empfänger "GPS4" von Byonics:
http://www.byonics.com/tinytrak/gps.php

Beschreibung:
This is the receiver module found inside the GPS4 (no case or DB-9 
cable), for use in high altitude balloon applications up to 84KM. It 
weighes 0.7oz, comes with a 3" interface cable and outputs both TTL and 
RS-232. Wiring is 1:black:ground, 2:red:3.3V to 5V DC power, 
3:yellow:TTL data from GPS, 4:white:RS-232 data to GPS, 5:green:RS-232 
data from GPS, 6:blue:TTL data to GPS. Size is 32mm x 32mm x 9mm, 0.7 
oz.

Wobei ich die version mit Gehäuse und DB-9 kabel habe. Die Pinbelegung 
ist somit anders (diese habe ich per Mail erfahren...siehe weiter unten)



Per Mail hiess es:

The GPS4 is basically like this:
http://www.navisys.com.tw/products/image/110103/GM-301_flyer-110105.pdf
but with a 84KM altitude limit.  You can connect the serial output to
a computer as well as a microcontroller.

und:

>>1. In the datasheet you've mailed me, its not clear which pins of the DB-9
>> plug has which function (pin assignment).

Pin 2 is RS-232 out
Pin 3 is RS-232 in (not normally used)
Pin 4 is +5V power in
Pin 5 is ground



Wie kriege ich nun den offset hin, damit ich 0..+5V habe anstelle
0..-5V??

von hp-freund (Gast)


Lesenswert?

Du hast kein TTL Signal.

Probier das:
http://forum.arduino.cc/index.php?topic=190459.0

oder einen Optokoppler.

von Stefan E. (sternst)


Lesenswert?

Iguan schrieb:
> outputs both TTL and
> RS-232

Du hast negative Spannung und invertierte Logik?
Dann hast du offensichtlich den RS-232-Output erwischt, und nicht den 
TTL.

: Bearbeitet durch User
von Iguan (Gast)


Lesenswert?

@hp-freund: Ich habe die Schaltung wie im Schema aufgebaut. Arduino 
sieht anstelle NMEA-Datensätze folgendes:
"44444444444444444444444444442496913103671808277674449515053535346535257 
4486444444444444444851494949514444447842"

@Stefan Ernst: Ist der einzige Output, der auf den DB-9 Pol geführt ist. 
Bei den anderen Pins (ausschliesslich Speisung) messe ich 0V.

von Iguan (Gast)


Lesenswert?

Die Spannung Am Arduino-RX-Pin schwankt jetzt zwischen 2.2V und 4.8V

von MWS (Gast)


Lesenswert?

Iguan schrieb:
> @Stefan Ernst: Ist der einzige Output, der auf den DB-9 Pol geführt ist.

Ein DB-9 führt normalerweise ein pegelgewandeltes Signal nach RS-232, 
das ist nicht direkt µC-geeignet, bzw. erst wieder, nachdem's durch 'nen 
zweiten Wandler zurückgewandelt wurde.

von Iguan (Gast)


Lesenswert?

Im Mail des lieferanten hiess es ausserdem:

>>1. In the datasheet you've mailed me, its not clear which pins of the DB-9
>> plug has which function (pin assignment).

Pin 2 is RS-232 out
Pin 3 is RS-232 in (not normally used)
Pin 4 is +5V power in
Pin 5 is ground

>> 2. Doesn't it get destroyed if I connect it to a computers serial port
>> (usually 12VDC)?
>>    - If no, can i simply plug it in and read the data with hyperterminal?

The RS-232 pins are fine with computer serial voltages, but pin 4
should only be 5V.  Computers do not provide 5V on pin 4, so you will
need my GUA or GPAP or GPAC adapter cable to connect the GPS4 to a
computer.

von Iguan (Gast)


Lesenswert?

Ich habs nun hingekriegt:

Mit dem nachfolgendem Schema unter verwendung einer 
Arduino-Hardware-Uart
http://forum.arduino.cc/index.php?topic=190459.0
und dem Code:

void setup()
{
    Serial.begin(9600);
    Serial3.begin(4800);
}

void loop()
{
    if (Serial3.available())
    {
       Serial.print(Serial3.read());
    }
}

kamen nur solche zeichen daher:
"44444444444444444444444444442496913103671808277674449515053535346535257
4486444444444444444851494949514444447842"





mit dem gleichen Schema, aber mit der Verwendung einer 
SoftwareSerial-Schnittstelle (Library AltSoftwareSerial) und dem code:

#include <AltSoftSerial.h>


// AltSoftSerial always uses these pins:
//
// Board          Transmit  Receive   PWM Unusable
// -----          --------  -------   ------------
// Teensy 2.0         9        10       (none)
// Teensy++ 2.0      25         4       26, 27
// Arduino Uno        9         8         10
// Arduino Mega      46        48       44, 45
// Wiring-S           5         6          4
// Sanguino          13        14         12

AltSoftSerial altSerial;

void setup() {
  Serial.begin(9600);
  altSerial.begin(4800);
}

void loop() {
  char c;


  if (altSerial.available()) {
    c = altSerial.read();
    Serial.print(c);
  }
}



...kamen richtige datensätze wie:

$GPGGA,135718.551,,,,,0,00,,,M,0.0,M,,*5E
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,135718.551,V,,,,,,,031113,,,N*44
$GPGGA,135719.551,,,,,0,00,,,M,0.0,M,,*5F
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,135719.551,V,,,,,,,031113,,,N*45
$GPGGA,135720.551,,,,,0,00,,,M,0.0,M,,*55
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,135720.551,V,,,,,,,031113,,,N*4F
$GPGGA,135721.560,,,,,0,00,,,M,0.0,M,,*56
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,135721.560,V,,,,,,,031113,,,N*4C
$GPGGA,135722.563,,,,,0,00,,,M,0.0,M,,*56
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,11,84,268,,32,64,224,,01,60,298,,19,48,167,*7F

heraus.



vielen Dank für die Hilfe!!

mfg

Iguan

von hp-freund (Gast)


Lesenswert?

Fein. Es geht doch :-)

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.