Archiv verlassen und diese Seite im Standarddesign anzeigen : Temparatur Sensor Anschluss
honighamster
15.04.2009, 20:18
So :)
ich habe mal wieder eine kleine frage...
Ich möchte einen temperatur sensor anschließen um mehr erfahrung zu sammeln.
Vielleicht war ich ein bisschen voreilig das ich mir den sensor schon gekauft habe aber so ist das nun mal :D
Es ist dieser von Conrad: SMT 160-30 TEMPERATUR-SENSOR TO-92
Ich hatte vor ihn an den ADC0 oder ADC1 anzuschließen.
ich denke das es eingentlich keine probleme beriten sollte nur ich wurde misstrauisch das im datenblatt davon die rede war das der plus plo,der ja auf dem RP6 mit vdd gekennzeichnet ist,Vcc oder so heißt.
Nun da ich den Sensor nicht kapput machen möchte frage euch ob das egal ist oder ob ich einen widerstandt dazwischen schalten muss.
Vielen dank im vorraus.
Libe Grüße Anton
honighamster
15.04.2009, 20:21
tut mir echt leid ich habe das thema 2 mal reingestellt :(
wie lösche ich es
lg
hardware.bas
15.04.2009, 22:02
Der SMT 160-30 könnte an die Mikrocontrollerbetriebsspannung geschaltet
werden, da 5V vollkommen im Bereich seiner Daten liegen. Könnte.... weil
dieser Baustein nicht dafür gedacht ist, an einen AD-Eingang geschaltet
zu werden. Am AD-Eingang reicht bereits ein Temperatursensor, welcher
eine zur Temperatur linearisierte Ausgangsspannung abgibt. Diese gibst
mit guter Genauigkeit bereits an 2,50 Euro. Sogar billigste Sensoren für
ein paar Cent können angeschlossen werden, wenn man softwaremässig
linearisiert. Der SMT 160-30 hat bereits einen AD-Wandler integriert und gibt
ein digitales Signal aus. Man könnte das natürlich an einen Digitalport des
Mikrocontrollers anschliessen. müsste dann jedoch dessen Signal
warscheinlich mit großen Aufwand decodieren. Er ist eigentlich daher für
diese Zwecke - tut mir leid, das zu schreiben - absolut unsinnig. VG Micha
honighamster
15.04.2009, 22:24
hm s cheiße xD
ich versuch es mal umzutauschen...
könntest du mir solch einen sensor von conrad nennen?
lg honighamster
Besserwessi
15.04.2009, 22:57
Mögliche einfache Temperatursensoren sind: LM335, die KTY... Serie. Es geht auch einfach eine Siliziumdiode wie 1N4148.
hardware.bas
15.04.2009, 22:57
Hatte vor kurzem einen verbaut und an eine C-Control angeschlossen,
das Ding hatte ich zwar von Reichelt, muss aber morgen in die Unterlagen
schaun, was das genau für ein Typ war und schreib es dann hier auf.
Was ist das eigentlich für ein Mikrocontroller, wo der Sensor ran soll. 8 Bit
oder 18 Bit Auflösung? Ist nicht ganz unwichtig für die Auflösung.
VG Micha
hardware.bas
15.04.2009, 23:01
Sehe gerade, was BesserWessi geschrieben hat. Habe beide Sensortypen
schon beim Wickel gehabt. Der LM335 gibt eine lineare Spannung raus,
die KTY-Serie müsste man jedoch mit konstantem Strom betreiben, daher
empfehle ich ERSTEREN. VG Micha
radbruch
16.04.2009, 00:42
tut mir echt leid ich habe das thema 2 mal reingestellt
Na klasse, ich war natürlich im "toten" Thread:
Hallo
Erstmal vorweg: Du erleichtest uns das Leben wenn du bei Artikeln aus einem Onlineshop eine direkte URL mitlieferst, am Besten noch in url-Tags eingepackt falls das Forum nicht selbständig einen Link daraus macht. Beim C würde das etwa so aussehen:
http://conrad.de/goto.php?artikel=183093
Nun zu deinem Sensor: Irgendwie hast du ein gutes Händchen für knifflige Aufgaben. In der Kurzbeschreibung steht doch deutlich:
Der SMT 160-30 besteht aus einem temperaturabhängigen Halbleiter-Element und einem A/D-Wandler. Der Sensor liefert ein pulsbreitenmoduliertes Rechtecksignal mit der Amplitude der Versorgungsspannung (4,75 - 7 V/DC) und einer Frequenz im Bereich von 1 bis 4 kHz. Das Tastverhältnis ist proportional zur Temperatur.
Das bedeutet, er wandelt intern die Temperatur in ein Rechtecksignal dessen Tastverhältniss von der Temperatur abhängig ist. Da kannst du mit ADC0/1 am RP6 nichts erreichen denn du mußt die Längen der High- und Lowzeiten des Signals messen. Das geht zwar auch mit den analogen Eingängen weil sie zusätzlich auch wie digitale Eingänge funktionieren, aber die Auswertung ist deutlich komplizierter als bei einem einfachen PTC/NTC mit Vorwiderstand. Warum fragst du nicht einfach mal bevor du was kaufst? *grummel*
Normalerweise wertet man solche Sensoren per Interrupt und Timer/Counter aus, weil man messen muß, wie lange das Signal High und wie lange es Low ist, bei 1-4kHz sind das jeweils 1000-4000 Highs und 1000-4000 Lows pro Sekunde! Ein einfacherer Ansatz wäre aber vielleicht folgender:
Den Sensor kann man direkt an ADC0 anschliessen, Vcc des Sensors an Vdd des RP6, GND an GND und OUTPUT an ADC0. Jetzt kannst du im Wechsel die Highs and Lows messen und die Messwerte zum Terminal senden:
// Temperatursensor auswerten an ADC0 15.4.09 mic
// Nicht getestet weil ich keinen passenden Sensor habe!
// https://www.roboternetz.de/phpBB2/viewtopic.php?t=47549
#include "RP6RobotBaseLib.h"
int main(void)
{
uint16_t temp; // Messwert
initRobotBase(); // Library initialisieren
DDRA &= ~1; // ADC0 ist PA0 und wird als Eingang verwendet
PORTA &= ~1; // und der interne PullUp wird nicht benötigt
while(1)
{
// Zuerst messsen wir die Länge eines High-Pegels
temp=0; // Messwert mit 0 vorbelegen
while(!(PINA & 1)); // erstmal abwarten bis der Pegel nicht mehr Low ist
while(PINA & 1) temp++; // Solange ein High anliegt wird er Zählwert erhöht
writeString("\nHigh: "); // Den Wert zum Terminal senden
writeInteger(temp, 10);
// und dann die Länge eines Lows
temp=0; // Messwert wieder mit 0 vorbelegen
while(PINA & 1); // nun abwarten bis der Pegel nicht mehr High ist
while(!(PINA & 1)) temp++; // diesmal solange ein Low anliegt Zählwert erhöhen
writeString(" Low: "); // und auch diesen Wert zum Terminal senden
writeInteger(temp, 10);
} // endlos bis Akkus leer
return(0);
}
Ich hoffe das funktioniert so halbwegs.
Gruß
mic
[Edit]
Wenn ich die 14 richtig deute: Herzlichen Glückwunsch zum Geburtstag :)
honighamster
16.04.2009, 10:29
so hast du richtig gedeutet :D danke
tut mir leid das du nochmal chreiben musstest
@radbruch ich bin mir nicht sicher aber ich glaube du hast mal gesagt in einem thema hier das die Beschriftung des ADC0 und 1 falsch ist.
Im moment würde ich vdd zu der zahl eins auf dem board und gnd zu 2 zuordnen ADC0 wäre dann 3.
Ist das richtig?
ich werde es heute abend ausprobieren
@hardware und besserwessi
ich finde nur den LM335 Z bei conrad und den meint ihr wohl nicht oder?
wenn er eine Spannung ausgibt müsste ich noch einen widerstandt dazwischen bauen ist das richtig
radbruch
16.04.2009, 15:01
Hallo
Dank Copy&Paste brauchte ich meinen Beitrag natürlich nicht erneut einzutippen ;)
Die Beschriftungen der Erweiterungspads ADC0 und ADC1 auf der RP6-Platine sind richtig. Es ist die Reihenfolge der Kontakte die nicht mit den Steckern eines Servos konform sind (Vcc und GND sind getauscht). Aber das dürfte dich beim Anschluss deines Sensors nicht sonderlich stören.
Ich habe das kleine Testprogramm etwas geändert:
// Temperatursensor auswerten an ADC0 (mit Timeout) 16.4.09 mic
// Nicht getestet weil ich keinen passenden Sensor habe!
// https://www.roboternetz.de/phpBB2/viewtopic.php?t=47549
// Wenn als Wert 0 ausgegeben wird läuft die Zählvariable über
// oder der Sensor sendet nichts.
// Damit kann man alle möglichen Pulslängen messen, z.B. eine IR-Fernbedienung
#include "RP6RobotBaseLib.h"
// Messung am ADC0
//#define inputpin (PINA & 1) // ADC0
//#define init_inputpin {DDRA &= ~1; PORTA &= ~1;} // Eingang ohne PullUp
// Messung am linken Lichtsensor (LS_L)
#define inputpin (PINA & LS_L) // linker Lichtsensor
#define init_inputpin {DDRA &= ~LS_L; PORTA &= ~LS_L;} // Eingang ohne PullUp
int main(void)
{
uint16_t temp_high, temp_low; // Messwerte
initRobotBase(); // Library initialisieren
init_inputpin // inputpin initialisieren
// Zum Testen des LS_L die // entfernen. Die LEDs sollten bei heller Umgebung leuchten
// Wenn man den Lichtsensor abdeckt sollten sie ausgehen. Wenn man eine Fernbedienung
// mit unter die Abdeckung hält sollten die LEDs blinken wenn man auf die Fernbedienung
// drückt. Alternativ kann man auch das komplette Zimmer abdunkeln ;)
//
// DDRA &= ~LS_L; PORTA &= ~LS_L;
// while(1) if(PINA & LS_L) setLEDs(63); else setLEDs(0);
while(1)
{
// Zuerst messsen wir die Länge eines High-Pegels
// Maximal 65535 while-Zyklen auf Start von High warten
temp_high=0;
while(!inputpin && ++temp_high); // temp_high als timeout
// Jetzt die Länge des Highs messen
// (0 im Ergebniss bedeutet kein Sensor angeschlossen oder Zählerüberlauf)
temp_high=0;
while(inputpin && ++temp_high);
// das High ist zuende, jetzt die Länge des folgenden Lows messen
temp_low=0;
while(!inputpin && ++temp_low);
// und nun beide Werte zum Teminal senden
writeString("\nHigh: ");
writeInteger(temp_high, 10);
writeString(" Low: ");
writeInteger(temp_low, 10);
}
return(0);
}
Die Ausgabe beim Test mit der Fernbedienung:
High: 0 Low: 0
High: -11830 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -8127 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -20614 Low: 0
High: 0 Low: -10045
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -27177 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -10989 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -23550 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 682
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -28077 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -23869 Low: 0
High: 0 Low: -7190
High: 0 Low: 0
High: -5904 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: 0 Low: 0
High: -8998 Low: 9402
High: -25105 Low: 10467
High: 0 Low: 0
Ob das allerdings die Bitlängen der gesendeten Codes sind oder die Flanken der 36kHz-Tägerfrequenz kann ich noch nicht sagen.
Gruß
mic
Besserwessi
16.04.2009, 18:47
Der LM335 wird ähnlich wie eine Zenerdiode beschaltet, also der Sonsor nach Masse und ein Widerstand nach +5V für die Versorgung. Eventuell noch ein Poti dazu für den Abgleich, wobei man den aber auch in Software machen kann. Etwas unpraktisch da ei ist, dass die Spannung mit rund 2,9 V größer als die interne Ref. ist, und man daher Vcc als Referenz nutzen müßte, oder einen zusätzlichen Spannungsteiler braucht.
Die KTY... Sensoren werden ganz ähnlich betrieben. Wenn man den Wiederstand passend wählt, wird die Kennlinie (Spannung als Funktion der Temperatur) auch relativ linear. Die Referenz des AD Wandlers sollte dabei im Idealfall von der Vorsorgung abgeleitetet sein (Spannungsteiler oder notfalls Vcc direkt).
honighamster
17.04.2009, 12:59
ich denke das ich den irgendwie kaputt bekommen habe weil der liefert bei obrigen test nichts und beim unteren 0 :(
hardware.bas
17.04.2009, 13:11
Um den SMT 160-30 TEMPERATUR-SENSOR TO-92, welcher allerdingst für
das beschriebene Projjekt ungeeignet ist, auf Funktion zu testen, reicht es,
den an 5V zu hängen und mit den Ausgang über eine Transistorstufe eine
LED zu betreiben. Diese müsste dan auf Grund der abgegebenen PWM, je
nach Temperatur unterschiedlich hell leuchten. Oder Test mit Oszi direkt
am Ausgang. Vg Micha
oder den mic eingang von der sound karte. und dann mit einem oziprogramm angucken. fals kein Oszi vorhanden ist. oder halt led
radbruch
17.04.2009, 13:48
Das wäre aber schade. Schliesse mal + und - des Gebers an und messe mit dem Multimeter am Ausgang ob was rauskommt. Meine Progrämmchen sind ja nicht getestet, vielleicht habe ich irgendwo noch einen Bug drin oder das Timeing stimmt nicht.
und beim unteren 0Achtung! Beim unteren Programm wird zum Testen der Lichtsensor des RP6 abgefragt! Für den Temperatursensor an ADC0 muss man die Kommentare (//) an den #defines für inputpin und init_inputpin anpassen!
Ihr seid zu schnell, ich komme nicht hinterher ;)
Anstelle des Messgerätes kannst du auch einen Inohr-Kopfhöhrer (vom MP3-Player, vielleicht nicht grad den teuren...) zwischen Ausgang und GND klemmen :)
honighamster
17.04.2009, 18:46
lol
ich bin grad erst 14 geworden und habe nocht nicht mit
zenerdioden, transistorstufen, oszi oder pmw zegs eurfahrung gemacht ^^
da wird das echt schwierig mal eben mit irgendwelche transistorstufen oder so eine led zum leutchten zu bringen
ich hatte mir das eig so vorgestellt das ich einen ADC abfrage der gibt mir einen wert wie bei den Lichtsensoren und den wert muss ich noch umrechnen
ich denke ich bin da noch ein bisschen mit dem was ihr mir empfehlt überfordert und arbeite mich mit anderen sachen an sowas heran
ich bekommen bald einen srf10 zugeschickt und mit dem werde ich dann ein bisschen ausprobieren
in dem gebiet von ansteuern eines i2c sensors habe ich nähmlich alles genügend verstanden :)
@radbruch danke für den tipp mit den // aber das habe ich in dem programm gelesen :)
EDIT:
@radbruch
ich habe die drähte von einem kophörer einmal an gnd und einmal an den ausgang von dem sensor gehalten.der sensor war nur über vdd und gnd mit dem rp6 verbunden.also hing der ausgang des sensors in der luft.dann habe ich den rp6 einfach angeschaltet und die drähte rangehalten.manchmal habe ich ein leises knacken ghört aber sonst nichts :)
das bedeutet doch das er kaputt ist oder?
liebe grüße honighamster
Besserwessi
18.04.2009, 14:10
Wenn man mit dem Kopföhrer nichts hört ist das kein gutes Zeichen für den Temperatursensor. Da sollte eigentlich ein eher hoher Piepton zu höhren sein.
Die Temperatur Sensoren LM335 oder KTY... kann man eigentlich gleich anschließen. Den Sensor zwischen GND und dem AD Eingang. Dazu eine Widerstand von etwa 2,7 KOhm bis 3.3 KOhm vom AD Eingang nach +5V (Vcc). Beim LM335 ist die Ausgangsspannung weitgehend unabhängig vom Widerstandswert und der tatsächlichen Versorgungsspaanung, bei den KTY ... haben die beiden einen Einfluss.
honighamster
18.04.2009, 18:25
super dann versuche ich es doch nochmal mit dem kty denn ich habe einen 3,3 wiederstand hier rum liegen :)
habt ihr gute anschluss ideen?
am besten ohne löten denn dann kann ich es selber machen?
lg honighamster
Besserwessi
18.04.2009, 20:12
Ganz ohne Löten könnte schwierig sein, es sei denn man will den Sensor direkt am Stecker haben. Zur Not könnteman die Verbindungen mit Lüsterklemmen hinkriegen, ist aber nicht ideal.
Die Kennlinie zum Umrechnen der Spannung in Temperatur müßte man sich ggf. aus dem Datenblatt besorgen. Da steht auch drinn welcher widerstand für den Speziellen Sensor die beste Linearität gibt. So kritisch ist die größe aber auch nicht zu sehen. Wenn da 2,8 KOhm angegeben sind, sollte es bei 3.3 KOhm auch noch nicht so schlecht sein.
Hallo Leute,
könnt ihr mir weiterhelfen?
Hab das RP6 Control M32 und einen Temperatursensor das sollte dieser sein:
http://www.conrad.de/goto.php?artikel=181048
(Denn hab ich hier rumliegen, funktionsfähig)
Was ich wissen möchte ist wie schließe ich den richtig an ADC an?
Wie sollte das Programm aussehen, habe mit dem Beispielprogramm
Example_05_IO_ADC experimentiert, ohne Erfolg. ](*,)
Für eure Hilfe wäre ich dankbar.
W-Lan Kabel
07.09.2009, 16:18
ja, das würde mich auch interesieren:
wie liest man den a/d aus?
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:
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):
#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
W-Lan Kabel
08.09.2009, 19:59
das umweltprogramm ist ne tolle idee,
werd ich auch mal bauen/programmieren
Wie wärs mit dem drezahlmesser und nem winrad zur Baufort messung?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.