Hab mal den Prozess der die serielle ausliest angehalten und erwartet, daß die Schaltung resettet, da der Puffer nach garantiert 4 sek überläuft - nix wars. Also hat das nichts mit einem Pufferüberlauf zu tun.
Dann hab ich beim gDispRefresh ebenfalls den Prozess, der die serielle liest angehalten und danach wieder gestartet: trotzdem Reset der Schaltung.
Ich halte jetzt mal alle Prozesse an während einem gDispRefresh ........ auch Reset.
Hab inzwischen übrigens den Rx über 78VLC08 angeschlossen und den GPS-Empfänger über eine kleine Induktivität mit Spannung versorgt. Der GPS-Empfänger ist jetzt auch gute 30cm vom Display und µC weg.
wenn ich während das Prog läuft die serielle Verbindung kappe (also keine Daten mehr zum µC kommen), gibt's
Reset. Da ein Pufferüberlauf ausscheidet (vorher ja schon mal den Prozess angehalten und somit den Puffer garantiert zum überlaufen gebracht) ..... wie können serielle Daten einen Reset verursachen ??????
Der Empfänger ist weiterhin angeschlossen und die Displayhelligkeit ist auf maximal - also schliesse ich die Spannungversorgung (die ich ja auch schon mit dem oszi angeschaut hab) aus.
Code
Process ReadGPS($80,$80:iData);
Begin
WaitPipe(RXBufferE0); // Warte auf Daten im Puffer
Read(SerInpE0, Temp); // Puffer lesen
If Temp='$' // Wenn Puffer='$' (Datensatzanfang)
then
Read(SerInpE0, Temp6);
If Temp6 = 'GPGGA,'
then
Read(SerInpE0, NMEA.UTCTime, ','); // GSP Time in UTC hhmmss.sss
Read(SerInpE0, NMEA.GPSLat, ','); // ddmm.mmmm
Read(SerInpE0, NMEA.GPSLatInd, ','); // N=north or S=south
Read(SerInpE0, NMEA.GPSLon, ','); // dddmm.mmmm
Read(SerInpE0, NMEA.GPSLonInd, ','); // E=east or W=west
Read(SerInpE0, NMEA.GGAQual, ','); // 0=Invalid, 1=Valid SPS, 2=Valid DGPS, 3=Valid PPS
Read(SerInpE0, NMEA.GGASat, ','); // Number of sat in view and used in solution
Read(SerInpE0, NMEA.GGADilu, ','); // dilution error
Read(SerInpE0, NMEA.GGAHeight, ','); // height over see
Read(SerInpE0, NMEA.GGAHeightU, ',');// height unit
Read(SerInpE0, NMEA.GGAHeightD, ','); // height differential
Read(SerInpE0, NMEA.GGAHeightDU, ',');// height differential unit
Read(SerInpE0, NMEA.GGADGPST, ',');
Read(SerInpE0, NMEA.GGADGPSID, '*');
ReadLn(SerInpE0, NMEA.GGAChecksum);
NewGGA:=true;
NewLife:=true;
EndIf;
If Temp6 = 'GPGSA,'
then
Read(SerInpE0, NMEA2.GSAAM, ',');
Read(SerInpE0, NMEA2.GSANavMode, ',');
Read(SerInpE0, NMEA2.GSASV1, ',');
Read(SerInpE0, NMEA2.GSASV2, ',');
Read(SerInpE0, NMEA2.GSASV3, ',');
Read(SerInpE0, NMEA2.GSASV4, ',');
Read(SerInpE0, NMEA2.GSASV5, ',');
Read(SerInpE0, NMEA2.GSASV6, ',');
Read(SerInpE0, NMEA2.GSASV7, ',');
Read(SerInpE0, NMEA2.GSASV8, ',');
Read(SerInpE0, NMEA2.GSASV9, ',');
Read(SerInpE0, NMEA2.GSASV10, ',');
Read(SerInpE0, NMEA2.GSASV11, ',');
Read(SerInpE0, NMEA2.GSASV12, ',');
Read(SerInpE0, NMEA2.GSAPDOP, ',');
Read(SerInpE0, NMEA2.GSAHDOP, ',');
Read(SerInpE0, NMEA2.GSAVDOP, '*');
Read(SerInpE0, NMEA2.GSAChecksum);
NewGSA:=true;
EndIf;
If Temp6 = 'GPRMC,'
then
Read(SerInpE0, NMEA.UTCTime, ','); // GPS Time in UTC
Read(SerInpE0, NMEA.RMCStatus, ','); // A=data valid or V=data not valid
Read(SerInpE0, NMEA.GPSLat, ','); // ddmm.mmmm
Read(SerInpE0, NMEA.GPSLatInd, ','); // N=north or S=south
Read(SerInpE0, NMEA.GPSLon, ','); // dddmm.mmmm
Read(SerInpE0, NMEA.GPSLonInd, ','); // E=east or W=west
Read(SerInpE0, NMEA.RMCSpeed, ','); // variable speed in knots
Read(SerInpE0, NMEA.RMCAngle, ','); // variable lenght in degrees
Read(SerInpE0, NMEA.RMCDate, ','); // GPS Date ddmmyy
Read(SerInpE0, NMEA.RMCMagn, ','); // Magnetic declinason
Read(SerInpE0, NMEA.RMCMagnV, ',');
Read(SerInpE0, NMEA.RMCMode, '*');
ReadLn(SerInpE0, NMEA.RMCCheckSum);
NewRMC:=true;
EndIf;
STrack:=StrToInt(NMEA.GGASAT); // Number of sat in view and used in solution
Temp2:=Copy(NMEA.UTCTime,5,2); // Uhrzeit alle 60s
If Temp2='00'
then
NewTime:=true;
EndIf;
EndIf;
End ReadGPS;