Hallo Harry

Die Auswertung funktioniert bereits
Das trifft sich gut, denn das Programm für den tiny13 ist auch fertig:
Code:
'RC5-Code senden mit ATtiny13 100% Funktion mit endloser Wiederholung  18.12.07 mic'

'Die IR-LED wird mit Widerstand(!) zwischen Pin5(PB0, OC0A) und GND angeschlossen  '
'Trägerfrequenz = 36kHz(Puls/Pause 1:1), Bitlänge = Trägerfrequenz/64'
'Code basierden auf den Angaben von: http://www.sbprojects.com/knowledge/ir/rc5.htm'

'Die Stellen, an denen man den zu sendenden Code und die Wiederholgeschwindigkeit'
'ändern kann, sind mit +++++++++++++++++++++++++++++++++++++++++++++++++ markiert'
'

'Einstellungen -----------------------------------------------------------------'

'Wir verwenden einen tiny13'
$regfile = "ATtiny13.dat"

'der mit internen 9,6MHZ getaktet wird (Fuse Takt/8 nicht gesetzt!)'
$crystal = 9600000

'Weitere, von mir noch nicht geprüfte Compileranweisungen:'
$hwstack = 32
$swstack = 8
$framesize = 16

'Dims --------------------------------------------------------------------------'

'Der zu sendende RC5-Code als 16bit-Wert'
Dim Rc5_code As Word

'Bitmaske für das zu sendende Bit aus RC-Code'
Dim Rc5_bitmaske As Word

'Teiler des Trägertaktes und Kennung des Halbbits'
'0-63 bedeutet erstes Manchester-Halbbit, 64-127 bedeutet zweites Manchester-Halbbit'
Dim Rc5_halbbit As Byte

'größer 0 bedeutet aktuelles zu sendende Bit ist gesetzt'
Dim Rc5_bit_gesetzt As Word

'Sendeflag'
Dim Senden_aktiv As Byte

'Anfang Startblinken'
Config Portb.0 = Output
Portb.0 = 1
Waitms 500
Config Portb.0 = Input
Portb.0 = 0
Wait 1
'Ende Startblinken'

'Initialisierung ---------------------------------------------------------------'

'Startwerte setzen, es findet noch keine Übertragung statt'
Senden_aktiv = 0

'Timer0 auf CTC-Mode mit OC0APin-Toggeln und OCR0A löschen nach Match bei perscale=1'
Config Timer0 = Timer , Compare A = Toggle , Prescale = 1 , Clear Timer = 1

'MatchCompareRegister setzen: 133 für 36kHz oder 126 für 38kHz'
Ocr0a = 133

'ISR für Timer0 bei Compare0A-Match definieren'
On Oc0a Rc5_isr Nosave

'MatchCompare Interrupt erlauben'
Enable Oc0a

'Interrupts generell erlauben'
Enable Interrupts


'Hauptprogramm -----------------------------------------------------------------'
   '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
   '14 bits RC5-Code zusammensetzen in der 16 Bit Variablen Rc5_code'
   'und Bitmaske auf bit13 (erstes von 14 RC5-Bits) setzen
   'Bitnummer: 1111110000000000'
   '           5432109876543210'
   'Funktion:  --sstaaaaacccccc'
   'Maske:     0010000000000000'

   '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
   'Hier kann man den gewünschten Code eintragen'

   Rc5_code = &B0011000101000111

   'Testcode: 2 Start, kein Toggle, Adresse 5, Kommando 7'
   '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'

Label:

  'Bitmaske auf erstes von 14 zu sendende Bits setzen'                            '
   Rc5_bitmaske = &B0010000000000000

   'Start ist erstes Halbbit'
   Rc5_halbbit = 0

   'Ab hier übernimmt die ISR die Kontrolle. Wir warten, bis alle Bits gesendet sind'
   Senden_aktiv = 1

   Do
      nop
   Loop Until Senden_aktiv = 0

   '+++++++++++++++++++++++++++++++++++++++++'
   'Kurz warten vor der nächsten Übertragung'

Config Portb.0 = Output
Portb.0 = 1
Waitms 50
Config Portb.0 = Input
Portb.0 = 0
Waitms 100


   'Das ist dann die Wiederholgeschwindikeit'
   '+++++++++++++++++++++++++++++++++++++++++'

   'Wert für rc5_code erhöhen, Nach Kommando-Überlauf wird Addresse erhöht!'
   Incr Rc5_code

   'endlos wiederholen'
   Goto Label

