Forum: Projekte & Code Messung der Betriebsspannung mit internem ADC auf ATtiny85


von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

Ich habe eine Möglichkeit gesucht, die Betriebsspannung des ATtiny85 
ohne externe Kompenenten zu messen. Im Handbuch ist etwas versteckt 
aufgeführt, dass man die interne Bandgap-Referenz auch als Eingang für 
den ADC auswählen kann.

Wenn man diese Spannung mit VCC als Referenz misst, kann man indirekt 
VCC messen. VCC berechnet sich dann zu:


Die Genauigkeit der Bandgap-Referenz wird mit +-10% angegeben. Wenn man 
nach den Graphen im Datasheet geht, ist die Genauigkeit <+-3%, selbst 
wenn man die Abhängigkeit der Bandgap-Spannung von VCC berücksichtigt. 
Der ADC-Fehler beträgt 2 LSB, also +-0.4%. Der Fehler wird also von der 
Bandgap-Referenz dominiert.

Die Genauigkeit sollte ausreichen, um z.B. eine Batteriespannung zu 
überwachen.

Anwendung:
1
  uint16_t in;
2
  double vref;
3
    
4
  in=MeasureVCC();    
5
  vref=1024*1.1f/(double)in;
6
    
7
  printf("ADC Value: %i VCC: %.2f V\n",in,vref);

Code:
1
/*
2
  uint16_t MeasureVCC(void)
3
  
4
  Measures the supply voltage of an ATtiny85 internall using the ADC.
5
  
6
  Returns the ADC-value of the 1.1 band gap input measured with VCC as reference voltage.
7
  This value can be converted to the VCC voltage by using this equation:
8
  
9
  VCC=1024*1.1/ADC;
10
  
11
  cpldcpu@gmail.com - Nov 23, 2013
12
*/
13
14
uint16_t MeasureVCC(void)
15
{
16
    PRR    &=~_BV(PRADC);                 // ADC power on
17
    ADCSRA  =_BV(ADEN)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0); // Enable ADC, Set prescaler to 128
18
    ADMUX   =_BV(REFS2) | 0x0c; // Use VCC as voltage reference, select bandgap reference as ADC input
19
    _delay_ms(1);  // Settling time, see p.134 in ATtiny Datasheet
20
    
21
    ADCSRA  |=_BV(ADSC); // Start conversion
22
    while (!(ADCSRA&_BV(ADIF)));  //~100 us
23
    ADCSRA  |=_BV(ADIF); // Clear ADIF
24
    return ADC;
25
}

: Verschoben durch User
von Karl H. (kbuchegg)


Lesenswert?

Was ist deine Frage?

Oder ist das ein 'So gehts' Thread.
In dem Fall würde ich ihn nämlich gerne in die Codesammlung verschieben.

: Bearbeitet durch User
von Tim  . (cpldcpu)


Lesenswert?

Karl Heinz schrieb:
> In dem Fall würde ich ihn nämlich gerne in die Codesammlung verschieben.

Stimmt, da würde es besser passen.

von Roland .. (rowland)


Lesenswert?

Ich habe soeben nachgesehen, der ATMega8 bietet ebenfalls diese 
Möglichkeit: 0xE.

von Tim  . (cpldcpu)


Lesenswert?

Die Messgenauigkeit reicht auf jeden Fall aus, um festzustellen dass 
verschiedene Geräte unterschiedliche Spannungen am USB-Port bereit 
stellen.

Computer:
1
ADC Value: 222 Vref: 5.07 V
2
ADC Value: 223 Vref: 5.05 V
3
ADC Value: 222 Vref: 5.07 V
4
ADC Value: 222 Vref: 5.07 V
5
ADC Value: 222 Vref: 5.07 V

USB-Hub
1
ADC Value: 218 Vref: 5.17 V
2
ADC Value: 218 Vref: 5.17 V
3
ADC Value: 218 Vref: 5.17 V
4
ADC Value: 218 Vref: 5.17 V
5
ADC Value: 218 Vref: 5.17 V
6
ADC Value: 219 Vref: 5.14 V
7
ADC Value: 218 Vref: 5.17 V

: Bearbeitet durch User
von Tim  . (cpldcpu)


Lesenswert?

Bin mal eben die Datenblätter durchgegangen, die mir vorlagen.

Messung der Betriebsspannung möglich:
1
ATtiny 25/45/85       JA
2
ATtiny 24/44/84       JA
3
ATtiny 13             NEIN
4
ATtiny 4/5/9/10       NEIN
5
6
ATmega 48/88/168      JA
7
ATMega 8              JA

von Danke (Gast)


Lesenswert?

Klasse! Vielen Dank für den Tip.

von Bedankt (Gast)


Lesenswert?

Ebenfalls herzlichen Dank. Tolle Idee!

von Hannes L. (hannes)


Lesenswert?


: Bearbeitet durch User
von Axel R. (Gast)


Lesenswert?

ebendt

von spess53 (Gast)


Lesenswert?

HI

>So richtig neu ist diese Methode aber nicht:
>Beitrag "Re: ATtiny13 mit Li-Io betreiben - Spannung richtig messen"
>Beitrag "Re: Ladestatus eines Li-Ion-Akku messen"

Noch viel älter. Z.B.

Beitrag "Re: Batteriespannung messen"

MfG Spess

von Danke (Gast)


Lesenswert?

Ich hab es in diesem thread zum erstenmal gelesen und hab mich gefreut, 
daß es so eindeutig nochmal beschrieben wurde.

Ich gehe nicht davon aus, daß es mikrocontroller.net Autoren waren, die 
die Möglichkeit als Erste genutzt haben. Ich spare mir die Mühe nach 
weiteren Quellen zu forschen und danke Tim nochmals.

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.