mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik allgem. Frgen Atmega


Autor: Timo P (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ftf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu 2)
da gibts verschiedene sleepmodes und sowas. steht im Datenblatt.

Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Timo P (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wäre denn sie syntax? gibt es sowas:

#volatile
...
...
...
#endvolatile

??

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ....

Autor: m. keller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wer soll ihn denn wieder anschalten?

Schau ins Datenblatt

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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|
                          |------|

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kunde...? Du willst das doch nicht etwa Jemandem verkaufen?

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.