Ok, das mit dem festen Senden von Daten und dem Blinken werd ich mal ausprobieren, damit ich weiß, was funktioniert und was nicht! Alternativ dazu möchte ich auch noch den PC über einen MAX232 anschließen, um die Input-Daten vom ATTINY ausgeben zu lassen. Mal sehen, was dabei rauskommt..
@Richard:
Kannst du mir sagen, wo der Unterschied zwischen Inputbin und Get liegt? Ich habe keinen gefunden, evtl. bin ich momentan etwas zu abgelenkt, ums zu sehen.. Wäre nett von dir.
Gruß
Chris
EDIT:
Habs jetzt endlich erfolgreich geschafft, das meiste so hinzubiegen, wie ich es will 
Hier mal die Codes:
ATMEGA8:
Code:
$regfile = "m8def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
$baud = 115000
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 = 127
Const _maxchannel = 4
Dim Bufferbyte As Byte
Dim Kanal(_maxchannel) As Byte
Dim Channel As Byte
Dim _bl(_maxchannel) As Word
Dim I As Byte
Dim _crc As Word
Enable Interrupts
Do
For I = 1 To 4
_bl(i) = 63200
Next I
_crc = Crc16(_bl(1) , 4)
Printbin Start_byte ; _bl(1) ; _bl(2) ; _bl(3) ; _bl(4) ; _crc
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
ATTINY2313:
Code:
$regfile = "attiny2313.dat"
$crystal = 16000000
$framesize = 30
$hwstack = 32
$swstack = 30
$baud = 115000
Config Timer1 = Timer , Prescale = 8
Timer1 = 62535
On Timer1 Servoirq
Enable Timer1
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Dim Kanal As Byte
Dim Servo(4) As Word
Dim _bl(4) As Word
Dim I As Word
Dim _crc As Word
Dim _crcold As Word
Dim _start As Byte
'min: 61535, mitte 62535, max 63535 = 2000 schritte
Const Start_byte = 127
Const Min_servo = 63800
Const Max_servo = 61535
Const Diff_servo = Max_servo - Min_servo
For I = 1 To 4
_bl(i) = Min_servo
Servo(i) = _bl(i)
Next I
Enable Interrupts
Wait 3
Do
If Ischarwaiting() > 0 Then
Inputbin _start
If _start = Start_byte Then
Inputbin _bl(1) , _bl(2) , _bl(3) , _bl(4) , _crc
If _crc = Crc16(_bl(1) , 4) And _crc <> _crcold Then
For I = 1 To 4
Servo(i) = _bl(i)
Next I
_crcold = _crc
End If
Else
For I = 1 To 4
Servo(i) = Min_servo
Next I
End If
End If
Loop
Servoirq:
If Kanal = 0 Then
If Portd.2 = 0 Then 'wenn port low
Timer1 = Servo(1) 'dann timer auf entsprechende verzögerung
Portd.2 = 1 'und port anschalten
Else 'das hier passiert erst bei dem darauf folgenden interrupt
Portd.2 = 0 'dann port wieder ausschalten
Incr Kanal 'und den nächsten kanal bearbeiten
End If
End If
If Kanal = 1 Then
If Portd.3 = 0 Then
Timer1 = Servo(2)
Portd.3 = 1
Else
Portd.3 = 0
Incr Kanal
End If
End If
If Kanal = 2 Then
If Portd.4 = 0 Then
Timer1 = Servo(3)
Portd.4 = 1
Else
Portd.4 = 0
Incr Kanal
End If
End If
If Kanal = 3 Then
If Portd.5 = 0 Then
Timer1 = Servo(4)
Portd.5 = 1
Else
Portd.5 = 0
Incr Kanal
End If
End If
If Kanal = 4 Then
Timer1 = 65530 '40000 | eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
Kanal = 0
End If
Return
End
Der Unterschied liegt wirklich im Servo-Code! Danke für den Tip... Jetzt gehts auf die nächste Hürde zu, das Summensignal auf den Servo-Bereich umzuskalieren. Danach muss noch die WM+ eingebunden werden.
Lesezeichen