- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Merkwürdiges Problem mit PCINT und UART

  1. #11
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Solange ich keinen Interrupt von aussen auslöse funktioniert die Hauptroutine. Nach einem Interrupt bleibt der µC wieder hängen und führt noch nicht einmal den Code der ISR aus.
    Code:
    ISR(PCINT_vect)
    {
       //EIFR |= (1<<PCIF); //<--hat auch nicht geklappt
       uart_puts("A pin change interrupt occurred!");
    }
    Wozu habe ich eigentlich meinen ersten Post geschrieben?
    MfG
    Stefan

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    Hallo sternst,

    das habe ich mir schon zu Herzen genommen.
    Aber ich habe auch nochmal nachgeguckt, in der lib wird nur am UDRIE im UCSRB Register rumgefummelt.
    Nach meinem Verständnis löst doch ein Pegelwechsel am PortB einen Interrupt aus der dann die ISR ausführt. Darin wird der Puffer der UART lib gefüllt und der "Puffer leer" Interrupt aktiviert. So, wenn der leer ist berechnet er den Puffer neu. Zwischendurch ist die ISR auch schon fertig geworden und wartet auf den nächsten Interrupt.
    Sollte doch so klappen.
    Dazu muss ich sagen, dass mir klar ist dass wenn ich ungünstig den Interrupt nochmal auslöse der Puffer durcheinander kommen kann. Ich löse ihn aber nur einmal aus. (Hall-Schalter mit integr. Schmitt-Trigger)
    Also sollte es doch eigentlich fonktionieren, oder?

    MfG, Marten83

  3. #13
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Nein.
    Die Funktion uart_puts schreibt die Daten in den Sendepuffer, aber natürlich nur solange dort auch noch entsprechend Platz ist. Ist kein Platz mehr, wartet die Funktion so lange, bis wieder Platz ist. Die Defaultgröße des Puffers ist 32. Du versuchst aber mehr als 32 Zeichen zu senden, also wartet die Funktion, bis wieder Platz ist, um auch den Rest noch unterbringen zu können. Aber wie soll wieder Platz frei werden, wenn das Senden aus dem Puffer per Interrupt funktioniert, der Interrupt aber nicht aufgerufen wird, weil du gerade in einem anderen Interrupt bist? Also wartet die Funktion bis in alle Ewigkeit.
    MfG
    Stefan

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen