cyby
07.06.2006, 15:39
hi,
bei der Funkübertragung mit UART von der Funksteuerung zum Roboter ist sehr langsam, es kommt eine Verzögerung von etwa 1Sekunde zustande :(
liegt es vielleicht daran , das ich alles ohne Interrupts programmiert habe ?
hier mal grob der Verlauf vom Programm:
- der chip von der Funksteuerung emfängt einen tastendruck
- sendet an via UART mit dem Print-Befehl "1" oder "2" (sonst sendet er immer "0" )
- mit der Funkplatine und EasyRadio von robotikhardware.de wird das programm per Funk übertragen
- der Chip vom Roboter empfängt die Daten und steuert damit die Motoren
hier der Code von der Fernsteuerung:
'-------------------------------------------------------------------------------
'-------------- Roboter Projekt - Funkfernsteuerung ----------------------------
'-------------------------------------------------------------------------------
$regfile = "m32def.dat" 'AT Mega32
$crystal = 8000000 'Quarz: 8MHz
$baud = 19200 'Baudrate 19200
'---------------------------------Pin setzten-----------------------------------
'Ausgänge und Eingänge festlegen
' 0 = Eingang ;1 = Ausgang
Ddra = &B11110000 'Pin PA 0-3 auf Input setzten
Porta = &B00001111 'PullUp von PA 0-3
'-------------------------------------------------------------------------------
'-----------------------Main Loop-----------------------------------------------
'-------------------------------------------------------------------------------
Do
'= 0 Input
If Pina.0 = 0 Then
Print "1"
Elseif Pina.1 = 0 Then
Print "2"
Elseif Pina.2 = 0 Then
Print "3"
Elseif Pina.3 = 0 Then
Print "4"
Else
Print "0"
End If
'Wait 1 '1 Sekunde warten
Loop
End
hier der Code vom Roboter:
'-------------------------------------------------------------------------------
'-------------- Roboter Projekt - Funkfernsteuerung ----------------------------
'-------------------------------------------------------------------------------
$regfile = "m32def.dat" 'AT Mega32
$crystal = 8000000 'Quarz: 8MHz
$baud = 19200 'Baudrate 19200
'---------------------------------Pin setzten-----------------------------------
'Ausgänge und Eingänge festlegen
' 0 = Eingang ;1 = Ausgang
Ddra = &B11111000 'Pin PA 3-7 auf Output setzten
Porta = &B00000111 'PullUp von PA 0-2 aktivieren
Ddrb = &B00000001 'Pin PB 0 auf Output setzten
'---------------------------------Variablen Deklarieren-------------------------
Dim I As Byte 'Empfangene Daten werden in dieser Variable gespeichert
'-------------------------------------------------------------------------------
'-----------------------Main Loop-----------------------------------------------
'-------------------------------------------------------------------------------
Do
'= 1 Kein Input
'= 0 Input
'----------------------------------Motoren einschalten--------------------------
Porta.3 = 1 'Motor Rechts einschalten
Porta.6 = 1 'Motor Links einschalten
'----------------------------------Empfangene Daten auswerten-------------------
If Usr.rxc = 1 Then 'Wenn Byte empfangen wird...
I = Udr 'Byte aus UART auslesen
Select Case I
'----------------------------------------------- wenn keine Taste gedrückt wird
Case "0"
Porta.4 = 0 'vorwärts rechts
Portb.0 = 0 'vorwärts links
Porta.5 = 0 'rückwärts rechts
Porta.7 = 0 'rückwärts links
'----------------------------------------------- vorwärts fahren
Case "1"
Porta.4 = 1 'vorwärts rechts
Portb.0 = 1 'vorwärts links
Porta.5 = 0 'rückwärts rechts
Porta.7 = 0 'rückwärts links
I = "0"
'----------------------------------------------- rückwärts fahren
Case "2"
Porta.4 = 0 'vorwärts rechts
Portb.0 = 0 'vorwärts links
Porta.5 = 1 'rückwärts rechts
Porta.7 = 1 'rückwärts links
'----------------------------------------------- auf IR umstellen , wenn nicht empfangen wird
Case Else
End Select
End If
I = "0"
Print I
Loop
End
THX 4 HELP
ps. ich vermute mal , das es vielleicht daran liegt , das ich keine Interrupts verwende
bei der Funkübertragung mit UART von der Funksteuerung zum Roboter ist sehr langsam, es kommt eine Verzögerung von etwa 1Sekunde zustande :(
liegt es vielleicht daran , das ich alles ohne Interrupts programmiert habe ?
hier mal grob der Verlauf vom Programm:
- der chip von der Funksteuerung emfängt einen tastendruck
- sendet an via UART mit dem Print-Befehl "1" oder "2" (sonst sendet er immer "0" )
- mit der Funkplatine und EasyRadio von robotikhardware.de wird das programm per Funk übertragen
- der Chip vom Roboter empfängt die Daten und steuert damit die Motoren
hier der Code von der Fernsteuerung:
'-------------------------------------------------------------------------------
'-------------- Roboter Projekt - Funkfernsteuerung ----------------------------
'-------------------------------------------------------------------------------
$regfile = "m32def.dat" 'AT Mega32
$crystal = 8000000 'Quarz: 8MHz
$baud = 19200 'Baudrate 19200
'---------------------------------Pin setzten-----------------------------------
'Ausgänge und Eingänge festlegen
' 0 = Eingang ;1 = Ausgang
Ddra = &B11110000 'Pin PA 0-3 auf Input setzten
Porta = &B00001111 'PullUp von PA 0-3
'-------------------------------------------------------------------------------
'-----------------------Main Loop-----------------------------------------------
'-------------------------------------------------------------------------------
Do
'= 0 Input
If Pina.0 = 0 Then
Print "1"
Elseif Pina.1 = 0 Then
Print "2"
Elseif Pina.2 = 0 Then
Print "3"
Elseif Pina.3 = 0 Then
Print "4"
Else
Print "0"
End If
'Wait 1 '1 Sekunde warten
Loop
End
hier der Code vom Roboter:
'-------------------------------------------------------------------------------
'-------------- Roboter Projekt - Funkfernsteuerung ----------------------------
'-------------------------------------------------------------------------------
$regfile = "m32def.dat" 'AT Mega32
$crystal = 8000000 'Quarz: 8MHz
$baud = 19200 'Baudrate 19200
'---------------------------------Pin setzten-----------------------------------
'Ausgänge und Eingänge festlegen
' 0 = Eingang ;1 = Ausgang
Ddra = &B11111000 'Pin PA 3-7 auf Output setzten
Porta = &B00000111 'PullUp von PA 0-2 aktivieren
Ddrb = &B00000001 'Pin PB 0 auf Output setzten
'---------------------------------Variablen Deklarieren-------------------------
Dim I As Byte 'Empfangene Daten werden in dieser Variable gespeichert
'-------------------------------------------------------------------------------
'-----------------------Main Loop-----------------------------------------------
'-------------------------------------------------------------------------------
Do
'= 1 Kein Input
'= 0 Input
'----------------------------------Motoren einschalten--------------------------
Porta.3 = 1 'Motor Rechts einschalten
Porta.6 = 1 'Motor Links einschalten
'----------------------------------Empfangene Daten auswerten-------------------
If Usr.rxc = 1 Then 'Wenn Byte empfangen wird...
I = Udr 'Byte aus UART auslesen
Select Case I
'----------------------------------------------- wenn keine Taste gedrückt wird
Case "0"
Porta.4 = 0 'vorwärts rechts
Portb.0 = 0 'vorwärts links
Porta.5 = 0 'rückwärts rechts
Porta.7 = 0 'rückwärts links
'----------------------------------------------- vorwärts fahren
Case "1"
Porta.4 = 1 'vorwärts rechts
Portb.0 = 1 'vorwärts links
Porta.5 = 0 'rückwärts rechts
Porta.7 = 0 'rückwärts links
I = "0"
'----------------------------------------------- rückwärts fahren
Case "2"
Porta.4 = 0 'vorwärts rechts
Portb.0 = 0 'vorwärts links
Porta.5 = 1 'rückwärts rechts
Porta.7 = 1 'rückwärts links
'----------------------------------------------- auf IR umstellen , wenn nicht empfangen wird
Case Else
End Select
End If
I = "0"
Print I
Loop
End
THX 4 HELP
ps. ich vermute mal , das es vielleicht daran liegt , das ich keine Interrupts verwende