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:
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');
vk = ((adc2 -252)/(float)10.8);
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):
Code:
#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;
}
viel Spaß beim probieren
Lesezeichen