Forum: Mikrocontroller und Digitale Elektronik GPS Module an AVR


von Ingo K. (moongps)


Lesenswert?

Hallo,

ich versuche schon seit Tagen ein LEA-4H GPS Modul an einen AVR
anzuschliessen. Habe es jetzt schon mit einem mega8 und einem tiny2313
versucht, leider erfolglos. Ich verbinde den RX/TX Ausgang direkt mit
den entsprechenden Eingängen des AVRs ohne jegliche
Widerstände/Kondensatoren aber leider bleibt der AVR beim Lesen in der
Schleife loop_until_bit_is_set(UCSRA, RXC) hängen.
Mit einem Terminal-Programm via MAX232 kann ich ohne Probleme direkt
vom GPS lesen. Auch die Simulation Terminal-Programm <-> AVR
funktioniert, also C-Code scheint auch ok.
Der AVR hängt an 5V/GND des GPSs. Die 5V kommen von der USB
Schnittstelle des GPS Moduls. Die RX/TX Ausgänge des GPS Receivers
sollen laut Datenblatt CMOS Ausgänge sein.
Hat jemand eine Idee? Welche typischen Anfängerfehler könnte ich
gemacht haben? Was könnte ich probieren eine MAX232 dazwischen hängen?
Habe leider keinen Oszi....
Wäre über jeden Hinweis dankbar!

Grüße
Ingo

von Bjoern M. (salival)


Lesenswert?

>Welche typischen Anfängerfehler könnte ich gemacht haben?
Woran genau hast du RX und TX angeschlossen? Die muessen ueber kreuz.
Also RX an TX und TX an RX.

>Was könnte ich probieren eine MAX232 dazwischen hängen?
Mess mal die Spannung an RX/TX vom GPS. Wenn es +12V oder -12V sind,
muss ein MAX dazwischen.

>Habe leider keinen Oszi....
Haeng mal LEDs an die Leitungen. Wenn sich was tut, muessten die
flackern oder die Helligkeit veraendern. Welche Baudrate hat das GPS?

gruss, bjoern.

von Bjoern M. (salival)


Lesenswert?

>Welche Baudrate hat das GPS?
Oder besser gefragt: Welche Baudrate hast du an den Controllern
eingestellt? Woher kommt der Takt? Intern oder Quarz?

Denn das GPS wird wohl bei 4800 8N1 laufen...

gruss, bjoern.

von Ingo K. (moongps)


Lesenswert?

1) RX an TX und TX an RX habe ich gemacht
2) Spannung habe ich noch nicht gemessen aber laut Spezifikation
arbeiten die auf 3V CMOS Level und benötigen für RS232 einen Max3232.

Kann es vielleicht sein das ich den AVR auch mit 3,3 Volt betreiben
muss? Ich betreibe ihn ja zur Zeit an 5V, hmmm....

Funktionieren tut es ja wenn ich das GPS via MAX232 an den PC
anschliesse oder wenn ich den AVR an Batterie betreibe und diesen dann
an den PC via MAX232 anschliesse und dort das GPS simuliere.

Nur AVR direkt an GPS mit Supply von GPS funktioniert die Uart
Kommunikation nicht.

von Dennis Kleine-Beck (Gast)


Lesenswert?

Hallo Ingo,

es steht alles hier:
http://www.mikrocontroller.net/forum/read-4-354990.html#new

Besonders ein Blick in den Schaltplan sollte helfen. Das
GPS-RS232-Signal muss invertiert werden. Minimale Schutzbeschaltung
(Transitor mit Diode) sollte auch sein.

4800 8N1 sind die üblichen Settings (zumal es im Terminalprogramm damit
ja zu klappen scheint).

Gruß,
Dennis

von Ingo K. (moongps)


Lesenswert?

@Dennis

Ok das mit der Invertierung des Signal wäre ein guter Hinweis.
Wie bist du darauf gekommen, würde es gerne verstehen :-).
Vermutlich gemessen oder?

Welchen Transistor verwendest du dafür?
Ist die Schaltung auch auf 3V CMOS Level konzipiert, mein GPS liefert
auf jeden Fall CMOS Level.

von Dennis Kleine-Beck (Gast)


Lesenswert?

Hallo Ingo,

hast Du die Beschreibung von Bernhard (ZIP-Datei) gelesen? Daraus ist
zu erkennen, dass das Tx (aus GPS-Sicht) invertiert ist. Als meine
GPS-Daten auf nem LCD "komisch" aussahen, im Terminalprogram jedoch
korrekt, habe ich die Invertierung ebenfalls vorgenommen und alles war
gut!

Ich verwende einen billigen BC 847B (NPN) mit 10k Ohm
Basisvorwiderstand und 4k7 von Collector an 3,3V. Mein System läuft
auch mit 3,3V, die GPS Maus mit 5 Volt.

Gruß,
Dennis

von Ingo K. (moongps)


Lesenswert?

Hallo Dennis,

