Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Die Pins von ADC0 und ADC1 sollten nach einem Reset immer noch als Eingang konfiguriert sein, deshalb kannst du die Werte ohne zusätzliches Setup einlesen. Allerdings benötigst du dazu einen externen Spannungsteiler (gebildet aus dem Fotowiderstand und einem zusätzlichen Reihenwiderstand). Beispielhaft die Beschaltung der orginalen LDRs beim RP6(V1):
Bild hier
Eine einfachere Lösung wäre den LDR direkt zwischen Pin und GND anzuschliesen und den internen PullUp des Pins zu aktivieren. Ob das funktioniert kann ich nicht sagen. Der interne Pullup hat ca. 20-50 kOhm und wird für ADC0 und ADC1 so aktiviert:
Code:
DDRA &= ~0b00000011; // Datenrichtung ADC0 und ADC1 ist Eingang
PORTA |= 0b00000011; // interne PullUps aktivieren
Bei der ersten Lösung steigt der eingelesene Wert mit der Helligkeit, bei der zweiten Lösung sinkt er bei steigender Helligkeit.
Gruß
mic
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Pin 2 und 3 sind GND und ADC-Pin:
Bild hier
Das wäre dann die Variante mit aktivierten PullUp:
Code:
#include "RP6RobotBaseLib.h"
// Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
{
extern uint8_t mleft_ptmp, mright_ptmp;
if(power_links > 210) power_links = 210;
if(power_rechts > 210) power_rechts = 210;
mleft_power=mleft_ptmp=power_links;
mright_power=mright_ptmp=power_rechts;
OCR1BL = power_links;
OCR1AL = power_rechts;
if(power_links || power_rechts)
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
else
TCCR1A = 0;
}
int main(void)
{
initRobotBase();
DDRA &= ~0b00000011; // Datenrichtung ADC0 und ADC1 ist Eingang
PORTA |= 0b00000011; // interne PullUps aktivieren
while(1)
{
writeInteger(readADC(ADC_ADC0), 10);
writeString_P(" - ");
writeInteger(readADC(ADC_ADC1), 10);
writeString_P("\n\r");
if (readADC(ADC_ADC1)) > (readADC(ADC_ADC0))
setLEDs(4);
setMotorPWM(100,50);
}
else
{
setLEDs(32);
setMotorPWM(50,100);
}
mSleep(100);
}
return(0);
}
(ungetestet)
Gruß
mic
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist die Skizze
mein programm habe ich oben schon gepostest Anhang 24023
und das sind meine LDRs http://www.conrad.de/ce/de/product/1...archDetail=005
ich verstehe das einfach nicht
so hier noch ma das Programm
// Einfaches Linienfolgen mit RP6-Sensoren (Test der Funktion 2) 6.3.2008 mic
#include "RP6RobotBaseLib.h"
// Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
{
extern uint8_t mleft_ptmp, mright_ptmp;
if(power_links > 210) power_links = 210;
if(power_rechts > 210) power_rechts = 210;
mleft_power=mleft_ptmp=power_links;
mright_power=mright_ptmp=power_rechts;
OCR1BL = power_links;
OCR1AL = power_rechts;
if(power_links || power_rechts)
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
else
TCCR1A = 0;
}
int main(void)
{
initRobotBase();
while(1)
{
writeInteger(readADC(ADC_ADC1), 10);
writeString_P(" - ");
writeInteger(readADC(ADC_ADC0), 10);
writeString_P("\n\r");
if (readADC(ADC_ADC1) > readADC(ADC_ADC0))
{
setLEDs(4);
setMotorPWM(100,50);
}
else
{
setLEDs(32);
setMotorPWM(50,100);
}
mSleep(100);
}
return(0);
}