-
        

Ergebnis 1 bis 4 von 4

Thema: Fehler bei Datenübertragung/Auswertung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.02.2010
    Beiträge
    101

    Fehler bei Datenübertragung/Auswertung

    Anzeige

    Hallo,

    ich bin verzweifelt... Hab eben mal wieder mein Projekt hervorgeholt (an dem ich seit Juli nicht mehr gearbeitet hab) und jetzt funktioniert nichts mehr.
    Vielleicht bin ich einfach zu blind den Fehler zu finden.
    Das ganze soll ermöglichen über einen USB-to-UART Converter Pins schalten zu können...
    Hier mal der Code:

    Code:
    $regfile = "M8def.dat"                                      '.dat-file ATmega8'
    $crystal = 8000000                                          'Taktfrequenz 8MHz'
    $hwstack = 350                                              'Größe Hardwarestack'
    $swstack = 350                                              'Größe Softwarestack'
    $framesize = 200                                            'Größe Frame'
    
    ''$lib "i2c_twi.lbx"                                          ' Für Hardware TWI
    
    $baud = 19200                                               'Baudrate UART
    
    Declare Sub Serial0charmatch()
    Declare Sub Verarbeiten()
    Declare Sub Setzen()
    
    ''Config Scl = Portc.5                                        'SCL-Pin
    ''Config Sda = Portc.4                                        'SDA-Pin
    
    ''Config Twi = 400000                                         'Clockspeed für SCL
    ''Twcr = &B00000100                                           'TWI einschalten
    
    ''Const Pcf_write = &H39                                      'Adresse jeelabs LuxPlug
    ''Const Pcf_read = &H40
    
    ''I2cinit                                                     'SCL und SDA initialisieren
    
    Config Serialin = Buffered , Size = 4 , Bytematch = 37      '37=%
    Enable Interrupts
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    
    Config Portb.0 = Output                                     'Kontroll-LED
    Config Portd.7 = Output                                     '1. schaltbare LED
    Config Portd.6 = Output                                     '2. schaltbare LED
    
    Dim I As Byte                                               'Splitting der Hauptschleife
    Dim Incoming_data As String * 5                             'UART Buffer
    Dim Port As String * 2                                      'Portnummer (String)
    Dim Wert As String * 2                                      'Wert -> Port (String)
    Dim B_port As Byte                                          'Portnummer (Wert)
    Dim B_wert As Byte                                          'Wert -> Port (Wert)
    'Dim Flag12 As Bit                                           'Zustand Pin 12
    'Dim Flag13 As Bit                                           'Zustand Pin 13
    
    
    Cls
    Cursor On Blink
    Lcd "USB-IO_plus"
    Waitms 150
    Locate 2 , 1
    Lcd "."
    Waitms 150
    Locate 2 , 2
    Lcd "."
    Waitms 150
    Locate 2 , 3
    Lcd "."
    Waitms 150
    Locate 2 , 4
    Lcd "initialisiert"
    
    
    Do
       Toggle Portb.0                                           'Blinkende LED zur Kontrolle des Programmdurchlaufes
       For I = 0 To 200
          Waitms 1
       Next I
    
       Setzen
    Loop
    
    End                                                         'end program
    
    
    Sub Serial0charmatch()
       Input Incoming_data Noecho                               ' Daten aus Buffer auslesen
       'Print Incoming_data                                      'Ausgabe zu Debuggingzwecken
          Verarbeiten
       Clear Serialin                                           ' Buffer leeren
    End Sub
    
    Sub Verarbeiten()
       Port = Left(incoming_data , 2)                           'Byte 2 und 3 extrahieren
       Wert = Mid(incoming_data , 3 , 2)                        'Byte 4 und 5 extrahieren
       B_port = Val(port)                                       'String zu Wert konvertieren
       B_wert = Val(wert)
       Print "Port " ; B_port ; "Wert " ; B_wert                'Ausgabe zu Debuggingzwecken
    End Sub
    
    Sub Setzen()
       Select Case B_port                                       'zu setzenden Pin auswählen
          Case 50 : If B_wert = 49 Then
                         Portd.6 = 1
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Portd.6 = 0
                         Gosub Print_off
                     End If
          Case 50 : If B_wert = 49 Then
                         Portd.7 = 1
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Portd.7 = 0
                         Gosub Print_off
                     End If
          Case Else : !nop
       End Select
    End Sub
    
    Print_on:
       Print "Pin set high"
    Return
    
    Print_off:
       Print "Pin set low"
    Return
    Momentan funktioniert so gut wie gar nichts... nur die Kontroll LED blinkt und die erste Ausgabe auf dem LCD erscheint...

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.02.2010
    Beiträge
    101
    So, ich hab jetzt noch mal einige Änderungen vorgenommen:

    Code:
    $regfile = "M8def.dat"                                      '.dat-file ATmega8'
    $crystal = 8000000                                          'Taktfrequenz 8MHz'
    $hwstack = 350                                              'Größe Hardwarestack'
    $swstack = 350                                              'Größe Softwarestack'
    $framesize = 200                                            'Größe Frame'
    
    ''$lib "i2c_twi.lbx"                                          ' Für Hardware TWI
    
    $baud = 19200                                               'Baudrate UART
    
    Declare Sub Serial0charmatch()
    Declare Sub Verarbeiten()
    Declare Sub Setzen()
    
    ''Config Scl = Portc.5                                        'SCL-Pin
    ''Config Sda = Portc.4                                        'SDA-Pin
    
    ''Config Twi = 400000                                         'Clockspeed für SCL
    ''Twcr = &B00000100                                           'TWI einschalten
    
    ''Const Pcf_write = &H39                                      'Adresse jeelabs LuxPlug
    ''Const Pcf_read = &H40
    
    ''I2cinit                                                     'SCL und SDA initialisieren
    
    Config Serialin = Buffered , Size = 4 , Bytematch = 37      '37=%
    Enable Interrupts
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    
    Config Portb.0 = Output                                     'Kontroll-LED
    Config Portd.7 = Output                                     '1. schaltbare LED
    Config Portd.6 = Output                                     '2. schaltbare LED
    
    Dim I As Byte                                               'Splitting der Hauptschleife
    Dim Incoming_data As String * 4                             'UART Buffer
    Dim Port As String * 2                                      'Portnummer (String)
    Dim Wert As String * 2                                      'Wert -> Port (String)
    Dim B_port As Byte                                          'Portnummer (Wert)
    Dim B_wert As Byte                                          'Wert -> Port (Wert)
    'Dim Flag12 As Bit                                           'Zustand Pin 12
    'Dim Flag13 As Bit                                           'Zustand Pin 13
    
    B_port = 50
    B_wert = 49
    
    Cls
    Cursor On Blink
    Lcd "USB-IO_plus"
    Waitms 150
    Locate 2 , 1
    Lcd "."
    Waitms 150
    Locate 2 , 2
    Lcd "."
    Waitms 150
    Locate 2 , 3
    Lcd "."
    Waitms 150
    Locate 2 , 4
    Lcd "initialisiert"
    
    
    Do
       Toggle Portb.0                                           'Blinkende LED zur Kontrolle des Programmdurchlaufes
       For I = 0 To 200
          Waitms 1
       Next I
    
       Setzen
       'Print "Port " ; B_port ; " Wert " ; B_wert               'Ausgabe zu Debuggingzwecken
    Loop
    
    End                                                         'end program
    
    
    Sub Serial0charmatch()
       Input Incoming_data Noecho                               ' Daten aus Buffer auslesen
          Verarbeiten
       Clear Serialin                                           ' Buffer leeren
    End Sub
    
    Sub Verarbeiten()
       Port = Left(incoming_data , 2)                           'Byte 1 und 2 extrahieren
       Wert = Mid(incoming_data , 3 , 2)                        'Byte 3 und 4 extrahieren
       B_port = Val(port)                                       'String zu Wert konvertieren
       B_wert = Val(wert)
    End Sub
    
    Sub Setzen()
       Select Case B_port                                       'zu setzenden Pin auswählen
          Case 50 : If B_wert = 49 Then
                         Portd.6 = 1
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Portd.6 = 0
                         Gosub Print_off
                     End If
          Case 51 : If B_wert = 49 Then
                         Portd.7 = 1
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Portd.7 = 0
                         Gosub Print_off
                     End If
          Case Else : !nop
       End Select
    End Sub
    
    Print_on:
       Print "Pin set high"
       B_port = 0
       B_wert = 0
    Return
    
    Print_off:
       Print "Pin set low"
       B_port = 0
       B_wert = 0
    Return
    Mir scheint es so, als ob mein Programm nicht auf das ASCII Zeichen % also Dezimal 37 reagiert, obwohl ich das so festgelegt habe. Und das komische an der Sache ist, dass es auch schon mal funktioniert hat!
    Und trotz meinem Noecho kommt immer mal wieder das, was ich sende zurück. Habs heut mehrmals kompiliert und auf den µC gebrannt. Ein mal kam nichts zurück, sonst kam immer das gesendete zurück, obwohl ich diesbezüglich gar nichts am Code geändert hab. Ich bin echt langsam ratlos.
    Wär toll, wenn sich hier mal jemand die Zeit nehmen könnte und kurz über meinen Code schauen und mir nen Tipp geben wo ich was ändern muss...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Wenn Du Bytematch nutzt, dann musst Du die Register sichern. Ich nutze immer die ischarwaiting() Methode.

    Ungetestet:
    Code:
    $regfile = "M8def.dat"                                      '.dat-file ATmega8'
    $crystal = 8000000                                          'Taktfrequenz 8MHz'
    $hwstack = 350                                              'Größe Hardwarestack'
    $swstack = 350                                              'Größe Softwarestack'
    $framesize = 200                                            'Größe Frame'
    
    ''$lib "i2c_twi.lbx"                                          ' Für Hardware TWI
    
    $baud = 19200                                               'Baudrate UART
    
    'Declare Sub Serial0charmatch()
    'Declare Sub Verarbeiten()
    'Declare Sub Setzen()
    
    ''Config Scl = Portc.5                                        'SCL-Pin
    ''Config Sda = Portc.4                                        'SDA-Pin
    
    ''Config Twi = 400000                                         'Clockspeed für SCL
    ''Twcr = &B00000100                                           'TWI einschalten
    
    ''Const Pcf_write = &H39                                      'Adresse jeelabs LuxPlug
    ''Const Pcf_read = &H40
    
    ''I2cinit                                                     'SCL und SDA initialisieren
    
    Config Serialin = Buffered , Size = 4                       'kann man bei Speichmangel immer noch runtersetzen                       ' , Bytematch = 37      '37=%
    
    Const Ledtakt = 2000
    Dim Durchlauf As Long
    
    Enable Interrupts
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    
    Kontrollled Alias Portb.0
    Led1 Alias Portd.7
    Led2 Alias Portd.6
    
    
    Config Kontrollled = Output                                 'Kontroll-LED
    Config Led1 = Output                                        '1. schaltbare LED
    Config Led2 = Output                                        '2. schaltbare LED
    
    Dim B As Byte
    Dim I As Byte                                               'Splitting der Hauptschleife
    Dim Incoming_data As String * 4                             'UART Buffer
    Dim Port As String * 2                                      'Portnummer (String)
    Dim Wert As String * 2                                      'Wert -> Port (String)
    Dim B_port As Byte                                          'Portnummer (Wert)
    Dim B_wert As Byte                                          'Wert -> Port (Wert)
    'Dim Flag12 As Bit                                           'Zustand Pin 12
    'Dim Flag13 As Bit                                           'Zustand Pin 13
    
    B_port = 50
    B_wert = 49
    
    Cls
    Cursor On Blink
    Lcd "USB-IO_plus"
    Waitms 150
    Locate 2 , 1
    Lcd "."
    Waitms 150
    Locate 2 , 2
    Lcd "."
    Waitms 150
    Locate 2 , 3
    Lcd "."
    Waitms 150
    Locate 2 , 4
    Lcd "initialisiert"
    
    
    Do
       Gosub Taktled
       If Ischarwaiting() = 1 Then
          Gosub Empfangen
       End If
       Gosub Setzen
       'Print "Port " ; B_port ; " Wert " ; B_wert               'Ausgabe zu Debuggingzwecken
    Loop
    
    End
    
    Taktled:
       If durchlauf = Ledtakt Then
          Durchlauf = 0
          Toggle Kontrollled
       endif
       Incr Durchlauf
    Return                                                      'end program
    
    
    Empfangen:
    
       B = Inkey()
       If B = 37 Then
          Gosub Verarbeiten
       Else
          If Len(incoming_data) < 4 Then
             Incoming_data = Incoming_data + Chr(b)
          Else
             Incoming_data = ""
            ' Print "...Fehler..."
          End If
       End If
    
    Return
    
    
    
    'Sub Serial0charmatch()
    '   Input Incoming_data Noecho                               ' Daten aus Buffer auslesen
    '      Verarbeiten
    '   Clear Serialin                                           ' Buffer leeren
    'End Sub
    
    Verarbeiten:
       Port = Left(incoming_data , 2)                           'Byte 1 und 2 extrahieren
       Wert = Mid(incoming_data , 3 , 2)                        'Byte 3 und 4 extrahieren
       B_port = Val(port)                                       'String zu Wert konvertieren
       B_wert = Val(wert)
    Return
    
    
    Setzen:
    
    
       Select Case B_port                                       'zu setzenden Pin auswählen
          Case 50 : If B_wert = 49 Then
                         Set Led2
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Reset Led2
                         Gosub Print_off
                     End If
          Case 51 : If B_wert = 49 Then
                         Set Led1
                         Gosub Print_on
                     Elseif B_wert = 50 Then
                         Reset Led1
                         Gosub Print_off
                     End If
          Case Else : !nop                                      'wozu?
       End Select
    Return
    
    Print_on:
       Print "Pin set high"
       B_port = 0
       B_wert = 0
    Return
    
    Print_off:
       Print "Pin set low"
       B_port = 0
       B_wert = 0
    Return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.02.2010
    Beiträge
    101
    Vielen Dank für deine Antwort.
    Ich werd das mal versuchen umzusetzen. Wird aber erst Ende der Woche hin hauen, da ich bin mitte der Woche noch voll und ganz mit Klausuren ausgelastet bin.
    Ich poste dann mal meine Ergebnisse...

    Bis dahin...

Ähnliche Themen

  1. PIR auswertung
    Von avus17 im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 29.08.2011, 14:06
  2. Gyro Auswertung
    Von churchi im Forum Sensoren / Sensorik
    Antworten: 12
    Letzter Beitrag: 06.10.2009, 08:26
  3. Auswertung des PDS der Sharpsensoren
    Von MicroTex im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 06.04.2006, 22:21
  4. VB Com Port Auswertung!
    Von Ringo im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 3
    Letzter Beitrag: 11.08.2005, 13:40
  5. Tasten auswertung Fehler?
    Von Cybrix im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 15.06.2005, 13:02

Berechtigungen

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