Hallo, ich plane eine Schaltung für's Auto mit einem AVR, die sich 1) bei einem Ereignis auf einem von drei Eingängen einschalten soll. 2) Sich selber komplett abschalten können soll, also nicht nur den MC in irgendeinen Sleep-Modus versetzen soll. Als V-Reg möchte ich einen LM2931 (5V) mit Inhibit (An=GND, Aus=Vin) verwenden. Über diesen Inhibit soll sich der Controller den gesamten 5V-Teil, also auch sich selbst abschalten können. Ich habe mal ein Idee als Skizze angehängt. Wenn von den Eingängen 12V kommen, wird Q9 leitend, dadurch wird auch Q7 leitend und der Inhibit-Pin des Vregs wird dauerhaft auf GND gezogen. Damit ist die Schaltung an. Kopfzerbrechen bereitet mir das Ausschalten. Wenn der AVR Q8 durchschaltet, sollten Q9 und Q7 sperren und damit der Saft ausgehen. Da ich aber nicht weiß, wie schnell die 5V aus dem AVR runtergehen, weiß ich nicht, ob Q8 lange genug leitend bleibt, um die Schaltung sicher auszuschalten. Hat jemand eine Idee, wie man das Ausschalten sicher kann, ohne genaue Kenntnis, wie die Versorgung des AVRs und damit auch das High am Ausgang absinken? Oder gibt's eine andere (fertige) Lösung? Frohe Weihnachten Thomas
>Hat jemand eine Idee, wie man das Ausschalten sicher kann, >ohne genaue Kenntnis, wie die Versorgung des AVRs und damit auch >das High am Ausgang absinken? >Oder gibt's eine andere (fertige) Lösung? Wenn du sicher sein willst, setze eine Sicherung in die Zuleitung, und verbinde die Sicherung über einen Relaiskontakt mit Masse. Das Relais wird dann vom Mikrocontrollerausgang ausgelöst. Danach hat der uC sicher keinen Saft mehr.
wie wärs mit angehängter lösung (sehr rudimentär). du gibst dem uC saft (einschalten), darauf hin liefert er solange ein hi-pegel (vom uC) bis er sich abschalten will...
Also von der Logik her würde ich es immer so machen, dass der Prozessor etwas abschaltet, wenn er ausschalten will. Also ein Portpin gegen Masse, der dann auch im ausgeschalteten Zustand auf Masse liegen bleibt. In dieser Schaltung habe ich das realisiert: http://www.wikidorf.de/reintechnisch/Inhalt/AVRProjekt-1V-LED-Lampe
Wie wäre es mit einem Flipflop. Den SET-Eingang mit deinen drei Eingänge verbinden und den RESET-Eingang mit dem AVR verbinden.
Hi! Warum muss der avr sich ganz abschalten ? Hab letztens mit nem attiny45 was gebastelt und der brauch nur 0,1uA (!) im sleep modus. Aufwachen ganz normal per Interruptpin. (wichtig ist es alles abzuschalten und die sleep bits richtig zu setzen) Da das ganze von zwei AA Zellen versorgt wird wollte ich das ganze auch erst abschalten, bei 0,1 uA lohnt sich da aber der Schaltungsaufwand nicht ;) Bye, Simon
Ja. Zeigt zumindest mein Messgerät an 8) Während der tiny mit zwei hellen LEDs läuft hab ich 10-20mA (pwm). Wenn ich dann in den sleep gehe zeigt es 0,0 mA an, wenn ich dann umstöpsel und auf uA stelle zeigt es nur noch 0,1uA an :) Bevor ich rausgefunden habe wie man die ganzen internen Sachen abschaltet und wirklich auch den osc stoppt kam ich immer nur auf 0,7mA. Falls es wen interessiert:
1 | void powerdown(){ |
2 | //avr: atTINY45
|
3 | |
4 | //prepare for powerdown, switch off all LEDs:
|
5 | PORTB &= ~((1<<LED0) | (1<<LED1) | (1<<LED2)); |
6 | |
7 | //switch all peripheral devices off:
|
8 | PRR = (1<<PRTIM0) | (1<<PRTIM1) | (1<<PRUSI) | (1<<PRADC); |
9 | |
10 | //BOD disable & sleep (must be within some clock cylces!)
|
11 | asm volatile ("cli "); //disable interrupts |
12 | asm volatile ("push r16 "); //backup reg16 |
13 | asm volatile ("in r16, 85-0x20"); //MCUCR |
14 | asm volatile ("ori r16, 0b00100000"); //set SE bit (b5) |
15 | asm volatile ("out 85-0x20, r16"); //set MCUCR |
16 | asm volatile ("ori r16, 0b10000100"); //set BODS (b7) and BODSE (b2) |
17 | asm volatile ("out 85-0x20, r16"); //set MCUCR |
18 | asm volatile ("andi r16, 0b11111011"); //clear BODSE (b2) |
19 | asm volatile ("out 85-0x20, r16"); //set MCUCR |
20 | asm volatile ("sei"); //enable ints again |
21 | asm volatile ("sleep"); //sleeeep |
22 | asm volatile ("pop r16 "); //restore r16 |
23 | |
24 | //reactivate timer
|
25 | PRR = (0<<PRTIM0) | (0<<PRTIM1) | (1<<PRUSI) | (1<<PRADC); |
26 | }
|
So klappt es jedenfalls :) Ob das reactivate Timer sinn macht weiss ich grad nicht mehr, kann sein dass es überflüssig is. Aufpassen bei der Reihenfolge vor sleep, da muss man innerhalb von 3 takten bleiben Bye, Simon
Hallo, Irgendwelche Logik-Bausteine (Latches) brauchen im KFZ dann doch auch wieder eine entprechend aufbereitete Versorgung. Genau die möchte ich mir aber sparen und nur die "eine" 5V-Schiene abschalten. Und wie gesagt, es geht mir nicht um einen Sleep-Modus, egal wie wenig der MC dann nur noch zieht. Thomas
Bei 0,1µA könnte man aber schon mit einem einfachen Elko (oder Goldcap) auch bei ausgeschaltetem Spannungsregler eine gewisse Zeit überbrücken. Das Eine schließt das Andere nicht aus.
Hallo Jörg, ok, dann verrate mir doch, wie ich beim Ausschalten des 5V-Zweigs den Goldcap an den MC naschließe und nur an an den MC. Gruß Thomas
den GoldCap einfach dranlassen.. ggf mit ner Diode vom Regler trennen...
Also ich würde den µC ständig an 5V lassen und mittels Transistor oder MOSFET die weiterführende 5V-Schiene bei Bedarf ausschalten. Wenn der Controller also in Sleep geht, macht er vorher die 5V für die restliche Logik aus. Ein LP2950CZ5 nimmt als Ruhestrom 10µA, plus die 0.1µA vom Controller und vielleicht nochmal 0,1µA vom Transistor-Ruhestrom. Die Bordelektronik braucht mit Sicherheit das 100-fache und die Selbstentladung der Starterbatterie ist noch höher.
In batteriebetriebenen Systemen macht ein Controller oft nur dann Sinn, wenn man die BOD-Überwachung eingeschaltet hat oder extern eine Supervisor-Chip dranhängen hat. Sonst kann so ein Controller total spinnen und wirres Zeugs machen. Wenn man aber beim Tiny 45 den BOD anschaltet, hat man gleich mal 20 uA mehr Stromverbrauch. Wenn man den Watchdog einschaltet, den man ebenso bei batteriebetriebenen Geräten oft braucht, hat man zusätzlich nochmal 15 uA. Damit ist dann leider der Traum von geringen Strömen vorbei, die ein permanentes Eingeschaltetsein zulassen. In den letzten 15 Jahren habe ich schon mehrfach batteriebetriebene Prozesessoren erlebt, die völligen Unfug gemacht haben, bis man sie wieder resetet hat. Das Programm war jedoch in Ordnung, es war also kein Softwarebug.
Gut - ich denke, selbst diese 35µA kann man im Auto locker verschmerzen, wie gesagt, die Selbstentladung ist bei Weitem höher. Das Autoradio und die Bordelektronik brauchen auch entschieden mehr im Standby. Bei kleinen transportablen Geräten ist das freilich schon ein K.O.-Kriterium.
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.