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:
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);
}
Ich hoffe das funktioniert so halbwegs.
Gruß
mic
[Edit]
Wenn ich die 14 richtig deute: Herzlichen Glückwunsch zum Geburtstag :)
Lesezeichen