Hi,
mein ATMega8 soll kurz vor dem Abschalten noch eine handvoll Daten ins
Eeprom schreiben, damit beim wieder Einschalten passende Startwerte
vorhanden sind. Auf "Knopfdruck" funktioniert das auch recht schön.
Nun wollte ich das mit dem Brownout verbinden, sprich beim Auftreten des
BO-Interrupts soll geschrieben werden. Mir ist aber nicht klar wie ich
den Interrupt "anzapfe", zum Einen wird mit dem Vektor 0 sowohl External
Pin, Power-On-Reset, BO und der Watchdog behandelt, ich müsste das also
zunächst irgendwie trennen, um nur bei BO in die ISR zu gehen.
Zum Anderen wirft mir der Compiler eine Meldung:
interrupt.c:96: warning: ‘RESET_vect’ appears to be a misspelled signal
handler
Es scheint als könnte ich den Vektor 0 überhaupt nicht per SW behandeln?
Oder habe das tatsächlich falsch geschrieben? Hier der relevante
Ausschnitt aus der interrupt.c:
1 | #include "config.h"
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/eeprom.h>
|
4 |
|
5 |
|
6 | ISR(RESET_vect)
|
7 | {
|
8 | eeprom_write_block(&eedata, EE1_ADDR, sizeof(eedata));
|
9 | while(1); // nur 1x schreiben
|
10 | }
|
Das ist natürlich nur ein nicht funktionierender Entwurf, da ich ja erst
die verschiedenen Ereignisse trennen müsste.
Kann das so zum Ziel führen oder kriegt man das so nicht hin?
Danke,
Michael
PS: Ich kenne natürlich den Ansatz, per externem Interrupt das Absinken
der Versorgungsspannung zu erkennen und darauf zu reagieren. Ich wollte
allerdings wegen Platzknappheit den Anschluss eines weiteren IO-Pins
vermeiden und die internen Ressourcen nutzen.