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:
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);
}
Die Ausgabe beim Test mit der Fernbedienung:
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
Ob das allerdings die Bitlängen der gesendeten Codes sind oder die Flanken der 36kHz-Tägerfrequenz kann ich noch nicht sagen.
Gruß
mic
Lesezeichen