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. 
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