robin
05.11.2006, 10:44
ich habe zwei mega8 und will diese mit einander kommunitzieren lassen, da ich für den bot viele servos benötige. der erste mega8 wertet die sensoren aus und gibt dem anderen die bewegungs befehle (vor, zurück, rechts, links,...).
jedoch bekomme ich die Befehlsübertragung nicht zum laufen. zur kommunikatien dient der komplette c-Port und dann die restlichen entweder für sensoren oder servos.
Da dies jedoch nur ein versuchsaufbau ist steuer ich zurzeit nur LED'S an und hatte vor später auf servos umzusteigen.
Hier der Empfänger:(servokontroler)
$regfile = "m8def.dat"
$crystal = 3686400
'-------------------------------------------------------------------------------
'BEWEGUNGS-BUS
Config Portc.0 = Output
Config Portc.1 = Input
Config Portc.2 = Input
Config Portc.3 = Input
Config Portc.4 = Input
Config Portc.5 = Input
'BEINE RECHTS
'Config Portb.0 = Output
'Config Portb.1 = Output
'Config Portb.2 = Output
'Config Portb.3 = Output
'Config Portb.4 = Output
'Config Portb.5 = Output
'BEINE LINKS
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
'Config Portd.6 = Output
'Config Portd.7 = Output
Declare Sub Grund '0000
Declare Sub Vor '0001
Declare Sub Rueck '0010
Declare Sub Rdreh '0011
Declare Sub Ldreh '0100
'================================================= ==============================
Portc.0 = 1
Bitwait Pinc.5 , Set
Waitms 100
Portc.0 = 0
Do
Bitwait Pinc.5 , Set
If Pinc.4 = 1 Then
If Pinc.3 = 1 Then
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 15 '1111
Else
Call 14 '1110
End If
Else
If Pinc.1 = 1 Then
Call 13 '1101
Else
Call 12 '1100
End If
End If
Else
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 11 '1011
Else
Call 10 '1010
End If
Else
If Pinc.1 = 1 Then
Call 9 '1001
Else
Call 8 '1000
End If
End If
End If
Else
If Pinc.3 = 1 Then
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 7 '0111
Else
Call 6 '0110
End If
Else
If Pinc.1 = 1 Then
Call 5 '0101
Else
Call Ldreh '0100
End If
End If
Else
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call Rdreh '0011
Else
Call Rueck '0010
End If
Else
If Pinc.1 = 1 Then
Call Vor '0001
Else
Call Grund '0000
End If
End If
End If
End If
Waitms 200
Bitwait Pinc.5 , Set
Loop
End
'================================================= ==============================
Sub Grund
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Wait 2
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Vor
Portd.2 = 1
Wait 2
Portd.2 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Rueck
Portd.3 = 1
Wait 2
Portd.3 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Rdreh
Portd.4 = 1
Wait 2
Portd.4 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Ldreh
Portd.5 = 1
Wait 2
End Sub
jedoch bekomme ich die Befehlsübertragung nicht zum laufen. zur kommunikatien dient der komplette c-Port und dann die restlichen entweder für sensoren oder servos.
Da dies jedoch nur ein versuchsaufbau ist steuer ich zurzeit nur LED'S an und hatte vor später auf servos umzusteigen.
Hier der Empfänger:(servokontroler)
$regfile = "m8def.dat"
$crystal = 3686400
'-------------------------------------------------------------------------------
'BEWEGUNGS-BUS
Config Portc.0 = Output
Config Portc.1 = Input
Config Portc.2 = Input
Config Portc.3 = Input
Config Portc.4 = Input
Config Portc.5 = Input
'BEINE RECHTS
'Config Portb.0 = Output
'Config Portb.1 = Output
'Config Portb.2 = Output
'Config Portb.3 = Output
'Config Portb.4 = Output
'Config Portb.5 = Output
'BEINE LINKS
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
'Config Portd.6 = Output
'Config Portd.7 = Output
Declare Sub Grund '0000
Declare Sub Vor '0001
Declare Sub Rueck '0010
Declare Sub Rdreh '0011
Declare Sub Ldreh '0100
'================================================= ==============================
Portc.0 = 1
Bitwait Pinc.5 , Set
Waitms 100
Portc.0 = 0
Do
Bitwait Pinc.5 , Set
If Pinc.4 = 1 Then
If Pinc.3 = 1 Then
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 15 '1111
Else
Call 14 '1110
End If
Else
If Pinc.1 = 1 Then
Call 13 '1101
Else
Call 12 '1100
End If
End If
Else
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 11 '1011
Else
Call 10 '1010
End If
Else
If Pinc.1 = 1 Then
Call 9 '1001
Else
Call 8 '1000
End If
End If
End If
Else
If Pinc.3 = 1 Then
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call 7 '0111
Else
Call 6 '0110
End If
Else
If Pinc.1 = 1 Then
Call 5 '0101
Else
Call Ldreh '0100
End If
End If
Else
If Pinc.2 = 1 Then
If Pinc.1 = 1 Then
Call Rdreh '0011
Else
Call Rueck '0010
End If
Else
If Pinc.1 = 1 Then
Call Vor '0001
Else
Call Grund '0000
End If
End If
End If
End If
Waitms 200
Bitwait Pinc.5 , Set
Loop
End
'================================================= ==============================
Sub Grund
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Wait 2
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Vor
Portd.2 = 1
Wait 2
Portd.2 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Rueck
Portd.3 = 1
Wait 2
Portd.3 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Rdreh
Portd.4 = 1
Wait 2
Portd.4 = 0
End Sub
'-------------------------------------------------------------------------------
Sub Ldreh
Portd.5 = 1
Wait 2
End Sub