Forum: Mikrocontroller und Digitale Elektronik Anwendung power.h


von Henry (Gast)


Lesenswert?

Hallo
In einem Programm verwende ich die power.h.
Das kann so aussehen:
1
void powerSetup()
2
  {
3
  PRR = (1<<PRTWI)|(1<<PRUSART1)|(1<<PRUSART0)|(1<<PRSPI)|(1<<PRTIM2)|(1<<PRTIM1)|(1<<PRTIM0)|(1<<PRADC);
oder so:
1
power_twi_disable();    // Schaltet TWI (I2C) ab
2
power_usart1_disable();    // Schaltet USART1 ab
3
power_usart0_disable();    // Schaltet USART2 ab
4
power_spi_disable();    // Schaltet SPI ab
5
power_timer2_disable();    // Schaltet TIMER2 ab
6
power_timer1_disable();    // Schaltet TIMER1 ab
7
power_timer0_disable();    // Schaltet TIMER0 ab
8
power_adc_disable();    // Schaltet ADC ab
Aufruf erfolgt damit:
1
int main(void)
2
  {
3
  powerSetup();
4
  DDRA=0b00100001;      // DDR A auf Ausgang schalten
5
  PORTA=0b00100001;      // Port A auf aus
6
  sei();            // Interrupt ein
7
  while(1)          // Programmschleife
8
    {
9
    /*PORTA &=~(1<<PINA0);  // LED 3 ein
10
    _delay_ms(4000);    // Pause
11
    
12
    PORTA |=(1<<PINA0);    // LED 3 aus
13
    _delay_ms(4000);*/    // Pause
14
    }
15
  }
Auf dem Board befindet sich noch eine LED, die ca mit Prozessor 15mA 
nimmt.
Wenn ich die power Funktion dazu nehme ergibt es eine Einsparung von ca. 
0,5mA Strom. Kann das korrekt sein?

von Wolfgang (Gast)


Lesenswert?

Henry schrieb:
> Wenn ich die power Funktion dazu nehme ergibt es eine Einsparung von ca.
> 0,5mA Strom. Kann das korrekt sein?

Kann oder kann nicht - kommt drauf an, was du für eine HW verwendest.

von Stefan F. (Gast)


Lesenswert?

Henry schrieb:
> Wenn ich die power Funktion dazu nehme ergibt es eine
> Einsparung von ca. 0,5mA Strom. Kann das korrekt sein?

Kann gut sein. CPU und den Takt-Oszillator laufen ja noch weiter.

Kleiner Tipp: Anstelle von

> PORTA |=(1<<PINA0);    // LED 3 aus

Kannst du das in eine Funktion auslagern, dann sagt ihr Name schon, was 
sie tut:

> led_3_aus();

Der Compiler erzeugt daraus genau so effizienten Code.

von Henry (Gast)


Lesenswert?

Verwende einen Attiny 841 mit 5V und 16MHz.
Das mit der LED kommt noch. Versuche die Einsparung in den Griff zu 
bekommen. Mit sleep.h komme ich auf 0,25mA.
Das andere scheint nicht so wirksam zu sein

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das steht doch im Diagramm auf Seite 255 des DB. Bei 16Mhz und 5V 
Speisung zieht der kleine Kerl erstmal knapp 8mA für sich im Active 
Mode. Wieviel die Abschaltung der Peripherie und die Verwendung anderer 
Taktquellen bringt, steht auf den folgenden Seiten.

von Henry (Gast)


Lesenswert?

Habe das im DB gelesen. Beim sleep Mode muss das im Programm direkt 
aktiviert werden damit es wirksam ist. Muss das bei power.h auch gemacht 
werden?
Die Einsparung beim sleep sind ja teilweise sehr gross. Es geht ja 
teilweise bis zu 50-80 uA runter. Beim power leider nur ein paar mA.
Ist dabei im Programm etwas zu berücksichtigen?

von Stefan F. (Gast)


Lesenswert?

Henry schrieb:
> Beim sleep Mode muss das im Programm direkt
> aktiviert werden damit es wirksam ist. Muss das bei power.h auch gemacht
> werden?

Teilweise. Manche Funktionen nehmen im Tiefschlaf praktisch keinen Strom 
mehr auf, andere doch (z.B. der ADC). Irgendwo steht auch dokumentiert, 
was alles in welchem Sleep Modus mit "aus" geht.

von Andre (Gast)


Lesenswert?

Wahrscheinlich hast du da zu hohe Erwartungen.
Sleep ist die beste Methode um richtig Strom zu sparen.
Power nimmst du dann, um das letzte Milliampere zu optimieren, also um 
Teile abzuschalten die unbenutzt sind oder z.B. den ADC stören.

von Stefan F. (Gast)


Lesenswert?

Henry schrieb:
> Es geht ja teilweise bis zu 50-80 uA runter

Achtung: Auf die schönsten Werte kommt das Datenblatt mit einer externen 
Taktquelle deren Stromaufnahme nicht mit gezählt wird. Wenn du sogar den 
Takt stoppst, gibt es nur noch eingeschränkte Möglichkeiten, den Chip 
wieder aufzuwecken. Und das dauert dann, weil der Oszillator Zeit 
braucht, hoch zu fahren. Beim Quarz können das mehr als 10ms sein.

Der Watchdog braucht beträchtlich Strom und macht natürlich keinen Sinn, 
während die CPU angehalten ist. Den kannst du also nur eingeschränkt 
benutzen.

von Henry (Gast)


Lesenswert?

Das mit sleep funktioniert super. Komme ja ganz schön runter. Habe 
allerdings erwartet das bei Anwendung von power.h auch ein messbarer 
Unterschied zu sehen ist.
Auch BOD wirkt sich dabei aus. Die Frequenz lasse ich aber bei 16MHz. 
Bei anderen anwendungen geht diese ja bis 32 KHz runter.
Da sind meine Erwartungen wahrscheinlich zu hoch.

von S. Landolt (Gast)


Lesenswert?

> Der Watchdog braucht beträchtlich Strom und macht
> natürlich keinen Sinn, während die CPU angehalten ist.

?
Liegt im einstelligen uA-Bereich, und im Interrupt-Modus genutzt, kann 
man sich durchaus die eine oder andere sinnvolle Anwendung vorstellen.

von Henry (Gast)


Lesenswert?

Kurze Frage nur zu power.h
Lohnt sich das ohne sleep?

von Stefan F. (Gast)


Lesenswert?

Henry schrieb:
> Kurze Frage nur zu power.h
> Lohnt sich das ohne sleep?

Kommt drauf an.

Bei wenigen kHz Taktfrequenz und Versorgung aus Knopfzellen merkst du 
den Unterschied.

Bei einer Waschmaschinen-Steuerung lohnt es nicht nicht.

von S. Landolt (Gast)


Lesenswert?

>Die Frequenz lasse ich aber bei 16MHz.

Tja - das bedingt aber eine Betriebsspannung von 4.5 V; und ein Blick 
auf die diversen Kurven unter 'Current Consumption' zeigt, dass mit 
niedrigeren Spannungen nicht unbeträchtliche Einsparungen zu erzielen 
sind.

von Henry (Gast)


Lesenswert?

Bei meinen Messungen nur mit sleep bei 5V und 16MHz konnte ich deutliche 
Einsparungen messen. Nur mit power.h bei 5V und 16Mhz so gut wie nichts. 
Mit sleep und power bei 5V und 16MHz ähnlich Messung wie nur mit sleep.
Würde die Schlussfolgerung ziehen, sleep lohnt sich, power nicht.

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
Noch kein Account? Hier anmelden.