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.
wie wäre denn sie syntax? gibt es sowas: #volatile ... ... ... #endvolatile ??
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
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.