Meinst du den letzten Code von mir? Was vermisst du den daran?
Ok, werds mal mit 6 Bytes insgesamt probieren.
Gruß
Chris
EDIT:
Habs jetzt mal so probiert mit Start- und Stop-Byte, jedoch tut sich nichts... PWM wird zwar erzeugt, aber sie verändert sich nicht, d.h. die Werte werden nicht korrekt eingelesen?!
ATTINY2313:
Code:
$regfile = "attiny2313.dat"
$crystal = 16000000
$framesize = 20
$hwstack = 20
$swstack = 20
$baud = 19200
Config Timer0 = Timer , Prescale = 1 '100kHz
Timer0 = 96
On Timer0 Servo_irq
Enable Timer0
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Const Start_byte = 0
Const Stop_byte = 127
Dim _start As Byte
Dim _stop As Byte
Dim Servo(4) As Byte
Dim _ist As Byte
Dim _bl(4) As Byte
Dim I As Byte
Const Min_servo = 65
Const Max_servo = 160
Const Diff_servo = Max_servo - Min_servo
For I = 1 To 4
_bl(i) = Min_servo
Servo(i) = _bl(i)
Next I
Enable Interrupts
Do
Inputbin _start
While _start <> Start_byte 'warte auf start
Inputbin _start
Wend
Inputbin _bl(1) ; _bl(2) ; _bl(3) ; _bl(4) ; _stop
If _stop = Stop_byte Then
For I = 1 To 4
If _bl(i) < Min_servo Then _bl(i) = Min_servo
If _bl(i) > Max_servo Then _bl(i) = Max_servo
Servo(i) = _bl(i)
Next I
End If
Loop
End
Servo_irq:
Timer0 = 96
Incr _ist
If _ist >= 200 Then _ist = 0
If Servo(1) > _ist Then
Portd.2 = 1
Else
Portd.2 = 0
End If
If Servo(2) > _ist Then
Portd.3 = 1
Else
Portd.3 = 0
End If
If Servo(3) > _ist Then
Portd.4 = 1
Else
Portd.4 = 0
End If
If Servo(4) > _ist Then
Portd.5 = 1
Else
Portd.5 = 0
End If
Return
ATMEGA8:
Code:
$regfile = "m8def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
$baud = 19200
Config Serialout = Buffered , Size = 20
Config Timer2 = Timer , Prescale = 256
On Timer2 Detectrxpause
Enable Timer2
Config Int1 = Rising
On Int1 Getreceiver
Enable Int1
Config Pind.3 = Input
Portd.3 = 0
Const Start_byte = 0
Const Stop_byte = 127
Const _maxchannel = 4
Dim Bufferbyte As Byte
Dim Kanal(_maxchannel) As Byte
Dim Channel As Byte
Dim _bl(_maxchannel) As Byte
Dim I As Byte
Dim Max_kanal(_maxchannel) As Byte
Dim Min_kanal(_maxchannel) As Byte
Dim Diff_kanal(_maxchannel) As Byte
For I = 1 To _maxchannel
_bl(i) = 0
Max_kanal(i) = 100
Min_kanal(i) = 100
Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
Next I
Enable Interrupts
Do
'(
For I = 1 To _maxchannel
If Kanal(i) > Max_kanal(i) Then
Max_kanal(i) = Kanal(i)
Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
End If
If Kanal(i) < Min_kanal(i) Then
Min_kanal(i) = Kanal(i)
Diff_kanal(i) = Max_kanal(i) - Min_kanal(i)
End If
Next I
')
For I = 1 To _maxchannel
_bl(i) = Kanal(i) '- Min_kanal(i)
Next I
Printbin Start_byte ; _bl(1) ; _bl(2) ; _bl(3) ; _bl(4) ; Stop_byte
Waitms 100
Loop
End
Getreceiver:
If Channel > 0 And Channel < 5 Then
Kanal(channel) = Timer2
End If
Timer2 = 6
Incr Channel
Return
Detectrxpause:
Channel = 0
Return
Wo könnte mein Problem sein?
Lesezeichen