Habs mitlerweile raus.
Hab jetzt denn:
http://www.conrad.de/goto.php?artikel=502358
reagiert sehr schnell.
Anschluß: +5v ----- Sensor ----- ADC ----- Wiederstand ----- GND
Wiederstand hab ich 5kOhm verwendet
Programm (nicht das beste geht aber) für M32 mit LCD 2Zeilig:
vk = ((adc2 -252)/(float)10.8);Code:uint16_t adc2 = readADC(ADC_2); //Read ADC Channel 2, Temperatur messen, //+5v ----- Sensor ----- ADC ----- Wiederstand ----- GND uint16_t vk ;// vor dem Komma uint16_t nk ;// nach dem Komma uint16_t cvk ; vk = ((adc2 -252)/(float)10.8);//Faktor 10.8 pro °C, float für Kommazahl switch(vk) { case 8: cvk = 8 ; break; case 9: cvk = 9 ; break; case 10: cvk = 10 ; break; case 11: cvk = 11 ; break; case 12: cvk = 12 ; break; case 13: cvk = 13 ; break; case 14: cvk = 14 ; break; case 15: cvk = 15 ; break; case 16: cvk = 16 ; break; case 17: cvk = 17 ; break; case 18: cvk = 18 ; break; case 19: cvk = 19 ; break; case 20: cvk = 20 ; break; case 21: cvk = 21 ; break; case 22: cvk = 22 ; break; case 23: cvk = 23 ; break; case 24: cvk = 24 ; break; case 25: cvk = 25 ; break; case 26: cvk = 26 ; break; case 27: cvk = 27 ; break; case 28: cvk = 28 ; break; case 29: cvk = 29 ; break; case 30: cvk = 30 ; break; case 31: cvk = 31 ; break; case 32: cvk = 32 ; break; case 33: cvk = 33 ; break; case 34: cvk = 34 ; break; case 35: cvk = 35 ; break; case 36: cvk = 36 ; break; case 37: cvk = 37 ; break; case 38: cvk = 38 ; break; case 39: cvk = 39 ; break; case 40: cvk = 40 ; break; case 41: cvk = 41 ; break; case 42: cvk = 42 ; break; case 43: cvk = 43 ; break; case 44: cvk = 44 ; break; case 45: cvk = 45 ; break; // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat: default : cvk = 0 ; break; //einfach so } nk = ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8 setCursorPosLCD(1, 9);// Cursor setzen 2.Zeile nach der 9.Stelle writeIntegerLengthLCD(vk, DEC, 2); writeCharLCD(','); writeIntegerLengthLCD(nk, DEC, 1); writeCharLCD('ß'); writeCharLCD('C');
252 Wert ermittelt für 0°C
float oder double für die Kommazahl, geht vielleich auch ohne
21,1°C = ((480 -252)/(float)10.8)
Auf dem LCD wird aber nur 21°C ausgegeben, deswegen:
switch(vk) case 8: cvk = 8 ; break; u.s.w. für die berechnung
der Nachkommastelle.
Es gibt bessere Varianten die waren mir aber zu hoch, mit intoa ?????
Ich will eh nur 15 bis 40°C messen(Terrarium).
nk= ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8
1 =((((480 -252)/ (float)10.8))-21)*10 ;//10.8
cvk = 21 aus: switch(vk)
writeIntegerLengthLCD(nk, DEC, 1);
1 für eine Nachkommastelle 2 = 21,39°C z.B
Versuch das mal, ansonsten bei der Suche eingeben:
wiederstand and messen
Komplette Programm(Lampensteuerung/Beregnung/Wärme kommt noch):
viel Spaß beim probierenCode:#include "RP6ControlLib.h" // The RP6 Control Library. // Always needs to be included! int main(void) { initRP6Control(); // Always call this first! The Processor will not work // correctly otherwise. initLCD(); setLEDs(0b0000); showScreenLCD("################", "################"); mSleep(2000); showScreenLCD(" Terra ", " Control "); mSleep(2000); clearLCD(); // Clear the whole LCD Screen DDRA &= ~ADC2; startStopwatch1(); // Stopwatch1 starten!---Uhr--- startStopwatch2(); // Stopwatch2 starten! int16_t time_sek = 1; int16_t time_min = 25; int16_t time_std = 18; int16_t time_day = 2; int16_t time_kw = 37; int16_t time_kwmax = 53; int16_t time_jahr = 2009; while (true) { //___________________Uhr Anfang___________________ if(getStopwatch1() >= 906) // 909 = 1sekunde passend einstellen { time_sek = time_sek + 1; if (time_sek == 60) {time_sek = 0; time_min = time_min + 1;} if (time_min == 60) {time_min = 0; time_std = time_std + 1;} if (time_std == 24) {time_std = 0; time_day = time_day + 1;} if (time_day == 8) {time_day = 0; time_kw = time_kw + 1;} if (time_kw == time_kwmax) {time_kw = 0; time_jahr = time_jahr + 1;} setStopwatch1(0); } switch(time_jahr) { case 2009: time_kwmax = 53; break; case 2010: time_kwmax = 52; break; case 2011: time_kwmax = 52; break; case 2012: time_kwmax = 52; break; case 2013: time_kwmax = 52; break; case 2014: time_kwmax = 52; break; case 2015: time_kwmax = 53; break; case 2016: time_kwmax = 52; break; case 2017: time_kwmax = 52; break; case 2018: time_kwmax = 52; break; case 2019: time_kwmax = 52; break; case 2020: time_kwmax = 53; break; // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat: default : time_kwmax = 52; break; } // uint8_t key = getPressedKeyNumber(); if(key) // If a key is pressed... (key != 0) { uint8_t key_adc = readADC(ADC_KEYPAD); while(getPressedKeyNumber()); switch(key) { case 1: //Taster1 Stunde verstellen { time_std = time_std + 1; if (time_std >=24) { time_std = 0; } } break; case 2: //Minuten { time_min = time_min + 1; if (time_min >=60) { time_min = 0; } } break; case 3: //Sekunde { time_sek = 0; } break; case 4: //Kalenderwoche { time_kw = time_kw + 1; if (time_kw >=time_kwmax) { time_kw = 0; } } break; case 5: // break; } } // 4 Sekunden am Tag dazu passend Einstellen if ((time_std == 0) && (time_min == 0) && (time_sek == 0)) { time_sek = time_sek + 4; } setCursorPosLCD(0, 0); writeCharLCD('k'); writeCharLCD('w'); writeCharLCD(':'); writeIntegerLengthLCD(time_kw, DEC, 2); writeCharLCD(' '); writeIntegerLengthLCD(time_std, DEC, 2); writeCharLCD(':'); writeIntegerLengthLCD(time_min, DEC, 2); writeCharLCD(':'); writeIntegerLengthLCD(time_sek, DEC, 2); writeCharLCD(' '); //______________Uhr Ende____________________________________________________ if(getStopwatch2() > 800) { setLEDs(0b0001); uint16_t adc2 = readADC(ADC_2); //Read ADC Channel 2, Temperatur messen, //+5v ----- Sensor ----- ADC ----- Wiederstand ----- GND uint16_t vk ;// vor dem Komma uint16_t nk ;// nach dem Komma uint16_t cvk ; vk = ((adc2 -252)/(float)10.8);//Faktor 10.8 pro °C, float für Kommazahl switch(vk) { case 8: cvk = 8 ; break; case 9: cvk = 9 ; break; case 10: cvk = 10 ; break; case 11: cvk = 11 ; break; case 12: cvk = 12 ; break; case 13: cvk = 13 ; break; case 14: cvk = 14 ; break; case 15: cvk = 15 ; break; case 16: cvk = 16 ; break; case 17: cvk = 17 ; break; case 18: cvk = 18 ; break; case 19: cvk = 19 ; break; case 20: cvk = 20 ; break; case 21: cvk = 21 ; break; case 22: cvk = 22 ; break; case 23: cvk = 23 ; break; case 24: cvk = 24 ; break; case 25: cvk = 25 ; break; case 26: cvk = 26 ; break; case 27: cvk = 27 ; break; case 28: cvk = 28 ; break; case 29: cvk = 29 ; break; case 30: cvk = 30 ; break; case 31: cvk = 31 ; break; case 32: cvk = 32 ; break; case 33: cvk = 33 ; break; case 34: cvk = 34 ; break; case 35: cvk = 35 ; break; case 36: cvk = 36 ; break; case 37: cvk = 37 ; break; case 38: cvk = 38 ; break; case 39: cvk = 39 ; break; case 40: cvk = 40 ; break; case 41: cvk = 41 ; break; case 42: cvk = 42 ; break; case 43: cvk = 43 ; break; case 44: cvk = 44 ; break; case 45: cvk = 45 ; break; // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat: default : cvk = 0 ; break; //einfach so } nk = ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8 setCursorPosLCD(1, 9); writeIntegerLengthLCD(vk, DEC, 2); writeCharLCD(','); writeIntegerLengthLCD(nk, DEC, 1); writeCharLCD('ß'); writeCharLCD('C'); setLEDs(0b0000); setStopwatch2(0); // Stopwatch1 auf 0 zurücksetzen } } return 0; }






Zitieren

Lesezeichen