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
Start Adc
Dim W1 As Word , Channel As Byte
'### Timer2 Hoch / Runter
Dim Timer2reload As Word
Timer2reload = 1
Config Timer2 = Timer , Prescale = 1024
Timer2 = Timer2reload
Enable Timer2
On Timer2 Timer2_isr
Enable Interrupts
Dim Adc_wert As Word
'### Timer0 Rechts / Links
Dim Timer0reload As Word
Timer0reload = 1
Config Timer0 = Timer , Prescale = 1024
Timer0 = Timer0reload
Enable Timer0
On Timer0 Timer0_isr
Enable Interrupts
Do
'############ Start / Stop
W1 = Getadc(2)
Print "Channel 0 " ; " value " ; W1
Incr Channel
If W1 = 0 Then
Portd.6 = 1 'Schrittmotor ein
Else
Portd.6 = 0 'Schrittmotor aus
End If
'################### Hoch / Runter Motor
Adc_wert = Getadc(1)
Dim Temp1 As Integer
Temp1 = Adc_wert - 512
If Temp1 > 0 Then
Portc.5 = 0 ' Rechtsrum
Else
Portc.5 = 1 ' Linksrum
End If
Temp1 = Abs(temp1) ' Temp ist nun immer Positiv und im Bereich 0...511
Temp1 = Temp1 - 49 ' 50 = Totbereich um Mittelstellung
If Temp1 < 1 Then
Stop Timer2 ' Motor stoppen
Else
' Temp ist jetzt im Bereich im Bereich 1... 461 und dies soll zu 1...922 werden
' Motor_Richtung = Linksrum/Rechtsrum
Timer2reload = Temp1 / 3 ' Motor_Speed = Temp * 2
Start Timer2 ' Motor = Ein.
End If
'################### Rechts / Links Motor
Adc_wert = Getadc(0)
Dim Temp As Integer
Temp = Adc_wert - 512
If Temp > 0 Then
Portc.4 = 0 ' Rechtsrum
Else
Portc.4 = 1 ' Linksrum
End If
Temp = ABS(Temp) ' Temp ist nun immer Positiv und im Bereich 0...511
Temp = Temp - 49 ' 50 = Totbereich um Mittelstellung
If Temp < 1 Then
Stop Timer0 ' Motor stoppen
Else
' Temp ist jetzt im Bereich im Bereich 1... 461 und dies soll zu 1...922 werden
' Motor_Richtung = Linksrum/Rechtsrum
Timer0reload = Temp / 3 ' Motor_Speed = Temp * 2
Start Timer0 ' Motor = Ein.
End If
Loop
End
'################### Hoch / Runter Motor
Timer2_isr:
Waitms 5
Timer2 = Timer2reload
Toggle Portc.3
Return
'################### Rechts / Links Motor
Timer0_isr:
Waitms 5
Timer0 = Timer0reload
Toggle Portc.2
Return
Danke, jetzt läuft das alles. ![Smile](https://www.roboternetz.de/phpBB2/images/smiles/icon_smile.gif)
Ich musste nur noch etwas mit dem Takt für die geschwindukkeiten spielen, aber so ist jetzt gut.
Was hätte ich bei
Code:
' Temp ist jetzt im Bereich im Bereich 1... 461 und dies soll zu 1...922 werden
' Motor_Richtung = Linksrum/Rechtsrum
oder sollte das nur als Hinweis dienen?
Ich werde das dann morgen abend mal alles schön schick machen und beschriften.
Lesezeichen