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
>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.
>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.
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.
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
@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.
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
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
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
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?
Hallo Stefan, ich benutze den internen Quarz (8Mhz). Ja die serielle Kommunikation funktioniert.
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
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]
Ä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
Hallo Stefan, super! Vielen Dank für den Hinweis! Genau ich brauche den unidirektionalen Weg 3V CMOS auf AVR 5V. Ingo
<<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.
@ AxelR Interessanter Beitrag. Hast du Erfahrungen bis zu welchen Frequenzen (Bitraten) die BCR148 bzw. PUMH11 Kombination mitkommt? Stefan
<<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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.