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();
|