[Geändert] PID-Regler für Tricopter mit Wii Motion Plus
Hallo,
für mein momentanes Projekt benötige ich einen AVR, der über 1 Pin Daten empfängt (SOFTUART), diese dann zerlegt und anschließend mittels PWM ausgibt. Beispiel:
Der ATMEGA8 sendet "120*90*100*200"
Jetzt soll mein zweiter AVR (ein ATTINY45) diesen String empfangen und in 4 Teile zerlegen:
1. "120"
2. "90"
3. "100"
4. "200"
Diese 4 Strings soll er nun auf 4 verschiedene PWM-Ausgänge geben. Der PWM-Teil läuft soweit, jedoch nur, solange ich meinen Split-Befehl auskommentiere.
Hier mal mein Programm:
Code:
$regfile = "attiny45.dat"
$crystal = 8000000
$framesize = 60
$hwstack = 60
$swstack = 60
Open "COMB.0:19200,8,N,2,INVERTED" For Input As #1
Config Pinb.0 = Input
Config Servos = 3 , Servo1 = Portb.3 , Servo2 = Portb.2 , Servo3 = Portb.4 , Servo4 = Portb.1 , Reload = 4 , Intervall = 10
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Dim _input As String * 15
Dim _data(4) As String * 5
Dim _lenght As Byte
Dim _bl(4) As Byte
Dim _blold(4) As Byte
Dim I As Byte
Const Min_servo = 11
Const Max_servo = 70
'STARTUP###########
_input = ""
_lenght = 0
For I = 1 To 4
_bl(i) = Min_servo
_blold(i) = _bl(i)
Servo(i) = _bl(i)
Next I
I = 0
'##################
Enable Interrupts
Do
Input #1 , _input Noecho
_lenght = Split(_input , _data(1) , "*")
If _lenght > 0 Then
For I = 1 To 4
_bl(i) = Val(_data(i))
Servo(i) = _bl(i)
Next I
_input = ""
_lenght = 0
End If
Loop
End
Sobald der Split-Befehl im Programm steht, wird die PWM-ISR teilweise blockiert und meine Signale stimmen nicht mehr.
Was kann ich nun dagegen tun? Den Split-Befehl rausnehmen und das Ganze irgendwie anders lösen?
Meine Hardware sieht so aus:
Ein Atmega8 lest ein WM+ und einen 4CH-Empfänger (über Summensignal) ein und errechnet daraus 4 versch. Werte für 3 BLM und 1 Servo.
Diese 4 Werte muss ich nun an den ATTINY45 (als "PWM-Controller") senden (habe nur 1 Pin). Dieser soll dann seinen 4 PWM-Ausgängen diese 4 Werte zuweisen. Die PWM-Frequenz liegt bei 50Hz.
Über ein paar konstruktive Ideen würde ich mich sehr freuen.
Gruß
Chris