-         

Ergebnis 1 bis 6 von 6

Thema: Bitfolge aufzeichnen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.03.2008
    Ort
    Wetzlar
    Alter
    45
    Beiträge
    16

    Bitfolge aufzeichnen

    Anzeige

    Hallo Leute,

    ich möchte eine Signalfolge in Binärer Form aufzeichnen.

    Das eine Signal kommt von einem TSOP 1736, dass will ich aufzreichnen
    als reine Bitfolge (101100010101.....). Die Geschwindigkeit ist
    vermutlich 9600. Wie kann ich das Signal als Bitfolge (60-70 Bit lang)
    aufzeichnen ? Wie bekomme ich die Geschwindigkeit des Signal herraus, bzw. wie lange die einzellnen Impulse sind.

    Wie stelle ich das an?

    Als zweites habe ich einen Mikrocontroller der auch ein Signal wie oben
    beschrieben sendet. Wie stelle ich das bei dem an ?

    Genau so oder muß ich da was anderes machen ?

    Ich verwende ein Atmel 2561 und programmiere in Bascom.


    Ich brauche eure Hilfe. Ich weiß net mehr weiter.

    Gruß Jörg

    PS: Ich freue mich über jede Hilfe. Danke schon mal =D>
    Ich kann jede Hilfe gebrauchen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112

    Re: Bitfolge aufzeichnen

    Zitat Zitat von jojo150272-A
    Das eine Signal kommt von einem TSOP 1736, dass will ich aufzreichnen
    als reine Bitfolge (101100010101.....). Die Geschwindigkeit ist
    vermutlich 9600. Wie kann ich das Signal als Bitfolge (60-70 Bit lang)
    aufzeichnen ?
    Hallo,
    du musst in jedem Fall die Länge der High/Low Phasen auswerten.
    Wenn es sich um die Signale einer Fernbedienung handelt, musst du die Zeiten entsprechend der verwendeten Codierung (RC5, SIRCS...) umwandeln.
    Eine Baudrate von 9600 ist eher unwahrscheinlich. Ein TSOP1736 empfängt eine Trägerfrequenz von 36KHz und du brauchst für einen Puls mindestens 6 Cycle mit mindestens ebenso langer Pause. Dies entspricht einer max. Übertragung von 3000 baud. Die meisten Fernbedienungscodes kommen nicht mal auf 1000 baud.

    Gruß

    Rolf

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.03.2008
    Ort
    Wetzlar
    Alter
    45
    Beiträge
    16

    Bitfolge

    Hallo Rolf,

    es handelt sich um kein normales Fernbedienungssignal. Es ist ein Sonderkram von einem Gerät, mit nem USB zu RX/TX umsetzer kann ich einige Protokolle mitlesen, aber da sie net in den RS232 Standard passen kommen die Signale manchmal Verstümmelt an. Deshalb möchte ich auch dieses Signal aufzeichnen und dann auch später mal senden.

    Muß ich dafür einen Interupt verwenden ? Gibt es dafür ein Code Beispiel, oder kannst du mir eine Hilfestellung geben ?


    Gruß Jörg

    PS: Der sich auf die Lösung freut. =D>
    Ich kann jede Hilfe gebrauchen

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Jörg,
    welchen Controller hast du denn zur Verfügung und kannst du bei dem einen externen Interrupt-Eingang nutzen?
    Dann könnte ich dir aus einem FB-Empfänger, den ich mal gemacht habe, ein Stück rausschneiden, welches die Zeiten in ein Array schreibt und dann ausgibt.

    Gruß

    Rolf

    PS: Puuh, noch mal Glück gehabt, wir sind im Endspiel.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.03.2008
    Ort
    Wetzlar
    Alter
    45
    Beiträge
    16

    Bitfolge aufzeichnen

    Hallo Rolf,

    ja da haben wir mal wieder Glück gehabt. Jetz wollen wir aber auch am Sonntag gewinnen.

    Ich verwende einen Atmega 2561, bei dem auf dem Port B das Display angeschlossen ist. Ich hätte also noch was frei in sachen Interupt.

    Ich möchte das Signal so aufzeichnen das ich den Takt, sowie die Binäre folge des Signals aufzeichnen kann.

    Wie gehe ich dieses Problem den an, wäre schon für einen Tip dankbar.

    Gruß Jörg

    PS: Der am Sonntag Europameister wird.
    Ich kann jede Hilfe gebrauchen

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    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:

    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
    D.h., du lässt einen Timer mit 10KHz überlaufen und zählst die Anzahl (Laenge).
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •