wäre vllt ganz sinnig, wenn du uns auch schreiben könntest um was für einen ir-sensor es sich handeln tut und an welchen ports was hängt ^^
dankö,
Martin
Hallo,
ich bin gerade(schon ein bischen länger) dabei ein Programm zu schreiben, das, wenn der IR-Sensor etwas erkennt der Roboter nach hinten fährt. Mein Problem ist aber, dass er schon beim Start rückwärts fährt. Hier mein Programm, was ist der Fehler ?
Code:$crystal = 8000000 $regfile = "m8def.dat" Dim Result As Word Config Pinb.0 = Output Config Pind.7 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1 Start Adc Do Compare1a = 255 Compare1b = 255 Portb.0 = 1 Portb.1 = 0 Portd.7 = 0 Portb.2 = 1 Result = Getadc(6) If Result > 450 Then Compare1a = 255 Compare1b = 255 Portb.0 = 0 Portb.1 = 1 Portd.7 = 1 Portb.2 = 0 Waitms 1000 Compare1a = 255 Compare1b = 255 Portb.0 = 0 Portb.1 = 1 Portd.7 = 1 Portb.2 = 0 End If Loop End
mfg Jonas
wäre vllt ganz sinnig, wenn du uns auch schreiben könntest um was für einen ir-sensor es sich handeln tut und an welchen ports was hängt ^^
dankö,
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
hi,
sorry, hier die Daten:
Der Sensor ist ein IR-Sensor von Sharp und ist das Model GP2Di2 F 67(das steht auf ihm drauf), er ist an ADC6. Die Motoren sind an pinD7,pinB3 und pinB0, pinB1.
Viele grüße
mfg Jonas
bist du sicher dass das GP2DI2 ist? und nicht sowas wie GP2D12? und was heißt die motoren wären auf pinD7 [...] ?? kannst du das bitte nochmal näher erläutern? hast du die motoren über PWM angesteuert? welcher chip liegt dann dazwischen?
Maddin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Problem:
Du lässt den Bot erst nach vorne fahren, fragst dann den ADC ab. Wenn dieser über 450 ist, dann fährst du rückwärts. Sollte also stimmen.
bleibt offen:
Ist der ADC Wert für den Sensor richtig? Welcher Entfernung entsprechen denn 450?
Probiere es mal so:
Der Abschnitt mit den "waitms 1000" und dem danach ist nicht wichtig. (Das kann man kürzen. Hab ich gemacht.)Code:$crystal = 8000000 $regfile = "m8def.dat" Dim Result As Word Config Pinb.0 = Output Config Pind.7 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Adc = Single , Prescaler = Auto , Reference = Internal Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1 Start Adc Do Compare1a = 255 Compare1b = 255 Portb.0 = 1 Portb.1 = 0 Portd.7 = 0 Portb.2 = 1 Result = Getadc(6) If Result > 450 Then Compare1a = 255 Compare1b = 255 Portb.0 = 0 Portb.1 = 1 Portd.7 = 1 Portb.2 = 0 wait 1 End If Loop End
Und auch kannst du wahrscheinlich die interne Referenzspannung verwenden, da die meisten Sensoren maximal 2,6 Volt liefern. So ist du Auflösung genauer.
jon
Nice to be back after two years
www.roboterfreak.de
Hi,
die Motoren werden über PWM angesteuert (mit dem BA6845). Ja, es kann auch eine 1 sein also GP2D12.
Viele Grüße
P.s: Werde das Prog von Jon gleich testen in ca. 1h
mfg Jonas
Hi,
bei dem Prog. von Jon fährt de Roboter nur gerade aus und fährt nicht rückwärts wenn ein Gegenstand da ist.
Viele Grüße
mfg Jonas
Sind die 450 richtig??
jon
Nice to be back after two years
www.roboterfreak.de
Hi,
der Thread kann gelöscht werden, da der michael (von team-iwan) mir per icq das richtige geschickt hat(danke nochmal). Hier das Prog.:
Viele GrüßeCode:$crystal = 8000000 'interne Oszillatorfrequenz (bereits fertig eingestellt) $regfile = "m8def.dat" 'Definitionsdatei, damit der Compiler weiß, welcher Chip es ist 'AD-Wandler einschalten: Config Adc = Single , Prescaler = Auto , Reference = Internal Start Adc 'Timer für PWM konfigurieren und einschalten: Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1024 Start Timer1 Ddrb = &B00000111 'Datenrichtungsregister PortB (0=Eingang, 1=Ausgang) Ddrd = &B10000000 'Datenrichtungsregister PortD (0=Eingang, 1=Ausgang) Ddrc = &B00000000 Dim Result As Word Dim X As Byte '2 Variablen vom Typ Byte Dim Y As Byte 'also von 0-255 Motor1_dir Alias Portd.7 'Motor1 Richtung Motor2_dir Alias Portb.0 'Motor2 Richtung X = 255 Y = 255 Do 'Schleifenanfang Result = Getadc(6) Pwm1a = X 'Motor1 PWM Pwm1b = Y 'Motor2 PWM If Result > 400 Then Motor1_dir = 0 'Motor1 Richtung wechseln Motor2_dir = 1 'Motor1 Richtung wechseln Else Motor1_dir = 1 Motor2_dir = 1 End If Waitms 10 '10ms warten Loop 'Schleifenende End
mfg Jonas
Ich verstehe das nicht ganz *g*
Wie soll das mit der Richtungsänderung funktionieren??
Du stellst ja nur einen Pin pro Motor um. Was ist mit dem anderen Pin los? Da wird ja nirgends im Programm gesagt ob low oder high.
Sonst: Umständlich geht es auch
jon
Nice to be back after two years
www.roboterfreak.de
Lesezeichen