So, nun bin ich ne ecke schlauer geworden.
Habe über den Joystick die Richtung des Schrittmotors ändern können und einen 2 Stufen Filter gebaut.
Joystick in Mittelstellung: Stop
Stufe 1 vorwärts : linkslauf
Stufe 2 vorwärts: Stop
Stufe 1 rückwärts: rechtslauf
Stufe 2 rückwärts: Stop
Das Funktioniert auch soweit, jetzt weis ich nur nicht, wie ich da noch einen Tacktgeber/Timer rein bekomme.
Der Timer ist schon drinn, aber kann ich den Timer verändern mit meinem ADC oder muss ich mehrer Timer nehmen?
Code:
'###################################################
'Testprogramm
'für
'RoboterNetz Standard-Roboter Board RBNFRA 1.2
'
'Aufgabe:
'###################################################
Const Writepowerport_adr = &H72 'I2C Adr PCF 2
Const Readpowerport_adr = &H73 'I2C Adr PCF 2
Const Writeeingabeport_adr = &H7E
Const Readeingabeport_adr = &H7F
Dim I2cdaten As Byte 'Datenbyte aus PCF8574
Dim I As Word
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit
I2cstart
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop
'*********
Config Pind.6 = Output 'Schrittmotoren Ein/Aus
Config Pinc.5 = Output 'Schrittmotor Links Richtung
Config Pinc.3 = Output 'Schrittmotor Links Step
Config Pinc.4 = Output 'Schrittmotor Rechts Richtung
Config Pinc.2 = Output 'Schrittmotor Rechts Step
Config Adc = Single , Prescaler = Auto , Reference = Internal
'Config Adc.1 = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim W1 As Word , Channel As Byte
'Ocr1a = 10000
'Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1 , Compare A = Disconnect
'On Oc1a Timer1serv
'Enable Oc1a
'Enable Interrupts
Do
'############ Linker Schrittmotor
W1 = Getadc(2)
Print "Channel 0 " ; " value " ; W1
'Incr Channel
If W1 = 0 Then
Portd.6 = 1 'Schritmotor Ein
End If
If W1 => 1 Then
Portd.6 = 0 'Schrittmotor aus
End If
W1 = Getadc(1)
Print "Channel 0 " ; " value " ; W1
'Incr Channel
If W1 =< 1 Or W1 => 100 Then 'schnell
Portc.5 = 0 'Rechtslauf
Portc.3 = 0
End If
If W1 =< 101 Or W1 => 480 Then 'langsam
Portc.5 = 0 'Rechtslauf
Portc.3 = 1
End If
If W1 => 481 Or W1 =< 539 Then 'Stop
Portc.3 = 0
Else
End If
If W1 =< 540 Or W1 => 950 Then 'langsam
Portc.5 = 1 'linkslauf
Portc.3 = 1
End If
If W1 =< 951 Or W1 => 1022 Then 'schnell
Portc.5 = 1 'linkslauf
Portc.3 = 0
End If
Loop
End
'Timer1serv:
'Statt Eine Led Zum Blinken Zu Bringen Kann Hier
'Regelmässig Etwas Wichtiges Getan Werden
'Toggle Portc.3
'Return
Lesezeichen