Archiv verlassen und diese Seite im Standarddesign anzeigen : noch 2 Lichtsensoren
TrainMen
06.08.2009, 00:36
Hi Leute,
um meinen RP6 nach hellste Seite suchen zu lassen, habe ich bis jetzt immer eine 180 Grad Drehung machen lassen und die Werte verglichen.
Jetzt habe ich mal die Lichtsensoren laut Schaltplan nachgebaut und am Heck angebracht. Abfragen will ich die zuerst mal mit den beiden ADC 0 und 1. Dazu gleich noch eine Frage: Sollte ich die beiden Ports nun noch mit Kondensator und Elkos bestücken ?
Ob ja oder nein, wie löte ich die eigentlich an ? Die Werte sind ja im HB bekannt.
So und jetzt die Software.
Wie frage ich denn jetzt die Sensoren ab ? die Hauseigenen frage ich z.B. mit "adcLSL" ab, kann ich denn jetzt einfach mit "adc0" abfragen. ADC0+1 sind auf Eingang geschaltet.
Ich hoffe ja am WE wenn ich wieder zuhause alles testen zu können.
Trainmen
radbruch
06.08.2009, 01:46
Hallo
Die Kondensatoren sollen die Spannung stüzen wenn am ADC0/1 hohe Belastungen auftreten sollten. Das ist bei deiner Erweiterung nicht der Fall: Auf die Kondensatoren kannst du verzichten.
Mit readADC(Kanal) kann man die ADC-Pins einlesen.
Gruß
mic
TrainMen
06.08.2009, 14:32
Hallo,
ok, in diesen Fall brauche ich keine Kondensatoren. Aber ich weiß immer noch nicht, wie ich die anlöte wenn ich welche brauchte (z.B Sharp..)
und zur Software
Mit readADC(Kanal)
ja das dachte ich mir schon, nur ist es ja viel mehr programmieraufwand da ich ja nun den task_RP6System nicht mehr aufrufen soll und nun auch noch die Hauseigenen mit readADC() auslesen muß.
wie schon am Anfang bemerkt,habe ich jetzt keine Hardware hier und lese nur die Seiten rauf und runter und kann hier nichts testen.
Deshab mal diesen Gedanken. Ich brauchte doch eigentlich die AD0+1 garnicht auslesen. Nachdem ich die beiden Ports auf Eingang habe und task_RP6System aufrufen werden doch alle 7 Kanäle abgefragt. Richtig ?Ich geh mal davon aus der Robot tut nichts anderes.
Trainmen
radbruch
06.08.2009, 15:34
Selbstverständlich kannst du auch das (nicht blokierende) Task-System des RP6 verwenden. Die aktuellen (=zuletzt gesampelten) Werte von ADC0/ADC1 stehen dann in den Variablen adc0 und adc1.
TrainMen
14.08.2009, 23:11
hi Leute,
ich habe jetzt meine zusätzlichen LDR angebaut und lese sie auch ein, werte sie aus und alles funktioniert.
Jetzt habe ich einen PCF8591 und will nur die Ports nutzen.
Frage: Ich habe die Pins 11-15 nicht angelötet. Richtig ?????
um die Port nun zu testen habe ich mir das Bsp RP6Base_I2CMaster_02
genommen. Ich bekomme aber auf allen 4 nur eine Wert von 128.
Ob ich nun die LDR dran hab oder nicht. Nur beim an und abziehen wechselt es zwischen 128 und 254.
was habe ich vergessen oder falsch gemacht ?
Trainmen
TrainMen
15.08.2009, 12:28
hi,
also meine Info das man die Pins 11-15 nicht braucht war schon mal Falsch, man sollte eben nicht alles glauben.
Funktionieren tut es aber immer noch nicht.
Ich bekomme zwar ohne LDR jetzt nur noch eine 0 zurück . Wenn ich jetzt die beiden Kabel auf 0 und 1 stecke. Bekomme ich folgende Ausgabe.
LDR1:241 | LDR2:238 | LDR3:146 | LDR4:102
obwohl auf 2(LDR3) und 3(LDR4) ja nichts steckt, aber das muß ja nichts bedeuten da ja die Hauseigenen auch Werte ausgeben obwohl da nichts dran hängt. Die Hauseigenen melden aber bei gleichem Licht.
LDR V1:867 | LDR V2:890 | LDR H3:486 | LDR H4:399
Wieso ist das so ???
Trainmen
TrainMen
15.08.2009, 12:51
Hi ich schon wieder,
also das ich ja diese niedrigen Werte bekomme, liegt ja auch daran das ich nur eine 8 Bit Variabel habe und so ja bloss bis 255 komme.
Also habe ich mal eine 16 Bit Variable genommen. Abgesehen davon das ich eine Warnung von WinAVR bekomme ich nur unsinn.
LDR1:-27664 | LDR2:102 | LDR3:1 | LDR4:8322
Hier mal der Code:
void task_ext_LDRs(void)
{
uint8_t i=0; // Laufvariabel
if (i<5)
{
// Configure PCF8591: Ext. Output on + auto increment:
I2CTWI_transmitByte(PCF8591_4LDRS_ADR, 0b01000100 );
// Read the data:
uint8_t results[6];
I2CTWI_readBytes(PCF8591_4LDRS_ADR,results,5);
// Byte 0 contains last conversion result - thus we read 5 bytes,
// skip byte 0 and output only results[1] to results[4]:
writeString_P(" | LDR1:"); writeInteger(results[1], DEC);
writeString_P(" | LDR2:"); writeInteger(results[2], DEC);
writeString_P(" | LDR3:"); writeInteger(results[3], DEC);
writeString_P(" | LDR4:"); writeInteger(results[4], DEC);
writeChar('\n');
i++;
}
}
Wie geschrieben will ich zusätzliche LDR mit dem PCF8591 einlesen und mit den Hauseigenen vergleichen
Trainmen
021aet04
15.08.2009, 17:43
LDR musst du lesen, du hast aber den Befehl "writestring", könnte das der Fehler sein?
TrainMen
16.08.2009, 09:25
Hi,
ne das ist schon richtig, writestring gibt mir doch die Variable aus die ich mit readbyte eingelesen habe.
Trainmen
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.