- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Probleme beim UART-Empfang über Interrupt

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.05.2006
    Beiträge
    40

    Probleme beim UART-Empfang über Interrupt

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:
    Code:
    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.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Weiß nicht recht, man sieht ja nicht, was für einen Monstercode der C da zusammenpfriemelt. Nur um es auszuschliessen: Probier' mal das Rücksetzen von RCIF erst am ENDE der Routine. Nutzt's nix, schad's nix.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.05.2006
    Beiträge
    40
    Das Rücksetzen hat nichts gebracht. Ich werde jetzt versuchen, dass ich den Timer0 und den UART auf unterschiedlich priorisierte Interrupts verteile, so dass das Lesen von RS232 nicht durch den Timer unterbrochen werden kann. Mal sehen, vielleicht funktioniert ja das...

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.05.2006
    Beiträge
    40
    So, habe jetzt die Prioritäten geändert. Scheint auf dem ersten Blick zu funktionieren. Ist wohl dann so, dass die Timer0-Routine immer den RS232-Empfang zu lange unterbrochen hatte und dadurch ein Zeichen flöten gegangen ist...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests