Es läuft nicht, was ist falsch am Code für den Robosapien. Habe ihn gemäss oberer Timingbeschreibung erstellt. Ir-Diode funktioniert, wird durch Cmoscam angezeigt. Ein Programm ähnlichem Aufbaues für den RC5-Code funktioniert (siehe unten).
Ps: Waitus=1 sind im Programmablauf 10us, weil durch den internen Schleifenurchlauf ca 6 us verbraucht werden, wird er auf 10us festgesetzt.
Beispiel für RC5 funktioniert:Code:$Device= m16 $Stack = 32 $Clock = 8 $Timer1=Timer, Prescale=1, CompareA=Toggle, Clear Dim command As Byte Dim i As Byte Declare Sub RCout() Const Delay83=83 Const Delay333=333 Const Delay666=666 DDRD.5=1 Compare1A=102 Start Timer1 $Timer1=Timer, CompareA=Reset command=132 Do Wait 1 RCout() Loop Sub RCout() $Timer1=Timer, CompareA=Toggle WaitUs 666 Nop 6 $Timer1=Timer, CompareA=Reset For i=0 To 7 If command.7 =0 Then $Timer1=Timer, CompareA=Toggle WaitUs 83 Nop 3 $Timer1=Timer, CompareA=Reset WaitUs 83 Else $Timer1=Timer, CompareA=Toggle WaitUs 333 Nop 3 $Timer1=Timer, CompareA=Reset WaitUs 83 End If Shift(Left,1,command) Next $Timer1=Timer, CompareA=Reset End Sub
Code:$Device= m16 $Stack = 32 $Clock = 8 $Timer1=Timer, Prescale=1, CompareA=Toggle, Clear Dim ToggleBit As Bit Dim Adr As Byte, Command As Byte Declare Sub RC5out(adr As Byte, command As Byte) Declare Sub BitLow() Declare Sub BitHigh() Const Delay=89 Set DDRD.5 Compare1A=101 Start Timer1 Adr=0 Command=5 Do RC5out(Adr,Command) WaitMs 90 Loop Sub RC5out(adr As Byte, command As Byte) Local i As Byte BitHigh() BitHigh() If ToggleBit Then BitHigh() Else BitLow() End If For i=0 To 4 If adr.4 Then BitHigh() Else BitLow() End If Shift(Left,1,adr) Next For i=0 To 5 If command.5 Then BitHigh() Else BitLow() End If Shift(Left,1,command) Next $Timer1=Timer, CompareA=Reset End Sub Sub BitLow() $Timer1=Timer, CompareA=Toggle WaitUs Delay $Timer1=Timer, CompareA=Reset WaitUs Delay End Sub Sub BitHigh() WaitUs Delay $Timer1=Timer, CompareA=Toggle WaitUs Delay $Timer1=Timer, CompareA=Reset End Sub







Zitieren

Lesezeichen