'Ab hier folgt die ISR ---------------------------------------------------------'
Rc5_isr:
   'Code aus der Basom-Hilfe on interrupt isr nosave'
   $asm
      PUSH R24 ; since we are going to use R24 we better save it
      IN r24, SREG ; get content of SREG into R24
      PUSH R24 ; we can save a register
   $end Asm

   'Wenn wir senden wollen'
   If Senden_aktiv = 1 Then

      'ermitteln wir den Status des aktuellen Bits'
      Rc5_bit_gesetzt = Rc5_code And Rc5_bitmaske

      'und wenn wir beim Start des ersten Halbbits sind,'
      If Rc5_halbbit = 0 Then

         'dann geben wir das erste Halbbit invertiert aus. (Manchestercodierung)
         If Rc5_bit_gesetzt = 0 Then
            Config Portb.0 = Output
         Else
            Config Portb.0 = Input
         End If
      'Ende erstes Halbbit'
      End If

      'Beim zweiten Halbbit müssen wir nun den gewünschten Bitstatus ausgeben'
      If Rc5_halbbit = 64 Then
         If Rc5_bit_gesetzt = 0 Then
            Config Portb.0 = Input
         Else
            Config Portb.0 = Output
         End If
      'Ende zweites Halbbit'
      End If

      'Bitzeit ist Trägertakt/128 , also wir zählen den Bittimer hoch'
      Incr Rc5_halbbit

      'Bei RC5_halbbit = 128 ist das aktuelle Bit gesendet, wir senden nun das nächste Bit'
      If Rc5_halbbit = 128 Then

         'Wir setzen die Bitmaske auf das nächste zu sendende Bit'
         Shift Rc5_bitmaske , Right , 1

         'und laden den Bittimer mit dem Startwert als Flag für erstes Halbbit.'
         Rc5_halbbit = 0

         'Ist das letzte Bit gesendet?'
         If Rc5_bitmaske = 0 Then

            'Dann sind wir fertig. Dies erkennt dann das Hauptprogramm'
            Senden_aktiv = 0

         'Ende Sendeflag'
         End If

      'weitersenden bis alle Bits ausgegeben sind'
      End If

   'und wiederholen bis rc5_bitmaske = 0'
   End If

   'Code aus der Basom-Hilfe on interrupt isr nosave'
   $asm
      POP R24 ;get content of SREG
      Out Sreg , R24 ; Save Into Sreg
      POP R24 ; get r24 back
   $end Asm
