mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [AVR] Brownout Interrupt Vector?


Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include "config.h"      
#include <avr/interrupt.h> 
#include <avr/eeprom.h>


ISR(RESET_vect) 
{
  eeprom_write_block(&eedata, EE1_ADDR, sizeof(eedata));  
  while(1);            // nur 1x schreiben
}

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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brownout gibt Reset und das ist kein Interrupt. Das muss vorher 
abgefangen werden, bevor der Brownout zuschlägt. Per Analog Comparator 
oder ADC.

Versorgungsspannung lässt sich per ADC ohne Pin messen. Die interne 
Bandgap auf dem Muxer legen und Vcc als Referenz verwenden.

Autor: Nicht-Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird so nicht gehen.

Sobald die Betriebsspannung unter den Brown-Out-Wert sinkt, wird die CPU 
erstmal komplett angehalten. der "Vector 0"/Reset-Vector wird erst 
angesprungen, wenn der Brown-Out wieder vorbei ist, also die 
Betriebsspannung auf Brown-Out-Wert + Hysterse angestiegen ist.

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brown Out erwirkt Reset und das es ein Brown Out Reset war ist hinterher 
m MCU Control and Status Register anhand des Brown-out Reset Flag zu 
lesen

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht immer noch um die Uhrzeit?

Speicher die einfach immer im Eeprom.
Hatte ich mal bei einem Projekt so gemacht, wo der AVR die Uhrzeit 
zumindest ungefähr behalten sollte, ein Stromausfall aber so 
unwahrscheinlich war dass sich Goldcap/Li-Batterie/RTC etc nicht gelohnt 
hätten.

Datum brauchte ich nicht, nur den Wochentag. Im Eeprom habe ich dann 
"Minuten seit Mitternacht" gespeichert:

1 EEMEM-Byte für die MSBs (3 bits Wochentag, 4 bits Minute)
wurde einmal alle 128 Minuten geschrieben, die Zelle hätte also mind. 22 
Jahre gehalten.

105 EEMEM-Bytes (der unbenutzte Rest) für 7 Minuten-LSBs, jede Minute 
geschrieben, aber durch das Balancen auf 105 Zellen hätte das auch 
Jahrzehnte gehalten.

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Brownout gibt Reset und das ist kein Interrupt.

Das hatte ich aufgrund der Fehlermeldung schon befürchtet, mein Ansatz 
kann also nicht funktionieren.

> Versorgungsspannung lässt sich per ADC ohne Pin messen. Die interne
> Bandgap auf dem Muxer legen und Vcc als Referenz verwenden.

Das klingt interessant, mal sehen ob ich das zeitlich auf die Reihe 
kriege, da ich den ADC auch für anderes brauche.

Vielen Dank an alle für die Tips.

M

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Versorgungsspannung lässt sich per ADC ohne Pin messen. Die interne
>> Bandgap auf dem Muxer legen und Vcc als Referenz verwenden.
>
> Das klingt interessant, mal sehen ob ich das zeitlich auf die Reihe
> kriege, da ich den ADC auch für anderes brauche.

Daran denken dass der ADC sehr lange braucht um nach dem Umschalten der 
Ref-Spannung wieder vernünftige Werte zu liefern, REF-Bits setzen + 1x 
Dummy-Read langt meiner Erfahrung nach nicht.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Der Analog-Komparator ist die bessere Wahl.

MfG Spess

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Der Analog-Komparator ist die bessere Wahl.

Wenn man die Pins frei hat, sicher.

Wenn's ohne extra-Pins gehen soll, bleibt nur der Weg über Bandgap 
messen mit Vcc als Ref.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>spess53 schrieb:
>> Der Analog-Komparator ist die bessere Wahl.

>Wenn man die Pins frei hat, sicher.

Nur wenn man es erst merkt, wenn es zu spät ist.

MfG Spess

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ja, @Michael:

Die Betriebsspannung per ADC (oder von mir aus mit dem Komparator) zu 
überwachen bringt nichts gegen kurze (<1ms) Einbrüche, die beim 
Relais-schalten entstehen.
Dagegen hilft nur ein gutes Layout (Kein Eagle-Autorouter) und saubere 
Entkopplung der Betriebsspannung.

Wenn es dafür schon zu spät ist: Du kannst doch einfach VOR jedem 
Relais-Schaltvorgang deine Daten ins EEProm sichern.
Klar, die EEProm-Zellen halten nicht ewig, aber das tun Relaiskontakte 
auch nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.