vielen Dank für die Infos. Werde heute Abend mal den Transi einbauen
und dann Feedback geben. Für mich blieb nach langem rumprobieren
eigentlich nur noch ein Problem bei den Signalverläufen übrig, da ich
mich leider noch darum drücke ein oszi zu kaufen.....:-(.

Grüße
Ingo

von Ingo K. (moongps)


Angehängte Dateien:

Lesenswert?

Hallo,

bin schon ein wenig weiter habe jetzt einen BC546B mit 10k an der Basis
und 3,3k am Kollektor eingebaut.
Er kommt jetzt aus der loop loop_until_bit_is_set(UCSRA, RXC) raus.
Jedoch wird jetzt manchmal das FE Flag gesetzt. UCSRA & _BV(FE) liefert
1. Also da stimmt noch was mit dem Signal nicht.

Habe das jetzt mit dem tiny2313 aufgebaut. lfuse habe ich dafür auf
0xE4 gesetzt damit ich mit 8Mhz takte und nur 0.2% Fehler bekomme.

Ausserdem habe ich mit der Kalibrierung getestet, die bringt das beste
Ergebnis mit OSCCAL = 0x10;
Ich habe mal das kleine Testprg drangehängt. Vielleicht sieht ja jemand
etwas falsches.

Grüne LED leucht immer. Rote flackert. Es wird kein Reset durch den
Watchdog erzeugt also er bekommt jede sekunde mal ein '$'.

Grüße
Ingo

von Stefan (Gast)


Lesenswert?

Benutzt du einen externen 8 MHz Quarz oder benutzt du den internen
Ozillator? Ein Quarz wäre angebrachter.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Hardware

Klappt die serielle Kommunikation mit deinem AVR, wenn du den AVR über
den Schnittstellen-IC an den PC hängst?

von Ingo K. (moongps)


Lesenswert?

Hallo Stefan,

ich benutze den internen Quarz (8Mhz). Ja die serielle Kommunikation
funktioniert.

von Ingo K. (moongps)


Lesenswert?

Hallo,

Problem gelöst, nachdem ich die Versorgungsspannung der AVRs auf 3.3V
"umgestellt" habe.
Verbindung ist jetzt direkt TX(GPS) <-> RX(AVR), GND <-> GND ohne
Pullups oder invertieren Transistoren.
mega8 mit 16Mhz externem Qszillator, tiny2313 mit 3,6864MHz Quarz, und
2*22pF.

Die Frage bleibt offen wie man das denn richtig macht ohne die
Versorgungsspannung auf 3.3Volt zu senken. Welche Konvertierer nutzt
ihr denn in solchen Situationen?

Ingo

von Stefan (Gast)


Lesenswert?

Ich schätze, das geht dann in die Richtung Pegelwandler unidirektional
5V => 3.3V und unidirektional 5V <= 3.3V für die RX und TX Leitung.

[schamlosewerbung on]
Im Wiki wurde ein Artikel darüber gestartet.
[schamlosewerbung off]

von Stefan (Gast)


Lesenswert?

Ähm, bei deinem Aufbau wäre das ein Pegelwandler unidirektional step-up
3.3V => 5V für TX (3.3V GPS) auf RX (5V AVR).

http://www.mikrocontroller.net/articles/Pegelwandler#UNIDIREKTIONAL.2C_STEP-UP:_3.3V_-.3E_5V

von Ingo K. (moongps)


Lesenswert?

Hallo Stefan,

super! Vielen Dank für den Hinweis!
Genau ich brauche den unidirektionalen Weg 3V CMOS auf AVR 5V.

Ingo

von AxelR. (Gast)


Lesenswert?

<<Beschreibung von Bernhard (ZIP-Datei) gelesen? Daraus ist
zu erkennen, dass das Tx (aus GPS-Sicht) invertiert ist.>>

Diese Invertierung findet aber nur dann statt, wenn die "GPS-Kiste"
zum direkten Anschluss an den PC vorgesehen ist, oder?

Bei den Modulen, die ich bisher verwendet habe, war sowas nicht
vorgesehen. Daher hatte mich das ein wenig verwundert.

Ich verwende zum Pegelwandeln meist zwei Transistoren - etweder BCR148
oder von Phillips die PUMH11. Beide als Invertiere hintereinander
geschaltet - der eine Kollektor über 3.3K an VCC_LOW und der andere
Kollektor über 3.3K an VCC_HIGH. oder eben umgedreht, je nach RIchtung.
Hier gab es nie Probleme. Da in einigen Anwendungen der relativ hohe
Ruhestrom stört und man die Transistoren nicht "disablen" kann,
verwende ich gern den MAX3375EEKA. Der lässt sich bei nichtgebrauch
über PIN6 hochohmig schalten. Man kann somit auch mit zwei dieser
Pegelwandler die GPS-Daten etweder zum AVR oder zur seriellen
Schnittstelle "umleiten".

Bei 4K8 oder 9K6 sollte aber keine Beeinträchtigung der seriellen
Datenübertragung zum AVR zu verzeichnen sein. Auch bei 8Mhz intern
nicht. Selbst bei einer Software-UART gibt es da keine Sorgen.

Apropo SW-UART: möchte ich euch einen kleinen Tip nicht vorenthalten
Im Timerinterrupt, der die empfangenen Daten "sampelt", habe ich ein
Bit am freien Port toggeln lassen (zB. portb^=4).
Ein kleiner 10pF Kondensator geht von diesem Portpin zum Oszilloloskop.
Gleichzeitig über 47K die ankommenden Daten.
Jetzt überlagern sich die beiden Signale am Oszi und an kann sehr gut
erkennen, ob der Timerint. in Bitmitte kommt oder am Rand rechts oder
links. Sehr gut zu erkennen ist nun auch die Temparaturabhängigkeit des
internen Oszillators.
Probiert das mal aus.
Ich habe das beim Tiny12 mal probiert(probieren müssen, weil nicht
hingehauen hatte) und konnte dann zwischen 5V und 3V gut mit 4K8
arbeiten.

Viele Grüße
AxelR.

von Stefan (Gast)


Lesenswert?

@ AxelR

Interessanter Beitrag. Hast du Erfahrungen bis zu welchen Frequenzen
(Bitraten) die BCR148 bzw. PUMH11 Kombination mitkommt?

Stefan

von AxelR. (Gast)


Lesenswert?

<<bis zu welchen Frequenzen
(Bitraten) die BCR148 bzw. PUMH11 Kombination mitkommt?>>

Müsste man tatsächlich mal testen - 9K6 am GPS ging jedenfalls bisher
ohne Probleme.

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.