-
        

Ergebnis 1 bis 6 von 6

Thema: PIC16F876 USART spinnt

  1. #1
    celcouser
    Gast

    PIC16F876 USART spinnt

    Anzeige

    Hallo zusammen,
    Ich habe ein Problem mit der USART des PIC16F876.
    Habe die USART als serielles Interface initialisiert, mit 9600 baud,8 bit Daten, kein Schnickschnack. Nun frage ich im Hauptprogramm ständig das Interrupt-Flag RCIF ab. (kein Interrupt auf diesem Flag zugelassen).
    sobald das Flag gesetzt ist wird in eine Routine verzweigt, die das RCREG ausliest. Die Experten unter Euch wissen, daß das RCREG ein FIFO mit 2 Ebenen ist. Jetzt kommt das Problem: wenn ich das Auslesen des RCREG nach der Abfrage des RCIF zeitlich später mache, also dazwischen noch etwas Code steht, dann enthält das RCREG nicht mehr das Zeichen, welches das RCIF gesetzt hat, sondern das nächste oder sogar übernächste empfangene Zeichen.
    Was soll das?

    Natürlich fällt der Fehler nur auf, wenn man die serielle Schnittstelle des PIC mit vorgefertigten Strings "beschießt". Einzelne Zeichen oder festgehaltenen Tasten beim Sende-PC werden tadellos verarbeitet, dazu ist der Bursche zu schnell und das FIFO des RCREG wird nicht genutzt.

    Kann mir da jemand helfen?
    Auf der µChip-Seite ist natürlich nichts zu finden...

    Vielen Dank im Voraus

    Dirk

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Obwohl meine Kristallkugel gerade zur Reperatur ist würde ich mal sagen es dauert ganz einfach zu lange, bis das Flag abgefragt wird und der Puffer läuft über. Prüfen kannst Du das mit dem Bit OERR.
    BlackBox

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Hi, ich meine, du hast die richtige diagnose selbst gestellt. Wenn du zu lange rumwurstelst, haste was versäumt.
    @Blackbox: lass die Kugel beim Service, bis wir sie mal wirklich brauchen.
    mfg robert

  4. #4
    Gast
    Vielen Dank für diese Anregungen, natürlich habe ich im Programm dafür gesorgt, daß das RCREG nicht überlaufen kann, sondern vorher geleert wird.
    In der vergangenen Nacht habe ich den Fehler entdeckt, die Ursache ist die an die Schaltung angeschlossenen ICD2.
    Sobald der Controller an einem Breakpoint hält oder einen Einzelschritt im Debug-Modus ausführen soll werden alle Register des Controllers auf dem Bildschirm upgedatet. dabei wird anscheinened auch des RCREG abgefragt um den Inhalt an den PC zu versenden. In diesem Fall wird aber eine Ebene des RCREG geleert. bei der folgenden regulären Abfrage durch das Programm wird daher ein falsches Zeichen ausgegeben.
    So gut die ICD auch ist, so tückisch kann sie auch sein.
    lasse ich das Programm stur durchlaufen, dann funktioniert es einwandfrei.

    Vielen Dank an alle ,

    Dirk

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    @PicNick

    Damit wären wir wieder bei der Kristallkugel. Etwas mehr Informationen hätten die Lösung vielleicht schon eher gebracht.

    @Dirk

    Deine Vermutung ist richtig. Die Daten werden beim Betrieb mit dem ICD2 durch ein kleines Programm im PIC an den Rechner gesendet. Da passiert unter Umständen genau das. In den Optionen zum ICD müssten sich aber die zu übertragenden Register einstellen lassen.
    BlackBox

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    @Blackbox: Du hast recht, ich schweige still.
    Schau, daß die Kugel schnell fertig wird.

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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