-
Timer, IR-Sensor !?!?!?!
Hallo,
ich würde gerne ein Programm schreiben das mein Roboter ca.6-8sek rückwärts fährt (die Zeit ist noch unwichtig,PWM auch). Aber irgendwie bekomme ich es nicht hin mit dem Timer, trotz Wiki.
Könnte es mir jemand nochmal erklären ?
Viele Grüße und Vielen Dank
-
Ich würde da keinen Timer verwenden, der eine Variable runterzählt, sondern ein "Wait 6" einfügen.
Im Programmaufbau also so:
Code:
-Configurationen
-Rückwärstfahren
Wait 6
-Anhalten
End
Mit dem Timr müsst ich mich auch erstmal selbst reinarbeiten.
Darauf habe ich aber keinen Bock. :)
Ich hoffe dass ich dir damit auch erstmal etwas helfen konnst.
jon
-
Ok, dann mache ich das so, ist ja leichter.
Aber habe noch ein Prob, mit dem IR Sensor, bei der Robotliga habe ich mir einen gekauft, wie mache ich das mit dem Analog ausgang ?
Also wie muss mein Prog sein das der Atmega8 erkennt wenn ein Gegenstand vor im ist ?
Viele Grüße und Vielen Dank
-
Als erstes Prog für Analog:
Code:
$regfile = "m32def.dat"
$crystal = 1000000
$baud = 1200
Dim Result As Word
Dim Channel As Byte
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Result = Getadc(0)
Print " Count: " ; Result ;
Wait 1
Loop
End
Musst du noch für deinen µC anpassen.
Bei "Getadc(x)" musst du für x den Kanal eingeben, den du abfragen willst.
in der Variablen "Result" wird der ADC-Wert gespeichert. Am besten machst du dir eine Tabelle mit ADC-Wert und Entfernung.
jon
-
Ok, Vielen Dank,
aber wie muss es heisen, das egal wie weit ein Gegenstand entfernt ist mein Roboter z.B. rückwärts fährt ?
Viele Grüße und vielen Dank
-
Ungefähr so:
Wenn Result >=1024 dann fahre rückwärts.
Ganz nah ist 1024 ganz weit weg ist 1.
Was für einen Sensor hast du?
Einen Sharp?
jon
-
Ja einen Sharp für ca.11 Euro, der misst zwischen 30-90cm.
Vielen Dank und viele Grüße
p.S.: Schicke dann mal mein Prog ;)
-
Hi,
hier mein Prog aber es funktioniert nicht, was ist falsch ?
Viele Grüße und vielen Dank
$regfile = "m8def.dat"
$crystal = 16000000
Waitms 500
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Input
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Do
Compare1a = 1
Compare1b = 1
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
Dim Result As Word
Dim Channel As Byte
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Result = Getadc(portc.4) ; Result ;
If
Result = 1000
Then
Portc.0 = 0
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Wait 1
Loop
End
-
Code:
$regfile = "m8def.dat"
$crystal = 16000000
Dim Result As Word
Dim Channel As Byte
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Input
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Compare1a = 1
Compare1b = 1
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0
Start Adc
Do
Result = Getadc(4) ; Result ;
If
Result = 1000 Then
Portc.0 = 0
Portc.1 = 1
Portc.2 = 0
Portc.3 = 1
Wait 1
Loop
End
Ich habe das Programm mal etwas bearbeitet.
So mache ich es bei mir immer.
Was ich geändert habe findest du, denke ich, selbst raus, wenn du es die nochmal genauer anschaust.
jon
-
Hi,
vielen Dank aber irgendwie gibt es immer noch fehlermeldungen, wieso ?
Hier mal die Fehlermeldungen:
Error: 31 Line: 30 Infalid datatyp [0]
Error: 93 Line: 30 Variable not dimensioned [0-> 0]
Error: 1 Line: 32 Unknow Statement [IF]
Error: 242 Line: 33 Source variable does not match the target variable [0/1000 THEN]
Viele Grüße