SteffenJ
13.09.2006, 09:11
Hallo zusammen,
ich versuche mit einem PIC18F452 einen GPS-String von 75 Zeichen Länge von der GPS-Maus zum PIC zu übertragen. Zu Beginn hatte ich diese Abfrage zyklisch, also über Polling gemacht. Da lief es prima.
Jetzt habe ich den Empfang der GPS-Daten in einer Interrupt-Routine programmiert:
if (PIR1bits.RCIF)
{
PIR1bits.RCIF=0;
if (RCREG=='$')
{
stringzeiger=0;
fertig=0;
}
if (fertig==0)
{
chs[stringzeiger]=RCREG;
stringzeiger++;
if (stringzeiger==74)
{
stringzeiger=0;
fertig=1;
}
}
}
Hier "verschluckt" der PIC immer das 43. Zeichen. Jetzt die Frage: Kann es sein, dass der mit 4Mhz getaktete PIC (also mit Vorteiler dann 1Mhz) zu langsam für die 9600Baud des zu empfangenden Signals ist? Oder habe ich einen grundlegenden Denkfehler in meiner Empfangsroutine?
Viele Grüße
Steffen
ps: Nebenher wird nur noch in einer Interrupt-Routine der Timer als Uhr benutzt.
ich versuche mit einem PIC18F452 einen GPS-String von 75 Zeichen Länge von der GPS-Maus zum PIC zu übertragen. Zu Beginn hatte ich diese Abfrage zyklisch, also über Polling gemacht. Da lief es prima.
Jetzt habe ich den Empfang der GPS-Daten in einer Interrupt-Routine programmiert:
if (PIR1bits.RCIF)
{
PIR1bits.RCIF=0;
if (RCREG=='$')
{
stringzeiger=0;
fertig=0;
}
if (fertig==0)
{
chs[stringzeiger]=RCREG;
stringzeiger++;
if (stringzeiger==74)
{
stringzeiger=0;
fertig=1;
}
}
}
Hier "verschluckt" der PIC immer das 43. Zeichen. Jetzt die Frage: Kann es sein, dass der mit 4Mhz getaktete PIC (also mit Vorteiler dann 1Mhz) zu langsam für die 9600Baud des zu empfangenden Signals ist? Oder habe ich einen grundlegenden Denkfehler in meiner Empfangsroutine?
Viele Grüße
Steffen
ps: Nebenher wird nur noch in einer Interrupt-Routine der Timer als Uhr benutzt.