Erste Hilfe?

Hallo McFlay,

ich glaube das Hauptproblem ist, dass du dein komplettes Programm in die ADC ISR gepackt hast.

Der ADC triggert sich ja selber, die ISR wird also zyklisch aufgerufen. In der ADC-ISR hast du sogar eine Pause und am Ende der ISR gibtst du wieder die Interrupts global frei (SEI), bevor du die Registerinhalte vom Stack holst.

Die Wahrscheinlichkeit, dass direkt nachdem du die Interrupts global freigibst erneut die ADC ISR aufgerufen wird, ist sehr hoch (ich gehe mal von 100% aus, wenn die Pause ausreichend groß ist!). Dann kommt es zum "Absturz" deines Programms (Verschachtelte ISR)

Du kannst wahrscheinlich den "Absturz" verhindern, wenn du SEI in der ISR entfernst (RETI setzt SEI), aber wie schon geschrieben, du solltest dein Programm hauptsächlich in der Hauptschleife laufen lassen.

Grüße,
Dirk
 
Hallo,

nur leider hängt sich der Prozessor nun bei einer längeren Unterspannungszeit einfach auf
und macht garnichts mehr.
Ich denke das er sich in der Warteschleife festbeißt und nicht mehr los kommt:banghead:
Ist die Unterspannungserkennung richtig eingestellt ? Bei den normalen Megas gibts da zB nen paar Fuses mit denen man
einstellen kann bei wieviel Volt er nen Reset machen soll. Ist jetzt nur mal ne Idee ...

Gruß
Dino
 
Hallo Dino,
Ist die Unterspannungserkennung richtig eingestellt ? Bei den normalen Megas gibts da zB nen paar Fuses mit denen man
einstellen kann bei wieviel Volt er nen Reset machen soll.

es kann auch mit der Unterspannungserkennung zusammenhängen, aber es gibt einen Softwarefehler:

schau dir mal die Interruptserviceroutine onadc an. Der ADC ist im Freerunningmode, die ISR wird zyklisch aufgerufen, je nach ADC Takt, da schaue ich jetzt nicht nach, sagen wir einfach mal alle 1ms.

In der ISR ist eine lange Pause eingebaut (2 Sekunden?) und es werden nach dieser Pause Interrupts global freigegeben. In dem Moment ist das ADC Interruptanforderungsflag wenigstens 2000mal gesetzt worden, einmal reicht aus, dass in der ISR reti nie erreicht wird.

Grüße,
Dirk
 
Hallo Dirk,
du solltest dein Programm hauptsächlich in der Hauptschleife laufen lassen.
genau das war es seit ich nun nur noch das auslesen der Werte in onadc habe
geht es wieder wie erhofft:adore:
Habe nun mehrere Versuche gemacht und die Zeitintervalle immer mehr verlängert
und jedesmal war der Professor noch am arbeiten:dance3:

Da die Unterspannungsfunktion ohne die Warteschleife funktionierte
und auch jetzt läuft denke ich nicht das es ein Rest war,
es lag ganz einfach am Menschen vor dem Bildschirm:stupido2:

Vielen Dank für die schnelle Unterstützung!
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)