Hallo...

Ich bin neu hier und hab versucht den tester nach zu bauen.. allerdings ohne erfolg...

Könnt ihr mir vielleicht sagen was ich falsch mache??!!

Danke Schon mal im vorraus...
Gruß Flo

Code:
'  '******************************************************************************
'
'                            AT Mega 8535 & LCD 16*2 Anschluß & TSOP 1736
'
'------ Standard-Init von Bascom ------------------------------

$regfile = "m8535.dat"                                      
$crystal = 8000000
$hwstack = 40                                               ' default use 32 for the hardware stack
$swstack = 40                                               ' default use 32 for the SW stack
$framesize = 100                                            ' default use 40 for the frame space

Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.6 , Rs = Porta.7
Config Lcd = 16 * 2

Cls

Dim Impuls_laenge As Word , Flanken_index As Byte , Flanken_anzahl As Byte , Bit_count As Byte
Dim Befehl As Word , Geraet As Word , Neg_befehl As Word , Neg_geraet As Word , Nrc17_start As Byte
Dim Daten_pruefung As Byte , Parity As Byte , Hersteller As Word , System As Byte , Produkt As Byte , Modus As Byte
Dim Imp_array(200) As Byte , Daten As Long , Daten1 As Long , Temp_daten As Long , Code_found As Byte
Dim Timer0_startwert As Word , I As Byte
Dim Print_pc As Byte
Dim Zeit As Byte

Zeit = 3
Const Std_pulse = 5
Const Std_pulse_min = Std_pulse - 2
Const Std_pulse_max = Std_pulse + 2

Config Timer0 = Timer , Prescale = 8                        'hier den Timer eintragen (8-bit)
On Ovf0 Tim0_isr
Enable Timer0
Timer0_startwert = 78                                       '161                                      'bei mir 16000000/8/(256-56) entspricht 10Khz
Timer0 = Timer0_startwert                                   'Auflösung reicht und gefundene Werte entsprechen immer 100µs

Config Int0 = Change                                        'externer interrupt, bei mir Int0 auf portd.2
On Int0 Get_rc_isr
Enable Int0
Ddrd.2 = 0                                                  'ausgang des RC-empfängers
Portd.2 = 1

$baud = 19200                                               'Vorsicht: Wenn's langsam geht, kann dies die erkannten Flankenzeiten beeinflussen

Print_pc = 0                                                'auf 1 setzen, um über Print auszugeben

Enable Interrupts

Do
   If Code_found = 1 Then                                   'Jetzt geht es an die Erkennung des Codes
      Flanken_index = Flanken_anzahl
      Daten = 0
      Daten1 = 0
      Bit_count = 0
      Code_found = 0

'RC5 hat immer gerade Anzahl Flanken, bei mir immer zwischen 16 und 26
'Imp_array(1) enthält die Pause seit dem letzten Befehl, ist also uninteressant
'Imp_array(2) ist das Ende der ersten Start-1
'Imp_array(3) ist der Anfang der zweiten Start-1

      If Flanken_index > 15 And Flanken_index < 27 And Flanken_index.0 = 0 And Imp_array(2) > 6 And Imp_array(2) < 11 And Imp_array(3) > 6 And Imp_array(3) < 11 Then
       Locate 1 , 1
         If Print_pc = 1 Then Print "RC5: "
         I = 4                                              '           Imp_array(4) ist das Toggle-bit
         Daten.0 = 1
         While I < Flanken_index                            '           Loop bis zur letzten Flanke, immer beim wichtigen Flankenwechsel in der Mitte des Impulses
            Shift Daten , Left                              '          Daten (Ergebnis) nach links schieben, 0 einfügen
            Daten.0 = Daten.1                               '            Das letzte Bit wie das vorletzte setzen
            If Imp_array(i) > 6 And Imp_array(i) < 11 Then  '           kurzer Impuls (also kein Wechsel 0->0 oder 1->1)
               Incr I                                       '           nächste Flanke
               If Imp_array(i) < 7 Or Imp_array(i) > 10 Then       '    kein kurzer Impuls => Fehler (wenn in der Mitte ein kurzer war, dann muss noch ein kurzer kommen)
                  Exit While                                '           Abbruch
               End If
            Elseif Imp_array(i) < 19 And Imp_array(i) > 15 Then       'langer Impuls (also Wechsel 1->0 oder 0->1)
               Toggle Daten.0                               '           also letztes bit umschalten
            Else
               Exit While                                   '           sonst Abbruch
            End If
            Incr I                                          '           nächste Flanke
            Incr Bit_count                                  '           zählt die Anzahl der korrekt gelesenen Bits
         Wend
         If I >= Flanken_index Then                         'Wenn kein Abbruch
            If Imp_array(i) < 19 And Imp_array(i) > 15 Then 'Falls am Ende noch ein bit-Wechsel 1->0 kommt
               Shift Daten , Left                           'Daten (Ergebnis) nach links schieben, 0 einfügen
               Incr Bit_count
            End If
            Temp_daten = Daten                              'Daten zwischenspeichern
            Befehl = Temp_daten And &B00111111              'Befehl sind die letzten 6 bits
            Shift Temp_daten , Right , 6                    'Befehls-bits rausshiften
            Geraet = Temp_daten And &B00011111              'Gerät sind die ersten 5 bits
            If Print_pc = 1 Then Print ": Ger=" ; Geraet ; ", Bef=" ; Befehl
            Cls
            Locate 1 , 1 : Lcd "RC5"
            Locate 2 , 1 : Lcd "Ger=" ; Geraet ; ", Bef=" ; Befehl
         End If
      End If
      Flanken_index = 0
      Flanken_anzahl = 0
      Impuls_laenge = 0
   End If

   '-------------------------------------------------------------------------------------------------------------------------------------------
