Guten Abend Zusammen, ich baue zur zeit einen Mobilen Roboter der nun auch noch einer linie folgen soll. Ich programmiere mit assembler, verwende den atmega 48 (plus den l293d, für die motoren) und das AVR studio 4. Als Basis habe ich den ARX- CH 09 verwendet. Der schaltplan für die motoren befindet sich im anhang. Per pwm hab ich nun es nun programmiert, dass mein roboter kurven fahren kann. Das programm hier: .include "m48def.inc" .def temp1 = r17 .def counter = r16 .equ XTAL = 1000000 init: ldi temp1, HIGH(RAMEND) ; Stackpointer initialisieren out SPH, temp1 ldi temp1, LOW(RAMEND) out SPL, temp1 ; Port B auf Ausgang ldi temp1, 0xFF out DDRB, temp1 out DDRC, temp1 ldi temp1, 0b00101000 out PORTC, temp1 ; ; Timer 1 einstellen ; ; Modus 14: ; Fast PWM, Top von ICR1 ; ; WGM13 WGM12 WGM11 WGM10 ; 1 1 1 0 ; ; Timer Vorteiler: 4096???? ; CS12 CS11 CS10 ; 0 1 0 ; ; Steuerung der Ausgangsports: Set at BOTTOM, Clear at match ; COM1A1 COM1A0 COM1B1 COM1B0 ; 1 0 1 0 ; ldi temp1, (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11) | (0<<WGM10) sts TCCR1A, temp1 ldi temp1, (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11)| (0<<CS10) sts TCCR1B, temp1 ; ; den Endwert (TOP) für den Zähler setzen ; der Zähler zählt bis zu diesem Wert ; ldi temp1, HiGH(1000) sts ICR1H, temp1 ldi temp1, LOW(1000) sts ICR1L, temp1 ; ; der Compare Wert ; Wenn der Zähler diesen Wert erreicht, wird mit ; obiger Konfiguration der OC1A Ausgang abgeschaltet ; Sobald der Zähler wieder bei 0 startet, wird der ; Ausgang wieder auf 1 gesetzt linkskurve: ldi temp1, HIGH(800) sts OCR1AH, temp1 ldi temp1, LOW(800) sts OCR1AL, temp1 ldi temp1, HIGH(300) sts OCR1BH, temp1 ldi temp1, LOW(300) sts OCR1BL, temp1 clr temp1 sts TCNT1H, temp1 sts TCNT1L, temp1 ; sei geradeaus: ldi temp1, HIGH(800) sts OCR1AH, temp1 ldi temp1, LOW(800) sts OCR1AL, temp1 ldi temp1, HIGH(800) sts OCR1BH, temp1 ldi temp1, LOW(800) sts OCR1BL, temp1 clr temp1 sts TCNT1H, temp1 sts TCNT1L, temp1 ; sei rechtskurve: ldi temp1, HIGH(300) sts OCR1AH, temp1 ldi temp1, LOW(300) sts OCR1AL, temp1 ldi temp1, HIGH(800) sts OCR1BH, temp1 ldi temp1, LOW(800) sts OCR1BL, temp1 clr temp1 sts TCNT1H, temp1 sts TCNT1L, temp1 ; sei stop: ldi temp1, HIGH(0) sts OCR1AH, temp1 ldi temp1, LOW(0) sts OCR1AL, temp1 ldi temp1, HIGH(0) sts OCR1BH, temp1 ldi temp1, LOW(0) sts OCR1BL, temp1 clr temp1 sts TCNT1H, temp1 sts TCNT1L, temp1 ; sei main: rjmp main Mein problem ist nun, dass mein roboter auch noch einer linie folgen soll. Wie ich das jedoch programmiere weis ich überhaupt nicht, da ich ziemlich nue bin hier. Ich hätte es mit zwei phototransistoren gemacht, plus einem led dass für licht unter dem roboter sorgt. Aber wo ich diese phototransistoren anschliesen muss usw. weis ich überhaupt nicht. Über hilfe würde ich mich sehr freuen. schönen abend noch.
Tobias schrieb: > Aber wo ich diese > phototransistoren anschliesen muss usw. weis ich überhaupt nicht. Sinnvollerweise an einem ADC-Eingang. Am einfachsten baust du einen Spannungsteiler auf: +5V --- Widerstand ----o----- C Fototransistor E --- Masse 0V | ADC-Eingang Und dann einfach mal hier im AVR-Tutorial das Kapitel über den AD-Wandler lesen. :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