Return
Die Ausgabe meines RP6 (die Daten wurden mit einer normalen roten 5mm-LED aus ca. 30cm Entfernung gesendet!):
Code:
Please make sure that your IR Remote Control really transmits RC5 code!
Toggle Bit:0 | Device Address:5 | Key Code:7
Toggle Bit:0 | Device Address:5 | Key Code:8
Toggle Bit:0 | Device Address:5 | Key Code:9
Toggle Bit:0 | Device Address:5 | Key Code:10
Toggle Bit:0 | Device Address:5 | Key Code:11
Toggle Bit:0 | Device Address:5 | Key Code:12
Toggle Bit:0 | Device Address:5 | Key Code:13
Toggle Bit:0 | Device Address:5 | Key Code:14
Toggle Bit:0 | Device Address:5 | Key Code:15
Toggle Bit:0 | Device Address:5 | Key Code:16
Toggle Bit:0 | Device Address:5 | Key Code:17
Toggle Bit:0 | Device Address:5 | Key Code:18
Toggle Bit:0 | Device Address:5 | Key Code:19
Toggle Bit:0 | Device Address:5 | Key Code:20
Toggle Bit:0 | Device Address:5 | Key Code:21
Toggle Bit:0 | Device Address:5 | Key Code:22
Toggle Bit:0 | Device Address:5 | Key Code:23
Toggle Bit:0 | Device Address:5 | Key Code:24
Toggle Bit:0 | Device Address:5 | Key Code:25
Toggle Bit:0 | Device Address:5 | Key Code:26
Toggle Bit:0 | Device Address:5 | Key Code:27
Toggle Bit:0 | Device Address:5 | Key Code:28
Toggle Bit:0 | Device Address:5 | Key Code:29
Toggle Bit:0 | Device Address:5 | Key Code:30
Toggle Bit:0 | Device Address:5 | Key Code:31
Toggle Bit:0 | Device Address:5 | Key Code:32
Toggle Bit:0 | Device Address:5 | Key Code:33
Toggle Bit:0 | Device Address:5 | Key Code:34
Toggle Bit:0 | Device Address:5 | Key Code:35
Toggle Bit:0 | Device Address:5 | Key Code:36
Toggle Bit:0 | Device Address:5 | Key Code:37
Toggle Bit:0 | Device Address:5 | Key Code:38
Toggle Bit:0 | Device Address:5 | Key Code:39
Toggle Bit:0 | Device Address:5 | Key Code:40
Toggle Bit:0 | Device Address:5 | Key Code:41
Toggle Bit:0 | Device Address:5 | Key Code:42
Toggle Bit:0 | Device Address:5 | Key Code:43
Toggle Bit:0 | Device Address:5 | Key Code:44
Toggle Bit:0 | Device Address:5 | Key Code:45
Toggle Bit:0 | Device Address:5 | Key Code:46
Toggle Bit:0 | Device Address:5 | Key Code:47
Toggle Bit:0 | Device Address:5 | Key Code:48
Toggle Bit:0 | Device Address:5 | Key Code:49
Toggle Bit:0 | Device Address:5 | Key Code:50
Toggle Bit:0 | Device Address:5 | Key Code:51
Toggle Bit:0 | Device Address:5 | Key Code:52
Toggle Bit:0 | Device Address:5 | Key Code:53
Toggle Bit:0 | Device Address:5 | Key Code:54
Toggle Bit:0 | Device Address:5 | Key Code:55
Toggle Bit:0 | Device Address:5 | Key Code:56
Toggle Bit:0 | Device Address:5 | Key Code:57
Toggle Bit:0 | Device Address:5 | Key Code:58
Toggle Bit:0 | Device Address:5 | Key Code:59
Toggle Bit:0 | Device Address:5 | Key Code:60
Toggle Bit:0 | Device Address:5 | Key Code:61
Toggle Bit:0 | Device Address:5 | Key Code:62
Toggle Bit:0 | Device Address:5 | Key Code:63
Toggle Bit:0 | Device Address:6 | Key Code:0
Toggle Bit:0 | Device Address:6 | Key Code:1
Toggle Bit:0 | Device Address:6 | Key Code:2
Toggle Bit:0 | Device Address:6 | Key Code:3
Toggle Bit:0 | Device Address:6 | Key Code:4
Toggle Bit:0 | Device Address:6 | Key Code:5
Toggle Bit:0 | Device Address:6 | Key Code:6
Toggle Bit:0 | Device Address:6 | Key Code:7
Toggle Bit:0 | Device Address:6 | Key Code:8
Toggle Bit:0 | Device Address:6 | Key Code:9
Toggle Bit:0 | Device Address:6 | Key Code:10
Toggle Bit:0 | Device Address:6 | Key Code:11
Toggle Bit:0 | Device Address:6 | Key Code:12
Toggle Bit:0 | Device Address:6 | Key Code:13
Toggle Bit:0 | Device Address:6 | Key Code:14
Toggle Bit:0 | Device Address:6 | Key Code:15
Toggle Bit:0 | Device Address:6 | Key Code:16
Toggle Bit:0 | Device Address:6 | Key Code:17
Toggle Bit:0 | Device Address:6 | Key Code:18
Toggle Bit:0 | Device Address:6 | Key Code:19
Toggle Bit:0 | Device Address:6 | Key Code:20
Toggle Bit:0 | Device Address:6 | Key Code:21
Toggle Bit:0 | Device Address:6 | Key Code:22
Toggle Bit:0 | Device Address:6 | Key Code:23
Toggle Bit:0 | Device Address:6 | Key Code:24
Toggle Bit:0 | Device Address:6 | Key Code:25
Toggle Bit:0 | Device Address:6 | Key Code:26
Nach vielen Versuchen und mit deutlich schlankerem Code (ohne Schnickschnack nur noch das Wesentliche) sendet der tiny13 nun schneller als meine TV-Fernbedienung im Repead-Mode. Warum das so nun funktioniert kann ich noch nicht wirklich schlüssig erklären. Hauptproblem ist der so nicht funktionierende Handshake zwischen Warteschleife und ISR. Und da sind noch ein paar andere Dinge, die nicht so funktionieren, wie ich das gerne hätte.

Der zu sendende RC5-Code wird nun direkt im Quellcode eingetragen (Doku im Listing), die Wiederholgeschwindigkeit ist schon ziemlich am Limit, eventuell sind noch ein paar ms drin, aber es sollte so schon reichen. Das Programm belegt 41% des Speichers, man könnte also noch eine externe Codierung für den jeweiligen Renner einbauen. Oder man flasht die tinys einzeln und markiert sie.

Im Programm ist zur Demo und zum Testen der Ausgabe ein automatisches Hochzählen der Kommando-Werte (mit Überlauf in die Address-Werte) eingebaut. Der Befehl dafür (incr rc5_code) befindet sich am Ende der Hauptschleife direkt vor dem GOTO-Befehl (wenn schon Basic, dann aber mit Genuss! *grins*) Für den endgültigen Einsatz muss man den Befehl natürlich entfernen/auskommentieren.

Ich hoffe, die Funktion genügt den Erfordernissen.

Gruß

mic