Hallo!
1) ist es möglich, einen codeblock als volatile zu definieren? WINAVR
2) kann man via SW den Controller stoppen bis er ein hardware reset
bekommt? ich will Energiesparen, wenn der Controller seine Werte via
UART weggesendet hat.
Moin!
1.) Codeblock volatile ? Volatile deklarier ich etwas, was von mehreren
Threads/Funktionen aufgerufen oder verwendet wird. Damit der Compiler
keine Optimierung durchführt die den Inhaltz beim Threadwechsel
zerhacken könnten.
Also Felder, Variablen usw.
2.) http://www.mikrocontroller.net/articles/Sleep_Mode
Gruß
Timo P schrieb:
> 1) ist es möglich, einen codeblock als volatile zu definieren? WINAVR
In GCC 4.4 lässt sich für ganze Funktionen die Optimierung individuell
einstellen/abschalten (attribute, pragma). Ist aber mit Vorsicht zu
betrachten, volatile ist sinnvoller.
Timo P schrieb:
> Hallo!>> 1) ist es möglich, einen codeblock als volatile zu definieren? WINAVR
In C gibt es keine closures. Daher: nein.
> 2) kann man via SW den Controller stoppen bis er ein hardware reset> bekommt? ich will Energiesparen, wenn der Controller seine Werte via> UART weggesendet hat.
Da waere eher der Sleep-Modus Dein Freund. Aber mit dem watchdog laesst
sich per SW auch ein reset herbeifuehren. HW-Reset heisst hier dass der
reset-Vektor ausgeloest wird. Bei manchen AVR laeuft der watchdog dann
allerdings weiter und muss in einer fruehen init-Phase (am besten vor
main) wieder zurueckgesetzt werden.
Michael
Der atmega wird bestromt, macht sein ding und geht aus
geht erst wieder an, wenn er neu vcc bekommt. So der Plan. Wie es sich
hier anhört, ist es nicht möglich, den Controller auszuschlaten, sondern
anscheinend *nur* in einen sleep-modus zu versetzen.
Ist dies korrekt?
Timo P. schrieb:
> Der atmega wird bestromt, macht sein ding und geht aus> geht erst wieder an, wenn er neu vcc bekommt. So der Plan. Wie es sich> hier anhört, ist es nicht möglich, den Controller auszuschlaten, sondern> anscheinend *nur* in einen sleep-modus zu versetzen.>> Ist dies korrekt?
Ja.
Allerdings kann sich der Controller durchaus auch selbst die
Versorgungsspannung abschalten :-)
Du brauchst nur eine Möglichkeit die Versorgungsspannung schaltbar zu
machen. Wenn der µC dann diesen Schalter bedienen kann ....
m. keller schrieb:
> wer soll ihn denn wieder anschalten?
Ein anderer Controller schaltet ihn wieder an. Bevor jetzt die Frage
kommt: "HAHA, dann kann der schaltende Controller doch den, den er
anschaltet auch ausschalten..." Da antworte ich dann: ne dann brauche
ich für 6 "schaltbare" Controller ja 6 verschiedene VCC-Leitungen. Der
Master schaltet zeitgleich alle device-controller an. Diese brauchen
unterschiedlich lange für ihre Aufgaben und sollen deswegen selbst
bestimmen, wann sie ausgehen.
Karl heinz Buchegger schrieb:
>Allerdings kann sich der Controller durchaus auch selbst die>Versorgungsspannung abschalten :-)>Du brauchst nur eine Möglichkeit die Versorgungsspannung schaltbar zu>machen. Wenn der µC dann diesen Schalter bedienen kann ....
Ok wenn ich eine art flipflop aufbaue, die der Controller selbst
ausschalten kann per portpin, dann habe ich das Problem, dass es per SW
nicht geht, einfach umgangen, muss aber mehr Hardwareaufwand in kauf
nehmen
Timo P. schrieb:
> Ok wenn ich eine art flipflop aufbaue, die der Controller selbst> ausschalten kann per portpin, dann habe ich das Problem, dass es per SW> nicht geht, einfach umgangen, muss aber mehr Hardwareaufwand in kauf> nehmen
Muss ja kein Flip-Flip sein. Ein Transistor, Basiswiderstand und 2
Dioden könnten ja schon reichen.
Die beiden Dioden bilden ein Wired-OR und schalten den Transistor durch,
welcher die Versorgungsspannung schaltet. Jeweils der Master und der
Slave hängen am anderen Ende der Dioden. Der Master kann damit mit einer
1 an seiner Diode den Transi durchschalten und damit den Slave
aufwecken. Wird der Slave aufgeweckt, schaltet er als erstes den
Selbsthaltepin ebenfalls auf 1, damit kann dann der Master den Pin
loslassen, der Transi bleibt durchgesteuert. Ist der Slave fertig, geht
sein Selbsthaltepin auf 0 und er dreht sich selbst den Saft ab.
Ob sich der Aufwand lohnt?
Kommt drauf an. Im Sleep Mode verbrauchen die Dinger so wenig Strom ....
Da verbraucht dir das Flip-Flop wahrscheinlich schon mehr Strom :-)
Batteriebetrieben vllt. nur Knopfzellen. Sede Sekunde wacht ein
ultra low power msp430 auf und bestromt ca 6 device-controller,
die alle ihre Messungen machen müssen. Das zieht dann strom!
Und ich will und muss an allen ecken strom sparen.
Mir ist als eher hardwarefremder nicht ganz klar wie ich die Schaltung
aufbaue. VCC ist die einzige Leitung zum Controller hin(abgesehen von
RX,TX) diese VCC Leitung ist dauernd auf high. Nun brauche ich eine
Schaltung, die ich per dauerVCC einschalte, aber per Portpin wieder
ausschalte. Genau das ist mein Problem per Portpin ausschalten. WIE?!?
wenn ich sowas wie die selbsthaltung aufbauen würde, könnte ich nen
Transistor in Emmitterschaltung nehmen, rückführen auf die Basis als
Selbsthaltung und nen weiteren transistor als Öffner fürs ausschalten.
Das Ausschalten müsste aber pemanent sein, also controller aus,
auschalten bleibt aus, bis vcc auf low geht.
komm irgendwie nicht aus dem kreis raus, dass der controller schön nen
Pin toggeln kann, aber wenn er ausgeht ist der pin auf low, wenn er high
sein muss für controller ein, dann läuft der controller aber der pin
braucht bis her hi ist und dann geht die schaltung net
stehe voll auf dem schlauch!
Die Beispielschaltung habe ich verstanden. Dazu brauche ich aber eine
zusätzliche Steuerleitung, nämlich die, die die Basis ansteuert.
Zusätzlich heißt zusätzlich zur VCC, die der Controller während seinen
Aufgaben ja benötigt, klar... Evtl. kann ich es hier durchsetzten, dass
ich wieder eine weitere Leitung nutzen darf..
dann hätte ich schon
RX
TX
GND
VCC
VCC controll
VCC2 special
die ich durch alle daugtherboards schicken muss :(
dann nehm ich die VCC-controll an die Basis wie folgt:
-----------------------------|
| |
| VCC |
| | |
| |---| |------| |
VCC-cltl-----| | pin |----|
|->-| | |
| | |
|--------|VCC µC|
|------|
Mal ueberlegt, ob das wirklich dein zentrales Problem ist? Bring doch
erstmal die Grundsoftware zum Laufen. Und dann kannst du ja in Ruhe mal
ausprobieren, ob dich der Sleepmode mehr Strom kostet, als den ganzen
Kontroller staendig aus und ein zu schalten...
Dein Master müsste messen, ob noch eine gewisse Menge Strom fließt.
Im Sleepmode sollte der Betrag wesentlich geringer sein, als im
laufenden Betrieb.
Oder:
Man misst vorher die Zeit, die ein Slave (maximal) braucht und stellt
die Versorgungsspannung über den Master entsprechend lange zur
Verfügung.
Oder:
Wenn der Master sowieso mit dem Slave in beide Richtungen kommuniziert,
könnte der Slave auch einfach dem Master schreiben "Licht aus!"
>VCC ist die einzige Leitung zum Controller hin(abgesehen von>RX,TX) diese VCC Leitung ist dauernd auf high. Nun brauche ich eine>Schaltung, die ich per dauerVCC einschalte, aber per Portpin wieder>ausschalte. Genau das ist mein Problem per Portpin ausschalten. WIE?!?
Wenn die VCC-Leitung (zum Slave) nicht geschaltet werden darf, dann
kannst du die Sachen nur mit einem Sleepmode regeln.
> Wenn der Master sowieso mit dem Slave in beide Richtungen kommuniziert,> könnte der Slave auch einfach dem Master schreiben "Licht aus!"
Das hatte ich ja vor, und dann den Controller aus(geht ja net)
> Wenn die VCC-Leitung (zum Slave) nicht geschaltet werden darf, dann> kannst du die Sachen nur mit einem Sleepmode regeln.
Das haben wir ja vorhin festgestellt, dass es nicht geht.
ich werde mir mal überlegen, ob ich den Controller wenigstens in den
sleep-mode versetzte
Bei neueren AVR Controllern (z.B. Mega88PA) gibt es auch sleep modes wo
der Stromverbrauch deutlich unter 1 µA (Im Bereich 0,1 µA) geht. Man muß
dazu aber ohne Brownout detektor auskommen. Also vorsicht mit EEPROM
Addresse 0 und einem Bootloader. Wenn man eine UART nutzen will, muß man
aber mit dem Takt etwas aufpassen, denn der interne RC Takt reicht oft
nicht, und ein Quarz braucht lange zum Starten.
Bei dem Strom wird sich ein externes Auschalten kaum noch lohnen. Da ist
dann kaum noch ein Unterschied zu aus.
Es könnte dann sogar sinnvol sein den µC gar nicht wirklich neu zu
starten, sonern einfach nur aufwecken, denn im Reset zustand braucht der
µC recht viel Strom.
das problem ist, dass der kunde via dipschalter zwischen 8 verschiedenen
timings wählen kann( nach denen dann die devices aufgeweckt oder
bestromt werden)
die timings liegen so zwischen 1s und 24h