PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Controller stürzt ab, sobald GPS-Modul an RXD angeschlossen



da_miez3
25.05.2012, 00:12
Hallo,

hoffe mir kann jemand helfen :) .

Baue mir gerade ein GPS Gerät für z.B. Geocaching mit Touchscreen. Mit einer festen Koordinate funktioniert bereits alles, Entfernung, Winkel etc.

Das Modul funktioniert einwandfrei am PC und ist das NAVILOCK NL-650ERS mit Ublox6 chip. Ohne das Modul läuft auch mein Menü, Touchauswahl alles top. Sobald ich aber den TXD vom GPS-Modul mit RXD am Atmega32 verbinde. Zeigt das Display abwechselnd Streifen, ist mal ganz schwarz, zeigt gar nichts und so weiter.. Hab den Code mal aufs geringste reduziert. Finde keinen Fehler.

Das GPS ist ein RS232 Modul . Habe das Buch von Stefan Hoffman, da wird ein ähnliches auch direkt am Controller angeschlossen. Gibt es irgendwelche Fusebits die man einstellen muss. Oder muss man Pin14 und 15 (auch PD0 und PD1) erst als TXD RXD Softwareseitig definieren? Doch eigentlich nicht, oder? An was kanns liegen?

Hier ist der Code:



$regfile = "M32def.dat"
$crystal = 16000000
$baud = 38400
$hwstack = 70
$swstack = 65
$framesize = 40
$lib "glcdLC7981.lib"
Config Serialin = Buffered , Size = 100 ' Konfig. der ser. Eingabe
Enable Interrupts
Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portc , Ce = 5 , Cd = 2 , Rd = 3 , Enable = 4 , Reset = 6 , Mode = 8


Cls

Setfont Font8x8

Dim Gelesen As Byte 'eingelesenes Zeichen
Dim Teilstring(14) As String * 12
Dim Anzahl As Byte
Dim Gpsdaten As String * 98
Dim Header As String * 6
Dim Stunde As Byte
Dim Tempstring As String * 2

Const Sommerzeit = 0


Lcdat 73 , 1 , "GPS - TEST - Navilock"


Do

Gelesen = Inkey()
If Gelesen = 36 Then Input Gpsdaten Noecho '36 = $
Header = Mid(gpsdaten , 1 , 5)

If Header = "GPRMC" Then
Cls
Anzahl = Split(gpsdaten , Teilstring(1) , ",")
Gpsdaten = ""

Lcdat 40 , 1 , "TEST:" ; Teilstring(5) 'sollte ein N zeigen
End If
Loop


End



$include "font8x8.font"

Danke schonmal für die Unterstützung :)

2242622427

021aet04
25.05.2012, 09:52
Beim Programm kann ich dir leider nicht helfen, aber vielleicht zieht das Modul kurzzeitig zuviel Strom das die Spannung einbricht und der µC resettet. Oder ist es wirklich nur wenn du die Datenleitung anschließt? Fusebits gibt es eigentlich nicht.

Sieht gut aus dein Projekt.

PS: Wenn du den Titel ändern willst musst du im ersten Post (wenn schon mehrere Posts vorhanden sind) den Titel ändern.

MfG Hannes

oberallgeier
25.05.2012, 10:27
... Grund: möchte eigentlich das sobalt in sobald im titel ändern..geht das, den titel zu ändern? ...
Soweit ich weiß, kann man den Titel nur in den ersten Minuten nach dem Erstellen ändern. Ist eigentlich schade . . . In dringenden Fällen reparierts aber ein Moderator - in diesem Fall z.B. BASTIUniversal.



... Sobald ich aber den TXD vom GPS-Modul mit RXD am Atmega32 verbinde ...Der mega32 hat KEIN RXD - ist Dir das klar? Seine serielle Schnittstelle heißt ja USART (sorry, wenn Dir das alles bekannt ist). Der controller gibt an den Pinnen (nur) Pegel zwischen 0V (GND) oder Vcc aus. Und will etwa diesen Pegel auch haben - mit nem pegelkorrekten RXD, etwa +/- 9V .. 12V - kann man nen Controller natürlich ziemilch erschrecken. Abhilfe: nach/vor dem mega32-RX/TX einen max232 einbauen mit und ein paar Elkos (als Ladungspumpe).

