tut mir echt leid ich habe das thema 2 mal reingestellt
wie lösche ich es
lg
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
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
tut mir echt leid ich habe das thema 2 mal reingestellt
wie lösche ich es
lg
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
hm s cheiße xD
ich versuch es mal umzutauschen...
könntest du mir solch einen sensor von conrad nennen?
lg honighamster
Mögliche einfache Temperatursensoren sind: LM335, die KTY... Serie. Es geht auch einfach eine Siliziumdiode wie 1N4148.
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
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
Na klasse, ich war natürlich im "toten" Thread:tut mir echt leid ich habe das thema 2 mal reingestellt
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:
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*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.
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:
Ich hoffe das funktioniert so halbwegs.Code:// 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); }
Gruß
mic
[Edit]
Wenn ich die 14 richtig deute: Herzlichen Glückwunsch zum Geburtstag :)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
so hast du richtig gedeutetdanke
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
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:
Die Ausgabe beim Test mit der Fernbedienung:Code:// 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); }
Ob das allerdings die Bitlängen der gesendeten Codes sind oder die Flanken der 36kHz-Tägerfrequenz kann ich noch nicht sagen.Code: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
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen