danke und jetzt noch mal zu dem programm wie schreibe ich das jetzt in ein programm habe das schon versucht klappt aber nicht muss ich noch irgewas deklarieren oder muss ich die makefile ändern bin total hilflos.
Danke
Werbung
danke und jetzt noch mal zu dem programm wie schreibe ich das jetzt in ein programm habe das schon versucht klappt aber nicht muss ich noch irgewas deklarieren oder muss ich die makefile ändern bin total hilflos.
Danke
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):
![]()
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:
Bei der ersten Lösung steigt der eingelesene Wert mit der Helligkeit, bei der zweiten Lösung sinkt er bei steigender Helligkeit.Code:DDRA &= ~0b00000011; // Datenrichtung ADC0 und ADC1 ist Eingang PORTA |= 0b00000011; // interne PullUps aktivieren
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
danke und welchle libarys muss ich jetzt nehmen um diesen befehl zu schreiben zu können und was muss ich deklarieren? Muss ich was in der Makefile ändern? und kann mir jeman noch mal den ganzen programmcode geben.
Danke
Geändert von Marian Otte (12.12.2012 um 18:49 Uhr)
Du hast immer noch nicht beschrieben, wie genau du die LDR angeschlossen hast. Zusätzliche Libs oder Änderungen im Makefile brauchst du aber bei keinem der Ansätze. Das passende Programm hast du ja schon gepostet.
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
und was muss ich jetz da einfügen? Die LDR's habe ich direkt an die adc ports angeschlossen an pin 3 und 2.
Danke
Marian Otte
Hallo
Pin 2 und 3 sind GND und ADC-Pin:
![]()
Das wäre dann die Variante mit aktivierten PullUp:
(ungetestet)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); }
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
vielen danke werde es sofort testen
- - - Aktualisiert - - -
kann man den wert des pullups auch ändern weil der roboter erkennt nur wenn ich meinen finger direkt vor den sensor halte und ihn damit verdunkle der wert liegt jetzt bei 1023
und bei deaktiviertem pull up sind die Werte auf schwarzem und weißen papier identisch WARUM?
und wenn diesen befehl zum einschalten des Pins int1 nehemen will sagt der mir das ich erst deklarieren muss aber wie?
DDRC |= IO_PA4;
PORTC |= IO_PA4;
kann mir jemand bitte schnell helfen der Roboter muss nähmlich morgen der linie nach fahren können
Danke
Marian Otte
Geändert von Marian Otte (13.12.2012 um 18:11 Uhr)
Lesezeichen