Zitat:
Zitat von
Che Guevara
Also erstmal möchte ich dir frohe Weihnachten wünschen :)
Danke, das wünsch' ich Dir auch :)
Zitat:
Das finde ich sehr nett, dass du dir soviel Mühe gibst.
Ist auch ein Thema, das mich interessiert.
Zitat:
...aber ich habs mal probeweise eingespielt und da hats nicht funktioniert... Ich werds aber morgen nochmal probieren.
Da ist's dann interessant wie Du das machst, poste doch mal den entsprechenden Code. Würde dann das Byte Empf(x) vor weiterer Verarbeitung einer temporären Word-Variable zuweisen.
Zitat:
Hm, das habe ich mir schon gedacht. Aber wenns morgen mit einem Byte doch funktionieren sollte, dann ist das ja nicht mehr soooo schlimm, oder?
Ist nicht schlimm, da scheinbar kein schädlicher Nebeneffekt auftritt, wenn Highbyte des Words immer 0 ist, gibt's auch kein Problem durch Interruptunterbrechung.
Du verschwendest halt ein paar Bytes SRam und ein paar Zyklen.
Zitat:
Also Werte > 255 werden nie im Empf-Array drinstehen.
Dann kann man die ISR ein wenig kürzer halten, siehe unten.
Zitat:
Was genau meinst du mit temporären Variablen? So:
So:
Code:
Empf_Tmp = Empf(throttlechannel)
Sempf_Tmp = Sempf(throttlechannel)
If Empf_Tmp > 61 And Empf_Tmp < 139 Then 'don't process values that can't be correct
Sempf_Tmp = Empf_Tmp - 61
Sempf_Tmp = Sempf_Tmp * 3 '==> values ranging from 3 (stick at bottom) to 228 (full throttle)
Empf(throttlechannel) = Empf_Tmp
Sempf(throttlechannel) = Sempf_Tmp
End If
Und genauso mit nick, roll und yaw.
Du hast bemerkt, dass mein vorher geposteter Code dafür gedacht ist, im Simulator zu laufen ?
So kann ohne großartige Rumprobiererei am lebenden Objekt die ISR auf korrekte Funktion überprüft werden.
Wenn Probleme beim Vergleich Byte mit Word existieren, dann solltest Du Michaels Ratschlag zum Update nachkommen.
Hier der Bytearraycode:
Code:
Dim Empf(5) As Byte
' ...
Isr_int0: ' byte-array, cycles in range: 43, out of range: 28
!PUSH R16
!IN R16, SREG
!PUSH R16
!LDS R16, {channel}
!INC R16
!STS {channel}, R16
!SUBI R16, 2
!CPI R16, 5
!BRCC NotInRange
!PUSH XL
!PUSH XH
LoadAdr Empf(1) , X
!ADD XL, R16
!CLR R16
!ADC XH, R16
!IN R16, TCNT0
!ST X, R16
!POP XH
!POP XL
!NotInRange:
!LDI R16, 6
!OUT TCNT0, R16
!POP R16
!OUT SREG, R16
!POP R16
Return