Anwendung power.h

Gast #6989095
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?
Gast #6989109
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.
Gast #6989457
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?
Gast #6989470
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.
Gast #6989471
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.
Gast #6989475
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.
Gast #6989486
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.
Gast #6989490
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.
Gast #6989545
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.
Gast #6989665
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren