Ich weiß nicht, was du mit Takt meinst. Hier kommen ja nicht zwei Signale wie bei I2C (SCL und SDA). Es kommt nur eine Bitfolge, die irgendwie getaktet ist. Bei RS232 muss man die Taktrate kennen, damit man die Konvertierung durchführen kann. Wenn hier ein ähnliches Signal kommt, bleibt dir höchstens, die Längen der High und Low Zeiten zu analysieren.
Wenn du keine Ahnung hast, was da kommt, würde ich so vorgehen:
Ausgang des TSOP1736 an einen externen Interrupt Eingang des 2561 legen, z.B. PinE.7.
Dann etwa so:
D.h., du lässt einen Timer mit 10KHz überlaufen und zählst die Anzahl (Laenge).Code:$regfile = "m2561def.dat" ' specify the used micro $crystal = 16000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Dim Impuls_laenge(1000) As Byte Dim Code_found As Byte Dim I As Word Dim Impuls As Word Dim Laenge As Word Config Timer0 = Timer , Prescale = 8 'hier den Timer eintragen (8-bit) On Ovf0 Tim0_isr Enable Timer0 Const Timer0_startwert = 56 'bei mir 16000000/8/(256-56) entspricht 10Khz Timer0 = Timer0_startwert 'Auflösung reicht und gefundene Werte entsprechen immer 100µs Config INT7 = Change On INT7 Int7_isr Enable Interrupts Enable INT7 Impuls = 1 Code_found = 0 Do If Code_found = 1 Then Code_found = 0 For I = 1 To Impuls Print Impuls_laenge(i) Next I Impuls = 1 End If Loop End Int7_isr: Impuls_laenge(impuls) = Laenge If Impuls < 1000 Then Incr Impuls End If Return Tim0_isr: Timer0 = Timer0_startwert Incr Laenge 'bei jedem Überlauf um 1 erhöhen If Laenge = 500 Then 'Kein Impuls für 50ms Code_found = 1 'Auswertung im Hauptprogramm starten End If Return
Kommt ein Flankenwechsel am INT7, speicherst du die Anzahl in einem Array. Wenn für mindestens 50ms kein Flankenwechsel kommt, gibst du alle Wert aus und setzt alles auf 0 zurück.







Zitieren

Lesezeichen