Hallo lieben Mitleser, also mein Vorhaben ist ein wenig kompliziert zu erklären, dennoch möchte ich es kurz versuchen zu schildern und nach Ratschläge und Hilfe fragen... Ich habe ein Mega8 (5V betrieben) und sobald die 5V ausfallen wird auf ein Akku umgeschaltet und dieser als Puffer benutzt. Nun möchte ich, dass abgefragt wird, ob die 5V wieder da sind oder nicht. Dies wollte ich mit dem ADC realisieren. Wenn die 5V für eine Zeit lang weg bleibt, soll der µC in den PowerDown übergehen. Sobald die 5V wieder anliegen, soll der µC aufwachen. Und genau hier ist mein Problem. Zum wecken brauche ich ja ein Interrupt. Wo kann ich mir dieses "Wecksignal" herholen? Kann ich die 5V-Leitung einfach an mein INT0 hängen? Reicht das "anlegen" der 5V an den INT0 aus, um den µC zu wecken? Oder gibt es da vielleicht eine andere Möglichkeit??? Ich habe hier einiges über solche Sachen gelesen, aber bin nicht wirklich auf eine elegante Lösung stoßen. Vielleicht kann mir da jemand weiter helfen... Bedanke mich recht herzlich und wünsche einen schönen (rest)Abend... Elko
Tja, Elektrolyt, nun hast Du einen Streit über Umgangsformen angezettelt. Da siehst Du mal, was Schreibfehler so alles bewirken können... ;-) Zum Thema: Tabelle 14 auf Seite 33 des Mega8-Datenblattes zeigt die Quellen, die den Mega8 aus den entsprechenden Sleep-Modi aufwecken können. Da Du den Power-Down oder Power-Save benutzen willst, kommt eigentlich nur der externe Low-Level-Interrupt in Frage. Den kannst Du dann mit GND bzw. einem Low-Level (wie der Name schon sagt) auslösen und nicht mit +5V (das wäre High-Level). Da wird das direkte Anschließen der Spannung also nix werden. Allerdings kannst Du das Signal mit einem NPN-Transistor und einem Basis-Widerstand umkehren, dann funktioniert das mit dem Interrupt. Zum Erkennen des Spannungsausfalls brauchst Du auch keinen ADC, das kannst Du auch über den Pinzustand ermitteln. Einfach in regelmäßigen Abständen pollen, oder auch den Interrupt für steigende Flanke benutzen (wird aber etwas komplexer, da das derselbe Int ist, der auch zum Wecken genutzt werden soll). KH
pRoF: ich fordere hiermit ebenfalls eine Sperrung für Gäste zum Posten Patrick Weinberger: Don't feed the troll Elektrolyt: 5 V über RC-Glied an einen PinChange Interrupt, sodass der Interrupt auch erst triggert, wenn die 5 V wieder stabil anliegen. 100 kOhm und 100 nF bieten sich an, dann dürftest du nach rund 100 ms nen Interrupt bekommen. Den Pin Change Interrupt aktivierst du im Programm gleichzeitig mit dem Sleep Mode, nach dem Aufwachen wird er sofort wieder deaktiviert. Wie erkennst du denn zur Zeit die Abwesenheit der Hauptspeisung? Das kann man sicherlich direkt verbinden und mit 1 IO-Pin abhandeln. cu Matze
Sehr gute Idee. Der Mega8 hat aber leider keinen Pin-Change-Interrupt... Du fütterst aber glaube auch die Trolle. Trolle müssen im mikroconTROLLer-Forum aber sein... ;-) KH
Siehe Sleep Mode und http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren Für das Aufwecken aus dem Power Down brauchst du einen Inverter, z. 74HC04. MFG Falk
> Für das Aufwecken aus dem Power Down brauchst du einen Inverter, z. > 74HC04 Oder eben einen (bereits erwähnten) Transistor... ;-) KH
@ Kachel - Heinz (Gast)
>Oder eben einen (bereits erwähnten) Transistor... ;-)
Kaum. In einer Ultra Low Power Anwendung sind Bipolartransistoren nciht
wirklich das Mittel der Wahl. MOSFETs only.
MFg
Falk
Oha, ihr habt recht. Ich entschuldige mich mal damit, dass ich 5 Minuten nach Abschicken des Beitrags bereits eingeschlafen im Bett lag? Trotzdem müsste mein Code doch mit den externen Interrupts lösbar sein - "ISC11=0 ISC10=1 - Any logical change on INT1 generates an Interrupt request". Oder auch ISC11=1 und ISC10=1 für rising edge. (Seite 66 Datenblatt) Spart aufgrund des RC-Gliedes dann den Transistor oder Inverter. Oder vertu ich mich schon wieder? Nebenbei, gut das es keiner gemerkt hat, ich hab während des Einschlafens noch dran gedacht, dass ich das RC Glied falsch berechnet habe :-) Es wären bei 100 k und 100 nF eher 5-10 ms bis der µC High statt Low sieht.
>Oder eben einen (bereits erwähnten) Transistor... ;-) >Kaum. Es gibt Leute. die müssen Recht haben, sonst kommen si nicht in den Sleep-Modus. ;-) gez. Katapulski
Naja, die 5V, die der Transistor belasten würde, kommen ja nicht aus dem Akku, sondern höchstwahrscheinlich aus einem Netzteil. Und da verriecht sich ein Basis-Widerstand von mehreren 10k. Natürlich ist ein CMOS-IC besser, ich würde aber den CD4093 bevorzugen, den habe ich nämlich liegen. @Katadingsda: Sei doch nicht immer so spitz... KH
Man kann natürlich den Analog Comparator dafür verwenden. Nachteil ist aber, dass der für seine interne Referenz hässlich viel Strom benötigt. Wenn der Controller sich mit dem Aufwachen etwas Zeit lassen darf und nicht auf Quarz läuft sondern vorzugsweise mit internem RC-Osz, dann gibt es eine stromsparendere Variante: Alle Sekunde mal aufwachen, ADC oder Comparator einschalten, warten bis die interne Referenz stabil ist, nachmessen, ADC/AC abschalten und wieder einschlafen. Denn dann muss nur der Watchdog-Timer als Wecker-Interrupt laufen. Der effektive Stromverbrauch entspricht dabei dem Powerdown-Modus plus Watchdog, denn die aktive Zeit ist insgesamt praktisch vernachlässigbar. Mit Quarz muss man nachrechnen ob sich das lohnt, denn dann ist die Aufweckzeit nicht vernachlässigbar.
@Matthias Larisch (matze88) >Trotzdem müsste mein Code doch mit den externen Interrupts lösbar sein - >"ISC11=0 ISC10=1 - Any logical change on INT1 generates an Interrupt >request". Oder auch ISC11=1 und ISC10=1 für rising edge. (Seite 66 Ja dann lies mal was über den Sleep Mode. Aus dem Power Down kann der AVR nur per LOW LEVEL Interrupt geweckt werden. >Datenblatt) Spart aufgrund des RC-Gliedes dann den Transistor oder >Inverter. Oder vertu ich mich schon wieder? Ja. MFG Falk
> >>Trotzdem müsste mein Code doch mit den externen Interrupts lösbar sein - >>"ISC11=0 ISC10=1 - Any logical change on INT1 generates an Interrupt >>request". Oder auch ISC11=1 und ISC10=1 für rising edge. (Seite 66 > > Ja dann lies mal was über den Sleep Mode. Aus dem Power Down kann > der AVR nur per LOW LEVEL Interrupt geweckt werden. Oh ja, stimmt :-((( Tut mir leid, das hatte ich total vergessen. Da hab ich mich eh schon gewundert, warum es mit dem PinChange Interrupt (sofern vorhanden) geht, aber die "richtigen" Interrupts nur auf Low Level zum Aufwecken taugen. Naja, das Problem sollte ja durch deine Lösung mit dem Inverter schon gut gelöst sein :-) Matze
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.