Zum Thema unerwarteter Reset: die entsprechenden Fehlfunktionen hatten mich häufig gestört. Mittlerweile ist in meiner main-Routine STETS gleich am Anfang die Portdefinition und unmittelbar danach, vor allen anderen Aktionen, insbesondere vorm Interrupt erlauben, ein kurzes LED-Blinken mit >>waitms<<. Das hatte sich schon oft bezahlt gemacht. Beispiel:


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
for(i=0; i<10; i++) // LED i-fach blinken lassen bev Interrupts erlaubt sind,
// um ungewollte Resets u.ä. besser erkennen zu können
{
SetBit(PORTC, 5); // LED auf PC5 schalten EIN, HELL
waitms(3); // ... damit man kurze resets besser erkennt
ClrBit(PORTC, 5); // LED auf PC5 schalten AUS, Dunkel
waitms(97); //
} // Ende von for(i=0; i<10; i++)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

021aet04
25.05.2012, 10:40
Den Threadnamen kann man nachträglich ändern indem man auf "Bearbeiten" geht und dann auf "Erweitert". Dann sieht man auch den Threadnamen den man dort ändern kann.
Es muss aber der erste Post sein.

MfG Hannes

oberallgeier
25.05.2012, 10:47
... Threadnamen kann man nachträglich ändern ... muss aber der erste Post sein ..Das geht bei Dir? Bei mir gehts nicht seit der neuen Forumssoftware - und bei einigen anderen Kollegen auch nicht. Dazu gabs mal ne Diskussion. Dein Vorschlag schreibt nur nen neuen Titel ins (aktuell angewählte) Posting - nicht oben auf den Thread . . . zumindest bei mir (WinXPpro, MSIEx 8.0.6001.18702/©2009 ...).

Bumbum
25.05.2012, 10:53
Hallo,

passt zwar nicht zum Thema, aber weil ich es gerade lese:


Mittlerweile ist in meiner main-Routine STETS gleich am Anfang ...... ein kurzes LED-Blinken mit >>waitms<<. Das hatte sich schon oft bezahlt gemacht.

Genau sowas habe ich zufällig vorgestern auch bei mir in einer Schaltung programmiert und dabei gleich einen haufen Fehler gefunden, die durch WD-Resets ausgelöst wurden. Da habe ich an manchen Stellen geschlampert und die WDR falsch gesetzt. Ich glaube das wird ab jetzt bei mir auch zum Standard.

Viele Grüße
Andreas

021aet04
25.05.2012, 11:07
@oberallgeier
Habe es gerade getestet. Jetzt funktioniert es bei mir auch nicht. Ich habe es aber schon einmal geändert. Das wäre etwas für Frank zu ändern.
Hat jemand Frank schon geschrieben wegen diesem "Problem"?

MfG Hannes

oberallgeier
25.05.2012, 11:18
... Jetzt funktioniert es bei mir auch nicht. Ich habe es aber schon einmal geändert ...PuhhhhStirnwischabvomSchweiß - ich will ja nicht (immer) Recht haben, will nur nix Falsches verbreiten. Mit der früheren Forumssoftware ging das schon - beim eigenen Thread. Da hatte ich das auch gemacht. Soweit ich weiß, wurde das schon mit Frank diskutiert, aber ich hab diese Diskussion nicht griffbereit. Ich kann damit (bzw. ohne *ggg*) leben, zumal es von manchen, sehr wenigen, Usern ziemlich exzessiv und teilweise verwirrend benutzt wurde.

Sorry da_miez3 wegen des ausgiebigen OTs.

Crazy Harry
25.05.2012, 12:40
Der mega32 hat KEIN RXD - ist Dir das klar?
Dem stimme ich nicht zu - da ja sogar Atmel die Pins so bezeichnet (siehe Bild). Mag sein, daß das nur bei einer echten RS232 so genannt werden darf, aber selbst wenn Atmel die Pins "Voll" und "Depp" nennen würde, wäre das dann eben so :D.