'SIRCS
'26, 255   23   6  6 5   6 6   5 6   6 6   5 6   6 6   5 6  12 5   6 6   6 5   6 6  11
'                  (0)   (0)   (0)   (0)   (0)   (0)   (0)   (1)   (0)   (0)   (0)  (1)
'      (Startbit)  (L               BEFEHL              M)   (L        ADRESSE       M)
'----------------------------------------------------------------Sony
      If Flanken_index = 26 And Imp_array(2) < 26 And Imp_array(2) > 22 And Imp_array(3) > 4 And Imp_array(3) < 8 Then
         If Print_pc = 1 Then Print "SIRCS: Start "
         I = 4
         While I < Flanken_index
            Shift Daten , Right
            If Imp_array(i) > 4 And Imp_array(i) < 8 Then
               nop
            Elseif Imp_array(i) > 9 And Imp_array(i) < 14 Then
               Daten.31 = 1
            Else
               Exit While
            End If
            Incr I
            If Imp_array(i) < 5 Or Imp_array(i) > 7 Then
               Exit While
            End If
            Incr I
            Incr Bit_count
         Wend
         If I >= Flanken_index Then
            If Imp_array(i) > 9 And Imp_array(i) < 14 Then
               Shift Daten , Right
               Daten.31 = 1
               Incr Bit_count
            End If
            Shift Daten , Right , 20
            Temp_daten = Daten
            Befehl = Temp_daten And &B01111111
            Shift Temp_daten , Right , 7
            Geraet = Temp_daten And &B00011111
            If Print_pc = 1 Then Print ": Gerät=" ; Geraet ; ", Befehl=" ; Befehl ; ", I=" ; I ; ", Flanken_index=" ; Flanken_index ; ", Daten=" ; Bin(daten)
            Cls
            Locate 1 , 1 : Lcd "SIRCS"
            Locate 2 , 1 : Lcd "Geraet=" ; Geraet ; ", Befehl=" ; Befehl
         End If
       Flanken_index = 0
      Flanken_anzahl = 0
      Impuls_laenge = 0
      End If
'-------------------------


   Loop

End

Tim0_isr:
   Timer0 = Timer0_startwert
   Incr Impuls_laenge                                       'bei jedem Überlauf um 1 erhöhen
   If Impuls_laenge = 200 Then                              'Kein Impuls für 20ms und in Get_rc_isr schon mindestens 14 Flanken gespeichert
      If Flanken_anzahl > 13 Then
         Code_found = 1                                     'Auswertung im Hauptprogramm starten
      End If
   End If
Return

Get_rc_isr:
   If Impuls_laenge > 0 Then
      Incr Flanken_anzahl
      If Flanken_anzahl > 200 Then Flanken_anzahl = 200
      If Impuls_laenge > 255 Then Impuls_laenge = 255
      Imp_array(flanken_anzahl) = Impuls_laenge
      Impuls_laenge = 0
   End If
Return