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:
hier der Code vom Roboter:Code:'------------------------------------------------------------------------------- '-------------- 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
THX 4 HELPCode:'------------------------------------------------------------------------------- '-------------- 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
ps. ich vermute mal , das es vielleicht daran liegt , das ich keine Interrupts verwende







Zitieren

Lesezeichen