Aber egal: ich behaupte mal, daß dein GPS-Empfänger einen integrierten RS232-Pegelwandler hat und somit +/- 9...12V liefert. Da ich schon öfter mit GPS-Empfängern gearbeitet habe (Module) kann ich dir sagen, daß es Module mit und ohne Pegelwandler gibt und daß allein das anschliessen nicht für ein aufhängen/Reset sorgen kann/darf.

@da_miez3: wie berechnest du den Abstand und Winkel zum Ziel ? Und das mit der Genauigkeit .....

oberallgeier
25.05.2012, 14:11
Dem stimme ich nicht zu - da ja sogar Atmel die Pins so bezeichnet ...Da hast Du natürlich völlig Recht, ohne Einschränkung Harry, danke für die Richtigstellung. Ich habe leider beim Schreiben nur an die RS232/EIA-232 gedacht - die ja sowohl Pegel als auch Protokoll, also noch Timing und sogar den Stecker definiert. Sorry, dass meine Antwort so diffus und eben falsch war.


... wie berechnest du den Abstand und Winkel zum Ziel ? Und das mit der Genauigkeit .....Für nen frühen Segeltörn/Törnbericht hatte ich das mal spasseshalber in Excel gemacht. Wenn die Großkreisrechnung mal steht - gehts recht einfach.

......22429

Crazy Harry
27.05.2012, 17:43
@oberallgeier: Ich seh das jetzt nicht so eng :)

Mit Excel hab ich das auch schon gemacht, aber Excel ist was anderes als ein µC. Bei normalen Float-Variablen ist das viel zu ungenau. Es gibt zwar inzwischen für meinen Compiler 64-Bit Fix (wie das genannt wurde; d.h. 32bit Zahl + 32bit Exponent) aber ich hab das noch nicht gestestet ob das ausreicht.

da_miez3
30.05.2012, 17:56
Juhuuu, es geht :) !

Oberallgeier hatte recht mit dem max232 . DANKE :)

Habs aufs Einfachste zusammengeschaltet um möglichst viele Fehlerquellen auszuschließen. Also 4x20 Display an die RN-Control, GPS am max232 angeschlossen und Saft drauf.

Bin trotzdem etwas verwundert. Dieses Modul gibt es als USB Version, RS232 und TTL . Da les ich mich wohl nächste Woche mal genauer ein, bisher dachte ich eigentlich, dass ich den max232 nur bei Verbindung von PC zu Mikrocontroller brauche und TTL irgendwo im Bereich 3,3 Volt liegt. Am Modul TXD liegen max. 6,3 V (Peak) an und da die Pins auch mit RXD/TXD beschriftet sind dachte ich mir diese Variante zu bestellen. Geh ich richtig in der Annahme, dass TTL die bessere Wahl gewesen wäre?

Naja, jedenfalls baue ich jetzt den Pegelwandler ins eigentliche Gehäuse mit ein. Mal sehn wie weit ich heute komme, die manuelle Eingabe für die Koordinaten will ja auch noch programmiert werden :) .

@ CrazyHarry

Für die Berechnungen habe ich die Formel von http://kompf.de/gps/distcalc.html genommen und in Bascom implementiert.
Dass die Entfernung in Wahrheit natürlich nicht zentimetergenau ist, ist ja klar, hatte es in der Version halt noch auf drei Nachkommastellen anzeigen lassen ;) .

Die Quelle für den Code mit dem Kreis und dem Zeiger der sich nach dem Winkel ausrichtet muss ich nochmal suchen. Hab zwar einiges dran verändert, aber im großen und ganzen wars der Ausgangscode.

So, dann mach ich mich mal an die Arbeit ;)


2246022461

Crazy Harry
30.05.2012, 20:54
Mit normalen Float-Variablen sind die paar cm Ungenauigkeit im schlimmsten Fall 1.4km. Es ist ja nicht nur die Berechnung selber, sondern auch daß erforderliche trigonometrische Funktionen zu ungenau sind. Ich brauche keine cm-Genauigkeit, aber 10m erwarte ich dann schon.

da_miez3
30.05.2012, 22:39
Hmm, habe bisher um die 5-8m Genauigkeit. Das reicht mir bei weitem...

da_miez3
01.06.2012, 02:25
So, es geht voran.

Die Genauigkeit ist erschreckend gut :) ... !
(Auch noch in Gebäuden/Räumen mit Fenster)

22473