Hi, ich habe mir einen kleinen GPS-Empfaenger gebastelt. Komischerweise resetet sich das ding in etwa jede Sekunde und ab und zu funktioniert es per Zufall, kann mir jemand weiterhelfen? Hier der Sourcecode: $regfile = "m8def.dat" $crystal = 16000000 $baud = 4800 Config Portb = Output Config Portd = Input Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Lcd = 20 * 4 Cls Cursor Off Dim C As Byte Dim I As Byte Dim Time As String * 6 Dim Av As String * 2 Dim Lat As String * 8 Dim Ns As String * 2 Dim Lon As String * 9 Dim Ew As String * 2 Dim Spd As String * 6 Dim Crs As String * 6 Dim Leng As Byte Dim Xx As Bit Dim A As Byte Declare Sub Wait_for_string(byval S As String) Declare Function Read_string() As String Cls Wait 1 Upperline Lcd "" Lowerline Lcd "" Thirdline Lcd "" Fourthline Lcd "" Wait 3 Cls Config Serialin = Buffered , Size = 100 ' Konfig. der ser. Eingabe Enable Interrupts ' $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh Do Call Wait_for_string( "$GPRMC,") ' Warte auf $GPRMC Time = Read_string() Av = Read_string() Lat = Read_string() Leng = Len(lat) - 1 Lat = Left(lat , Leng) Ns = Read_string() Leng = Len(ns) - 1 Ns = Left(ns , Leng) Lon = Read_string() Leng = Len(lon) - 1 Lon = Left(lon , Leng) Ew = Read_string() Leng = Len(ew) - 1 Ew = Left(ew , Leng) Spd = Read_string() Leng = Len(spd) - 1 Spd = Left(spd , Leng) Crs = Read_string() Leng = Len(crs) - 1 Crs = Left(crs , Leng) If Av = "A," Then Locate 1 , 1 Lcd "LAT: " Locate 2 , 1 Lcd "LON: " Locate 3 , 1 Lcd "HDG: " Locate 4 , 1 Lcd "SPD:" Locate 1 , 6 Lcd Lat Lcd Ns Locate 2 , 6 Lcd Lon Lcd Ew Locate 3 , 6 Lcd Crs Locate 4 , 6 Lcd Spd Locate 1 , 16 Lcd " " Locate 2 , 16 Lcd " " Locate 3 , 11 Lcd " " Locate 4 , 11 Lcd " " Locate 4 , 5 Lcd " " 'Spdkm = Val(spd) 'Spdkm = Spdkm * 1852 'Lcd Spdkm 'If Av = "V," Then Av = "*" 'If Av = "A," Then Av = " " 'Locate 4 , 11 'Lcd Av End If Toggle Xx Loop End '------------------------------------------------------ Sub Wait_for_string(byval S As String) As String Local Ii As Byte Local Cc As Byte Ii = 1 M1: Cc = Waitkey() If Cc <> Mid(s , Ii , 1) Then Goto M1 Else Incr Ii If Ii > Len(s) Then Goto M2 Goto M1 End If M2: End Sub '------------------------------------------------------ Function Read_string() As String Local Cc As Byte Local Ss As String * 10 Ss = "" Do Cc = Waitkey() Ss = Ss + Chr(cc) Loop Until Cc = "," Read_string = Left(ss , 10) End Function '_____________________________________________________
Nein, der Watchdog ist aus. Der Fehler passiert auch nur, wenn das Signal des eigentlichen Empfaengers an das Rx Pin des Kontrollers verbunden ist, ansonsten funktioniert er...
Als debugmassnahme wuerd ich nun das GPS (NMEA) signal mit dem PC aufzeichnen und jede Meldung einzeln testen. Allenfalls durch den Simulator lassen.
Das NMEA Signal ist perfekt und so vorhanden, wie es sein soll. Nur spuckt der GPS-Empfaenger das signal in LVTTL Logik aus, sollte aber kein Problem sein. Selbst, wenn das Signal total im Arsch sein sollte, wieso sollte sich der controller resetten?
Kann das Display eventuell etwas verursachen? Denn vorher habe ich ein 2 16 Display benutzt und nun ein 20 4. Ich hatte dies zuerst als fehlerwuelle ausgeschlossen, da ich bereits zwei neue Displays versucht habe, jedes Mal der Gleiche Fehler...
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.