- LiFePO4 Speicher Test         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 38

Thema: Funkübertragung mit Bascom ( Lösungsansatz )

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.08.2004
    Beiträge
    169
    Anzeige

    Powerstation Test
    Oha, das ist mir jetzt aber peinlich!
    Das hab ich zwar gelesen, hatte aber als ich durchwar wieder vergessen was am Anfang stand...
    *schäm*

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    Hallo,
    ich habe da nochmal ne frage zu dem Programm.
    Jedenfalls habe ich das Sendemodul Easy TX 868 FM und das Empfängermodul Easy RX 868 FM von http://www.ikhf.de .
    habe das Sendeprogramm auf einen 2313 mit 7,3728Mhz laufen und das Empfängerprogramm auf einen mega163 mit den angegebenen 4MHz.
    Ich habe nur die Portpin´s angepasst, aber leider funktioniert das leider mit der Übertragung nicht so ganz. Mit dem Oszi kann ich sehen, das eine bitfolge gesendet wird, welche auch am Empfänger ankommt.
    Das Empfängerprogramm zeigt aber nicht an. Scheint so als würde der mega168 die Bits nicht richtig erkennen zu können.

    If Daten_empfangen = 1 Then 'Daten empfangen

    bleibt immer "0"

    Laut Beschreibung wird die Erkennung der bits hier gemacht:

    'Hier werden die Daten empfangen und geprüft auf die Bitzeiten
    'Aufruf alle 80 µs
    Timer0_overflow:

    Timer0 = Timer0_reload
    Incr Signal_count


    'Ende gefunden oder Signal zu lang
    If Signal_count > Pulse_max Then

    'Startbit = 1 and Pruef_bit = 0 dann Daten übergeben
    If Daten_temp.pruef_bit = 0 And Daten_temp.start_bit = 1 Then
    Daten = Daten_temp
    Set Daten_empfangen
    End If

    Daten_temp = 0

    End If

    'Flankenwechsel ??
    If Signal <> Signal_old.1 Then

    'neuen Zustand merken
    Toggle Signal_old

    'Pulse zu kurz ??
    If Signal_count < Pulse_min Then Daten_temp = 0

    'Start oder Abfragezeitpunkt ??
    If Daten_temp = 0 Or Signal_count > Pulse_1_2 Then

    'wenn noch nicht zuviele Daten, dann eine Stelle schieben
    If Daten_temp.start_bit = 0 Then Shift Daten_temp , Left , 1

    'Bit setzen wenn 0, da der Empfänger das Signal um 180° dreht, 0 = 1 1 =0
    If Signal_old = 0 Then Incr Daten_temp
    Signal_count = 0
    End If
    End If
    Return


    ... aber wo genau wird denn der Port abgefragt, der ja hier definiert wird:

    'Einstellen der Ports
    ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
    Signal Alias Pinb.1 'Eingang für Funkmodul
    Config Signal = Input
    -----------------------------------------------

    wenn jemand diesen Thread noch ließt, bitte melden, ob es jemand geschafft hat das programm zum laufen zu bekommen.
    vielen dank

  3. #13
    Gast
    Hallo


    Das Signal wird an dieser Stelle "eingelesen"

    Code:
     'Flankenwechsel ??
    If Signal <> Signal_old.1 Then
    Ist ja oben defieniert

    Code:
    'Einstellen der Ports  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Signal Alias Pinb.1                                         'Eingang für Funkmodul


    MFG
    Dieter

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    Hallo Dieter,
    vielen Dank für deine Antwort. Entschuldige bitte wenn ich noch ein, zwei Fragen stelle. Bin wirklich sehr interessiert daran und grübele und probiere schon fast eine Woche, das es bei mir läuft.

    a) Du benutzt ja für den Sender und Empfänger jeweils einen Mega8, bzw m32. Denkst du das es einen Unterschied macht, wenn ich für den Sender einen 2313 und für den Empfänger einen mega 163 nehme? ich denke nicht, aber vieleicht ist es doch nicht egal.
    Dann benutze ich einen anderen Quarz wie du. In deinem projekt ist für den Sender ein $crystal = 7362700 drin. Ich benutze einen 7.3728MHz Quarz. Muß ich noch auf der Empfängerseite Timings anpassen? -> ich denke auch wieder nicht, da du die bitzeiten ja mit "waitus bitzeit" einstellst.

    b)
    zum debuggen habe ich den empfänger nicht an der seriellen Schnittstelle angeschlossen, sondern die Ausgaben kommen über ein LCD mit der standard Bascom Ansteuerung. Denkst du das die LCD ansterung das timing verfäschen könnte?

    c)
    Ich sehe beim debuggen, das die variable Daten_empfangen immer 0 bleibt und dementsprechend nix ankommt, mit dem scope sieht man aber am portpin, das die daten da sind. Hast du noch eine Idee, wie ich weiter debuggen kann?

    d) besteht bei 434mhz und 863mhz ein prinzipieller unterscheid beim senden und empfangen?

    hoffe du nimmst dir paar minuten zeit um mir zu helfen.

    Vielen dank

    mfg

    Christian

  5. #15
    Gast
    Hallo

    Die µC sollten egal sein, sofern sie die benötigten Hardware Module enthalten.

    Macht dein Empfangsmodul denn eine Phasendrehung des Signals ? Bei meinen Modulen wirde das Signal um 180° Grad gedreht.

    Code:
             'Bit setzen wenn 0, da der Empfänger das Signal um 180° dreht, 0 = 1 1 =0
              If Signal_old = 0 Then Incr Daten_temp
    Wenn dein Signal keine Phasendrehung macht, probier es mal so

    Code:
             'Bit setzen wenn 0, da der Empfänger das Signal um 180° dreht, 0 = 1 1 =0
              If Signal_old = 1 Then Incr Daten_temp

    Teste auch mal, ob die Signallängen zwischen Sender und Empfänger verändert werden.

    Die Empfangsroutine beruht auf dem Code von Peter Dannegger aus diesem Thread

    http://www.mikrocontroller.net/forum...73.html#247053


    zu b) Da die Senderoutinen ja über waitus geproggt sind, sehe ich da kein Problem, solnage kein Int. dawischen funkt.

    zu c) Lass dir nach

    'Flankenwechsel ??
    If Signal <> Signal_old.1 Then

    mal die Variable Signal_Count ausgeben. Entspricht ja der Länge des Impluses



    MFG
    Dieter

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    hallo Dieter,
    toll das du so schnell antwortest.

    das mit dem invertierten Signal habe ich auch schon probiert, aber daran lag es nicht.

    die "signal_count habe ich auch schon ausgegeben:

    Code:
    Flankenwechsel! 0
    Pulse zu kurz -> Signal_count=238
     Flankenwechsel! 1
    Pulse zu kurz -> Signal_count=1
     Flankenwechsel! 0
    Pulse zu kurz -> F F F F F F F F F Fl Fl F Fl Fl F F F F F F Fl F F Flan F F Flankenwechsel! 0
    Pulse zu kurz -> Signal_count=5
     Flankenwechsel! 1
    Pulse zu kurz -> Signal_count=2
     Flankenwechsel! 0
    Pulse zu kurz -> Sig F F F F F F F F F Fl Fl F Fl Fl F F F F F F Fl F F Flan F F Flankenwechsel! 0
    Pulse zu kurz -> Signal_count=5
     Flankenwechsel! 1
    Pulse zu kurz -> Signal_count=2
     Flankenwechsel! 0
    Pulse zu kurz -> Sig F F F F F F F F F Fl Fl F Fl Fl F F F F F F Fl F F Flan F F Flankenwechsel! 0
    Pulse zu kurz -> Signal_count=5
     Flankenwechsel! 1
    Pulse zu kurz -> Signal_count=3
     Flankenwechsel! 0
    Pulse zu kurz -> Sig F F F F F F F F Fl Fl F Fl Fl F F F F F F Fl F F Flan F F Flankenwechsel! 0
    Pulse zu kurz -> Signal_count=5
     Flankenwechsel! 1
    Pulse zu kurz -> Signal_count=2
     Flankenwechsel! 0
    Pulse zu kurz -> Sig F F F F F F F F Fl Fl F Fl Fl F F F F F F Fl F F Flan F F
    dies sind kleine Werte , Pulse_min_temp ist IHMO auf 5 eingestellt.
    Signal_count ist aber manchmal auch höher. 6-7.

    ich klemme mal alle pins von den interrupt eingängen ab, mal sehen, ob es etwas besser wird.

    vielen dank schon einmal

    mfg.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    Hallo Dieter,
    habe den Sender un empänger mal mit in die Firma geschleppt um zu sehen, ob die Übertragung prinzipiell richtig funktioniert. bild -> daten.png

    Die Einschwingpulse liegen bei ca. 125us oder gesamte Periodendauer 250us.
    siehe bild einschwingen.png

    man sieht, der Empfänger macht keine Phasendrehung:
    051024_113951.png

    Hier nochmal die startbits ausgezoomt
    051024_114026.png

    sieht also alles sehr gut aus. Ich schaue mir nochmal die empfangsroutine an.

    mfg.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 051024_113951.png   einschwingen.png   daten.png  

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    57
    Beiträge
    247
    Hallo

    So wie es aussieht, sind deine signal_count zu kurz. Poste mal deinen Code hier rein.

    Sobald ein signal_count unter 5 empfangen wird, werden die empfangen Bits ja wieder verworfen und von neuem angefangen. Der Timer Int sollte ja alle 64 µs kommen, bitte mal prüfen.

    MFG
    Dieter

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    Hi Dieter,

    also der code ist so gut wie 100% deiner.

    Sendecode:

    Code:
    $regfile = "2313DEF.DAT"
    $baud = 19200                                               'zum Debuggen
    $crystal = 7362700
    
    'Deklaration der SUB und Functions
    Declare Function Make_manchester(byval Daten As Byte) As Word
    Declare Sub Send_code(byval Daten As Word)
    Declare Sub Send_start()
    Declare Sub Send_byte(byval Daten As Byte , Byval Crc_select As Byte)
    
    
    Const Crc_poly = &H1021                                     'CRC Polynom
    Const Sync_byte = &B01010100                                'Startbyte, kommt aus dem SNAP Prtokoll
    
    'Definition der Variablen
    Dim Crc As Word
    Dim Tempw_1 As Word
    Dim Tempw_2 As Word
    Dim Temp As Word
    Dim Daten(9) As Byte                                        'Sendebuffer
    Dim Temp1 As Byte
    Dim Temp2 As Byte
    Dim Zaehler As Byte
    
    
    'Werte für die Funkübertragung einstellen
    Const Bit_zeit = 500                                        'in us für LOW/HIGH  -- >  Manchesterbit = 2 * Bitzeit
    Const Bit_wait_start = Bit_zeit * 2.5                       'Wartezeit zum erkennen des nächsten Bytes
    Const Bit_zeit_1_2 = Bit_zeit / 4                           'Bitzeit  beim einschwingen
    Const Anzahl_bit_wechsel = 150                              'kommt auf das Modul an
    
    
    'Einstellen der Ports
    Funk Alias Portb.4                                          'Bezeichner für Funkport
    Config Pinb.4 = Output                                      'Port für Funkmodul
    
    Daten(1) = "S"
    Daten(2) = "N"
    Daten(3) = "A"
    Daten(4) = "P"
    
    'Hauptschleife
    'Kleine Schleife zum testen des Programms
    Do
              'Bitmuster zum einschwingen des Funkempfängers senden
              Call Send_start()
    
              'Startbyte senden
              Call Send_byte(sync_byte , 1)
    
              '4 Datenbytes senden
              For Zaehler = 1 To 4
                Call Send_byte(daten(zaehler) , 1)
              Next Zaehler
    
              'CRC zerlegen und senden
              Temp1 = High(crc)
              Call Send_byte(temp1 , 0)
              Temp1 = Low(crc)
              Call Send_byte(temp1 , 0)
    
             'kleine Pause, bis es weiter geht
             Wait 2
    Loop
    
    
    End
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Unterprogramm zum senden eines Bytes
    'Übergabe: Daten, zu sendenes Byte
    'crc_select = 0 --> kein CRC, 1 --> mit CRC
    'Rückgabe: CRC Wert steht am Schluß in der Variablen crc
    Sub Send_byte(byval Daten As Byte , Byval Crc_select As Byte)
    
        If Crc_select = 1 Then                                  'CRC berechnen = ja  ???
             Temp1 = Daten
             Gosub Calc_crc                                     ' Crc Berechnen
        End If
             Temp = Make_manchester(daten)                      'Variable in Manchester Code umrechnen
             Call Send_code(temp)                               'und senden
    
    End Sub
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Bitwechsel zum einschwingen senden
    'Der empfänger braucht eine gewisse Zeit, um sich auf die Frequenz des Senders einzustellen.
    'Bei meinen Modulen von ELV, steht im Datenblatt, das sie bis zu 200 ms dafür brauchen.
    'Bei einigen Tests haben sich diese Werte als ausreichend herausgestellt.
    'Dauer ca 26,6 ms
    'Rückgabe: keine
    Sub Send_start()
        Crc = 0                                                 'Variable für neue CRC berechnung löschen
       Local Count As Byte
    
       Count = 0
    
          Do
             Set Funk
             Waitus Bit_zeit_1_2
             Reset Funk
             Waitus Bit_zeit_1_2
             Incr Count
          Loop Until Count = Anzahl_bit_wechsel
    
       Waitus Bit_wait_start                                    'kleine Pause zum erkennen des Startes
    
    End Sub
    
    
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Manchester Code ausgeben auf Portpin "Funk", definiert weiter oben
    'Hier wird die Variable manchester Bitweise ausgegeben und über den Funksender
    'übertragen. Zwischen dem senden einzelner Bytes sollte die Pause nicht größer
    'als 500 ms sein, sonst verliert der Empfäger die Frequenz des Senders und die
    'Daten sind verloren.
    'Vor dem ersten senden von Daten, muß mit dem Aufruf send_start() erstmal die
    'Bitmuster zum einschwingen gesendet werden.
    'Dauer ca 9,7 ms
    'Übergabe: zu sendene Variable (word) Manchestercodiert
    'Rückgabe: keine
    Sub Send_code(byval Daten As Word)
    
       Local Bit_number As Byte
    
       'Startbit senden
       Set Funk
       Waitus Bit_zeit
    
       'Anzahl der zu übertragenen Bits
       Bit_number = 16
    
          Do
             Decr Bit_number
    
             'Bit abfragen und reagieren
             If Daten.bit_number = 1 Then
                Set Funk
             Else
                Reset Funk
             End If
    
             'benötigte Zeit warten
             Waitus Bit_zeit
    
          Loop Until Bit_number = 0
    
       Reset Funk
    
       'kleine Pause, damit der Empfäger das Ende/Start  erkennen kann
       Waitus Bit_wait_start
    
    End Sub
    
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Umrechnen eiens Bytes in Manchester Code
    'Hier wird das übergebene Byte mit Manchestercode codiert.
    'Dauer ca
    ' Übergabe: byte, umzurechene Byte
    ' Rückgabe: word, umgerechnete Variable
    Sub Make_manchester(byval Daten As Byte)
    
       Local Bit_number As Byte
       Local Manchester As Word
    
       'Anzahl der zu umzurechnen  Bits
       Bit_number = 8
    
          Do
             Shift Manchester , Left , 2
             Decr Bit_number
    
             If Daten.bit_number = 1 Then
                Manchester = Manchester + 1                     '01
             Else
                Manchester = Manchester + 2                     '10
             End If
    
          Loop Until Bit_number = 0
    
       Make_manchester = Manchester
    End Sub
    
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Routine zum berechnen der CRC 16 Cecksumme, aus Bascom Buch
    'Crc steht am Ende in der Varablen crc
    'Übergabe: umzurechene Variable in temp1
    Calc_crc:
      'Crc = Crc16(temp1 , 8)
       Tempw_1 = Temp1 * 256
       Crc = Tempw_1 Xor Crc
       For Temp2 = 0 To 7
          If Crc.15 = 0 Then Goto Shift_only
             Tempw_2 = Crc * 2
             Crc = Tempw_2 Xor Crc_poly
             Goto Nxt
    
     Shift_only:
       Crc = Crc * 2
    
     Nxt:
       Next
    
    Return
    Empfangscode:
    Code:
    Const Takt = 4 * 10 ^ 6                                     '4 MHZ
    Const Reload = 256                                          'Timerreload
    
    
    $regfile = "m163DEF.DAT"
    $baud = 19200
    $crystal = Takt
    
    Config Serialout = Buffered , Size = 200
    
    'Ein paar Werte für die Empfangsroutine berechnen
    Const Pulse_soll = 1 * 10 ^ -3                              'Bitzeit für ein Manchesterbit 01 / 10  in ms
    Const Pulse_min_temp = Takt / Reload * Pulse_soll * 0.4 * 0.8
    Const Pulse_1_2_temp = Takt / Reload * Pulse_soll * 0.8 * 0.8
    Const Pulse_max_temp = Takt / Reload * Pulse_soll * 1.2 * 0.8
    
    Const Start_bit = 8                                         '9 Bit ist das Startbit, muß  1  sein
    Const Pruef_bit = Start_bit + 1                             '10 Bit ist ein Prüfbit, muß immer 0 sein
    Const Timer0_reload = - Reload                              '--> 65535 - reload
    Const Crc_poly = &H1021
    Const Sync_byte = &B01010100
    Const Byte_counter = 7                                      'Anzahl der zu empfangenen Bytes
    
    
    'Definition der Variablen
    Dim Daten_temp As Word
    Dim Crc As Word
    Dim Tempw_1 As Word
    Dim Tempw_2 As Word
    'wegen dem Typcast, ungeschickt, aber sonst geht es nicht
    Dim Pulse_min As Byte
    Dim Pulse_1_2 As Byte
    Dim Pulse_max As Byte
    Pulse_min = Pulse_min_temp
    Pulse_1_2 = Pulse_1_2_temp
    Pulse_max = Pulse_max_temp
    Dim Daten As Byte
    Dim Signal_count As Byte
    Dim Signal_old As Byte                                      'Merker für BIT Zustand
    Dim Zaehler As Byte
    Dim Daten_buffer(8) As Byte
    Dim Temp1 As Byte
    Dim Temp2 As Byte
    Dim Crc_error_count As Byte
    Dim Daten_empfangen As Bit                                  ' Status Register
    
    
    'Einstellen der Ports  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Signal Alias Pina.2                                         'Eingang für Funkmodul
    Config Signal = Input
    'Led Alias Porta.2
    'Config Pina.2 = Output
    
    
    
    'Timer einstellen, wird noch auf Timer0 geändert +++++++++++++++++++++++++++++++++++
    Config Timer0 = Timer , Prescale = 1
    On Timer0 Timer0_overflow
    Enable Timer0
    Enable Interrupts
    
    'Hauptschleife. Wenn ein Byte empfangen wurde, wird geprüft ob es das Startbyte war.
    'Wenn ja, dann werden die restichen zu empfangenen Bytes in die Variable Daten_Buffer
    'geschoben. Wenn alle Bytes da sind, wird die CRC berechnet berechnet und entschieden,
    'ob die Daten gültig sind oder nicht. CRC = 0 --> Daten gültig
    
    Print "Funkempfänger 0.1b (c)"
    Print "Pulse_min_temp=" ; Pulse_min_temp
    Print "Pulse_max_temp=" ; Pulse_max_temp
    Print "Pulse_soll=" ; Pulse_soll
    Print "Pulse_1_2_temp=" ; Pulse_1_2_temp
    
    Do
     If Daten_empfangen = 1 Then                                'Daten empfangen
    
           If Daten = Sync_byte Then Zaehler = 1                'Zeiger auf Anfang stellen
    
           Daten_buffer(zaehler) = Daten                        'Daten in Buffer schieben
           Daten_empfangen = 0                                  'Status ändern
    
           If Zaehler = Byte_counter Then                       'alle Bytes da ???
    
               Gosub Check_crc                                  'CRC berechnen
    
                   If Crc <> 0 Then
                      'Hier sin die Daten ungültig
                      Incr Crc_error_count
                      Print " CRC Error  :" ; Crc_error_count
                   Else
                      'Ab hier sind die Daten gültig
    
                      Zaehler = 1
                      'Daten ausgeben, ohne Startbyte und die beiden CRC Bytes
                      Do
                         Incr Zaehler
                         Print "Datenausgabe= " ; Chr(daten_buffer(zaehler)) ;
                      Loop Until Zaehler = 5
                         Print                                  'neue Zeile
    
                     Zaehler = 0
                   End If
    
           End If
    
        Daten = 0
        Incr Zaehler
     End If
    Loop
    
    End
    
    'Die CRC Werte der empfangenen Daten berechnen. Am Schluß muß CRC = 0 sein
    Check_crc:
       Crc = 0
       Temp1 = Daten_buffer(1)
       Gosub Calc_crc
       Temp1 = Daten_buffer(2)
       Gosub Calc_crc
       Temp1 = Daten_buffer(3)
       Gosub Calc_crc
       Temp1 = Daten_buffer(4)
       Gosub Calc_crc
       Temp1 = Daten_buffer(5)
       Gosub Calc_crc
       Temp1 = Daten_buffer(6)
       Gosub Calc_crc
       Temp1 = Daten_buffer(7)
       Gosub Calc_crc
    
    Return
    
    
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Routine zum berechnen der CRC 16 Cecksumme, aus Bascom Buch
    'Crc steht am Ende in der Varablen crc
    'Übergabe: umzurechene Variable in temp1
    Calc_crc:
    
       Tempw_1 = Temp1 * 256
       Crc = Tempw_1 Xor Crc
       For Temp2 = 0 To 7
          If Crc.15 = 0 Then Goto Shift_only
             Tempw_2 = Crc * 2
             Crc = Tempw_2 Xor Crc_poly
             Goto Nxt
      Shift_only:
       Crc = Crc * 2
      Nxt:
       Next
    
       'Crc = Crc16(temp1 , 8)                            'Alternetive zu manuell
    Return
    
    
    'Hier werden die Daten empfangen und geprüft auf die Bitzeiten
    'Aufruf alle 80 µs
    Timer0_overflow:
    
       Timer0 = Timer0_reload
       Incr Signal_count
    
    
       'Ende gefunden oder Signal zu lang
       If Signal_count > Pulse_max Then
    
          'Startbit = 1 and Pruef_bit = 0 dann Daten übergeben
          If Daten_temp.pruef_bit = 0 And Daten_temp.start_bit = 1 Then
             Daten = Daten_temp
             Set Daten_empfangen
          End If
    
          Daten_temp = 0
    
      End If
    
      'Flankenwechsel ??
      If Signal <> Signal_old.1 Then
          Print " Flankenwechsel! " ; Signal_old.1
          'neuen Zustand merken
          Toggle Signal_old
    
          'Pulse zu kurz   ??
          If Signal_count < Pulse_min Then Daten_temp = 0 : Print "Pulse zu kurz -> Signal_count=" ; Signal_count
    
    
          'Start oder Abfragezeitpunkt ??
          If Daten_temp = 0 Or Signal_count > Pulse_1_2 Then
    
              'wenn noch nicht zuviele Daten, dann eine Stelle schieben
              If Daten_temp.start_bit = 0 Then Shift Daten_temp , Left , 1
    
              'Bit setzen wenn 0, da der Empfänger das Signal um 180° dreht, 0 = 1 1 =0 -> nicht notwendig
              If Signal_old = 1 Then Incr Daten_temp            ' hier 1 da receiver keine Phasenverschiebung macht
    
    
             Signal_count = 0
    
         End If
    
    
      End If
    
    
    Return
    mfg.

    Chris

  10. #20
    Gast
    Hallo

    Deine Debug Ausgaben sind nach meinem Geschmack zu lang. Ich nehme dafür immer nur ein Zeichen, damit es schnell geht, auch mit Sendebuffer.


    Code:
    'Hier werden die Daten empfangen und geprüft auf die Bitzeiten
    'Aufruf alle 80 µs
    Timer0_overflow:
    
       Timer0 = Timer0_reload
       Incr Signal_count
    
    
       'Ende gefunden oder Signal zu lang
       If Signal_count > Pulse_max Then
              print "A"
          'Startbit = 1 and Pruef_bit = 0 dann Daten übergeben
          If Daten_temp.pruef_bit = 0 And Daten_temp.start_bit = 1 Then
            Print "B"
             Daten = Daten_temp
             Set Daten_empfangen
          End If
    
          Daten_temp = 0
    
      End If
    
      'Flankenwechsel ??
      If Signal <> Signal_old.1 Then
          Print  Signal_count
    
          'neuen Zustand merken
          Toggle Signal_old
    
          'Pulse zu kurz   ??
          If Signal_count < Pulse_min Then
                  Daten_temp = 0 
                   Print "C"
           End if
    
    
          'Start oder Abfragezeitpunkt ??
          If Daten_temp = 0 Or Signal_count > Pulse_1_2 Then
                   print "D"
              'wenn noch nicht zuviele Daten, dann eine Stelle schieben
              If Daten_temp.start_bit = 0 Then
                     Shift Daten_temp , Left , 1
                     Print "E"
              End if
    
              'Bit setzen wenn 0, da der Empfänger das Signal um 180° dreht, 0 = 1 1 =0 -> nicht notwendig
              If Signal_old = 1 Then
                      Incr Daten_temp            ' hier 1 da receiver keine Phasenverschiebung macht
                       Print "F"
               end if
    
    
             Signal_count = 0
    
         End If
    
    
      End If
    
    
    Return

    Probier das mal so

    MFG
    Dieter

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test