Tiny ADC interne Offsetmessung

Gast #2470580
Lesenswert?

Hallo erstmal,
wie im Betreff schon erwähnt möchte ich mit dem ADC eines Attiny85 eine 
Spannung messen.
Soweit funktioniert auch alles, allerdings habe ich einen gewissen 
Offset den ich rausbekommen will.
Nachdem die Versorgungsspannung auch gleichzeitig am zu messenden 
Spannungsteiler anliegt, kann ich im Betrieb keine 0V-Offsetmessung 
vornehmen, da dann ja schon Spannung anliegt.
Möchte deswegen die Möglichkeit der Internen Offsetmessung nutzen, da 
dieser dann unabhängig von der externen Schaltung ist. Allerdings ist 
dieser Wert dann ziemlich hoch: ca.35 (echter Offset etwa 8).

Weis jetzt nicht, ob der einfach so ungenau ist, oder was am Code nicht 
stimmt. Konnte nichts finden, was das Problem erklären könnte.

Benutze die 1,1V interne Referenz und die Differenzielle bipolare 
Messung auf ADC0 und ADC1 mit einfacher Verstärkung. Das wichtigste vom 
Code:

Code Offsetmessung:
1
ADMUX   =   0x88;
2
ADCSRB  |=    0x80;
3
ADCSRA   =  (1<<ADPS1)
4
       |  (1<<ADPS0)
5
        |   (1<<ADEN)
6
       |  (1<<ADSC);
7
while ( ADCSRA & (1<<ADSC));
8
offset_u  =   ADCW;
9
ADCSRA   |=  (1<<ADSC);
10
while(ADCSRA & (1<<ADSC));
11
offset_u  =   ADCW;
12
ADMUX    =   0x00;
13
ADCSRA  &= ~(1<<ADEN); 
14
if (offset_u >=0x0200){offset_u |= 0xFE00;}
15
offset_u= (-offset_u);

Code Spannungsmessung:
1
ADMUX   =   0x8A;
2
ADCSRB  |=    0x80;
3
ADCSRA   =  (1<<ADPS1)
4
       |  (1<<ADPS0)
5
        |   (1<<ADEN)
6
       |  (1<<ADSC);
7
while ( ADCSRA & (1<<ADSC));
8
temp  =   ADCW;
9
ADCSRA   |=  (1<<ADSC);
10
while(ADCSRA & (1<<ADSC));
11
temp  =   ADCW;
12
ADMUX    =   0x00;
13
ADCSRA  &= ~(1<<ADEN); 
14
if (temp >=0x0200)
15
{
16
    temp |= 0xFE00;  
17
}
18
temp += offset_u;
19
temp= -temp;



Vieleicht hat von euch jemand ne Idee oder ne Lösung zu dem Problem.

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