Forum: Mikrocontroller und Digitale Elektronik Temperatursensor AVR Butterfly auswerten


von Marcus H. (Firma: Student) (stromberg001)


Lesenswert?

N'Abend Leute,

ich versuche gerade verzweifelt den im AVR Butterfly integrierten 
Temperatursensor für eine Temperaturmessung zu benutzen. Hat das 
schonmal jemand gemacht? Tu mich da sehr sehr schwer.
Nach meinem Code berrechnet er mir, dass in meiner Wohnung -52 °C sind. 
Habe die Temperaturgleichung aus dem Butterfly User Guide verwendet. 
Kann mir jmd helfen, so dass ich die richtige Temperatur angezeigt 
bekomme??
1
//---------------------------------------------------Temperaturerfassung Innen / Tempsensor Butterfly-------------------------------------------------------//
2
3
cli();
4
5
TempIn = 0;
6
PORTF = 0x11;  //Pull-up-Widerstände deaktiviert
7
8
ADCW=0;
9
ADMUX  |= (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0); //ReferenzTempOutLCD
10
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (0<<ADATE) | (0<<ADIF)| (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // Teilungsfaktor = 16
11
12
13
ADCSRA |= (1<<ADSC);
14
while(ADCSRA & (1<<ADSC)){          // Dummy Readout, um AD Wandlung "warm laufen zu lassen
15
                      
16
            }
17
ADwert = ADCW;                // ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen.
18
Delay(1);
19
y=0;
20
ADwert=0;
21
while (y<=4){                // Eigentliche Messung ist Mittelwert aus 5 aufeinanderfolgenden
22
  y++;
23
  ADCSRA |= (1<<ADSC);          //Auslösen einer ADC-Wandlung
24
  while(ADCSRA & (1<<ADSC)){
25
                      //Auf Ergebnis warten
26
               }
27
  ADwert = ADwert + ADCW;          //Auslesen des ADC-Wertes
28
            
29
      }
30
31
Digital = ADwert/5;
32
LN = log(Digital/(1024-Digital))/log(2.7182);  // Logarithmus Naturales
33
Fahrenheit = (4250/(LN+14.261)) - 273;      // Temperaturgleichung siehe Butterfly User Guide S.22    
34
TempIn = (Fahrenheit-32)/1.8;
35
itoa(TempIn,TempInLCD,10);          // ADCW in String wandeln
36
Delay(5);
37
38
ADwert =0;                  //Rücksetzen der Auslesevariable
39
ADCSRA = 0x00;                //Rücksetzen des ADC
40
ADMUX = 0x00;                //Rücksetzen des ADC
41
42
sei();

von STK500-Besitzer (Gast)


Lesenswert?

>while(ADCSRA & (1<<ADSC)){

Mach das (immer) so:
while(ADCSRA & (1<<ADSC));
{...

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.