-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Fehler in Software oder Programmer defekt?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.10.2007
    Beiträge
    76

    Fehler in Software oder Programmer defekt?

    Anzeige

    Hallo,

    hier erstmal mein Programm (auf das Nötigste gekürzt)

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    ' =============================================================================
    ' Variablendeklaration
    ' =============================================================================
    Dim I As Integer                                            'Zählvariable
    
    Dim Servodevice As Byte                                     'Servoansteuerung
    Dim Servocommand As Byte
    Dim Servonummer As Byte
    Dim Servodata As Byte
    
    Dim Greifer As Integer                                      'Greiferposition
    Dim Greifergelenk As Integer
    Dim Mittelgelenk As Integer
    Dim Hauptgelenk1 As Integer
    Dim Hauptgelenk2 As Integer
    
    
    ' =============================================================================
    ' Konfiguration
    ' =============================================================================
    Config Portb = Input                                        'Input1 für Taster
    Config Portc = Output                                       'Output für LEDs
    Config Portd = Input                                        'Input2 für Taster
    Config Portd.7 = Output                                     'Output für Sounds
    Config Scl = Portc.0                                        'Ports fuer I2C-Bus
    Config Sda = Portc.1
    
    Config Pina.0 = Output                                      'Kommunikation
    Stepper_enable Alias Porta.0                                'mit MOTCTRL
    Config Pina.1 = Output
    Stepper_richtung Alias Porta.1
    Config Pina.2 = Output
    Stepper_takt Alias Porta.2
    
    
    ' =============================================================================
    ' Statusmeldung "OK"
    ' =============================================================================
    Sound Portd.7 , 400 , 200
       Waitms 100
    Sound Portd.7 , 400 , 300
       Waitms 100
    Sound Portd.7 , 400 , 400
       Waitms 100
    Sound Portd.7 , 400 , 500
       Waitms 100
    Sound Portd.7 , 400 , 600
       Waitms 100
    Sound Portd.7 , 400 , 700
       Waitms 100
    Sound Portd.7 , 400 , 800
       Waitms 100
    Sound Portd.7 , 900 , 900
       Waitms 100
    
    
    ' =============================================================================
    ' Initialisierung
    ' =============================================================================
    Portc.0 = 0                                                 'Alle LEDs an
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portc.6 = 0
    Portc.7 = 0
    
    Portb.0 = 1                                                 'Pullup-Widerstände
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Portb.4 = 1
    Portb.5 = 1
    Portb.6 = 1
    Portb.7 = 1
    
    Portd.0 = 1
    Portd.2 = 1
    Portd.4 = 1
    Portd.6 = 1
    
    Stepper_enable = 0                                          'Motor aus
    
    
    ' =============================================================================
    ' Eigentliches Programm als Endlosschleife
    ' =============================================================================
    Do
    ' =============================================================================
    ' Taster 1                       nach links schwenken
    ' =============================================================================
      If Pinb.0 = 1 Then
        Portc.0 = 0
      Else
        Portc.0 = 1
      End If
    ' =============================================================================
    ' Taster 2                       nach rechts schwenken
    ' =============================================================================
      If Pinb.2 = 1 Then
        Portc.1 = 0
      Else
        Portc.1 = 1
      End If
    ' =============================================================================
    ' Taster 3                       Element 1 heben
    ' =============================================================================
      If Pinb.4 = 1 Then
        Portc.2 = 0
      Else
        Portc.2 = 1
      End If
    ' =============================================================================
    ' Taster 4                       Element 1 senken
    ' =============================================================================
      If Pinb.6 = 1 Then
        Portc.3 = 0
      Else
        Portc.3 = 1
      End If
    ' =============================================================================
    ' Taster 5                       Greifer öffnen
    ' =============================================================================
      If Pinb.1 = 1 Then
        Portc.4 = 0
      Else
        Portc.4 = 1
      End If
    ' =============================================================================
    ' Taster 6                       Greifer schließen
    ' =============================================================================
      If Pinb.3 = 1 Then
        Portc.5 = 0
      Else
        Portc.5 = 1
      End If
    ' =============================================================================
    ' Taster 7                       Element 2 heben
    ' =============================================================================
      If Pinb.5 = 1 Then
        Portc.6 = 0
      Else
        Portc.6 = 1
      End If
    ' =============================================================================
    ' Taster 8                       Element 2 senken
    ' =============================================================================
      If Pinb.7 = 1 Then
        Portc.7 = 0
      Else
        Portc.7 = 1
      End If
    ' =============================================================================
    ' Taster 9                       Greifer heben
    ' =============================================================================
      If Pind.0 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 10                      Greifer senken
    ' =============================================================================
      If Pind.2 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 11                      UNBELEGT
    ' =============================================================================
      If Pind.4 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 12                      UNBELEGT
    ' =============================================================================
      If Pind.6 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    Loop
    
    
    End
    Ich benutze den USB-Programmer von Robotik-Hardware, habe diesen aber - wie ich an dieser Stelle leider zugeben muss - aus Versehen kurz an die I2C-Schnittstelle des RN-Boards angeschlossen und versucht, Daten zu übertragen, deswegen der Verdacht des Defekts.

    Lasse ich dieses Programm nun auf dem Board laufen, "denkt" dieses, Taste 3 wäre durchgehend gedrückt, auch wenn meine Selbstbau-Tastatur garnicht angeschlossen ist. Vorher funktionierte alles, aber vllt habe ich ja doch einen Fehler in der Software.
    Seltsam ist auch, dass der Fehler nur bei angeschlossenem Programmer auftaucht, andere (hier nicht gepostete) Teile des Programms funktionieren aber auch dann nicht mehr wie noch vor 2 Tagen.

    Was denkt ihr, habe ich den Programmer geschrottet oder liegt's an was anderem?

    Thx für eure Hilfe!

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Diese Verwechslung kann einiges zerstören. Sowohl den Programmer als auch den µC.
    In deinem Falle ist möglicherweise nur der Teil beschädigt, der mit der Taste 3 beschäftig ist. Vielleicht also nur ein PIN.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.10.2007
    Beiträge
    76
    Einen Defekt des µC kann ich mittlerweile ausschließen. Eine Übertragung der Software auf ein anderes Board bringt den gleichen Fehler mit sich. Es kann also sehr wohl sein, dass der Programmer defekt ist? Kann man das irgendwie nachprüfen?
    Hast du mal einen Blick auf den Quelltext geworfen? Da sollte alles in Ordnung sein, oder?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Versuch mit einem Testprogramm, ob du den Pin f. Taste 3 auf 0 und 1 setzen kannst.
    Code:
    Config Pinb.4=output
    DO
       portb.4 = 0 
       Waitms 1000
       portb.4 = 1
       Waitms 1000
    LOOP
    Einziges special mit dem Pin ist der SPI. Wenn der aktiviert wäre, schnappt er sich ggf. den PIN


    BTW:
    Hat nix damit zu tun, aber hier:
    Config Portd.7 = Output
    sollte sein:
    Config Pind.7 = Output

    (ganzes Port -> "Config PortX=" einzelne Pin ->"Config PinX.Y=" )
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.10.2007
    Beiträge
    76
    Ja, ich kann ihn zwischen 0 und 1 hin und her schalten, funktioniert einwandfrei.
    Kann es etwas mit dem, was du da erwähnt hast, zu tun haben? Wenn ich also einen ganzen Port ändern möchte, brauche ich port und ansonsten pin, richtig? Aber wieso schreibst du dann in deinem Quelltext:
    Code:
    portb.4 = 0
    ?

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bascom ist da ein wenig schizoid.

    Beim Config gilt:
    (ganzes Port -> "Config PortX=" einzelne Pin ->"Config PinX.Y=" )

    Bei den Befehlen gilt immer
    PINB od PINB.x wenn's um den Input geht,
    PORTB od. PORTB.x wenn's um den Output geht.

    Du solltest einmal (bei deinem Programm) den Input Pinb.4 messen und schauen, wer sich nun irrt:
    Liest der µC ein "1", obwohl der Pin auf 0 Volt steht, bzw.
    liest der µC ein "0", obwohl der Pin auf ~5 Volt steht
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Tip von mir: Ich hab die ISP-Buchsen sowie den Stecker vom Programmer rot/weiss angepinselt; die I2C-Buchsen bleiben schwarz;
    Hab mir mit so ner Verwechslung auch mal nen Programmer zerschossen...
    #ifndef MfG
    #define MfG

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    29.10.2007
    Beiträge
    76
    @ Jaecko:
    Gute Idee, werde deinen Rat befolgen

    @ PicNick:
    Ah, so ist das, in der Tat seltsam.

    Der Quelltext sieht nun so aus:
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    ' =============================================================================
    ' Variablendeklaration
    ' =============================================================================
    Dim I As Integer                                            'Zählvariable
    
    Dim Servodevice As Byte                                     'Servoansteuerung
    Dim Servocommand As Byte
    Dim Servonummer As Byte
    Dim Servodata As Byte
    
    Dim Greifer As Integer                                      'Greiferposition
    Dim Greifergelenk As Integer
    Dim Mittelgelenk As Integer
    Dim Hauptgelenk1 As Integer
    Dim Hauptgelenk2 As Integer
    
    
    ' =============================================================================
    ' Konfiguration
    ' =============================================================================
    Config Portb = Input                                        'Input1 für Taster
    Config Portc = Output                                       'Output für LEDs
    Config Portd = Input                                        'Input2 für Taster
    Config Pind.7 = Output                                      'Output für Sounds
    'Config Scl = Portc.0                                        'Ports fuer I2C-Bus
    'Config Sda = Portc.1
    
    Config Pina.0 = Output                                      'Kommunikation
    Stepper_enable Alias Pina.0                                 'mit MOTCTRL
    Config Pina.1 = Output
    Stepper_richtung Alias Pina.1
    Config Pina.2 = Output
    Stepper_takt Alias Pina.2
    
    
    ' =============================================================================
    ' Statusmeldung "OK"
    ' =============================================================================
    Sound Portd.7 , 400 , 200
       Waitms 100
    Sound Portd.7 , 400 , 300
       Waitms 100
    Sound Portd.7 , 400 , 400
       Waitms 100
    Sound Portd.7 , 400 , 500
       Waitms 100
    Sound Portd.7 , 400 , 600
       Waitms 100
    Sound Portd.7 , 400 , 700
       Waitms 100
    Sound Portd.7 , 400 , 800
       Waitms 100
    Sound Portd.7 , 400 , 900
       Waitms 100
    
    
    ' =============================================================================
    ' Initialisierung
    ' =============================================================================
    Portc.0 = 0                                                 'Alle LEDs an
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portc.6 = 0
    Portc.7 = 0
    
    Portb.0 = 1                                                 'Pullup-Widerstände
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Portb.4 = 1
    Portb.5 = 1
    Portb.6 = 1
    Portb.7 = 1
    
    Portd.0 = 1
    Portd.2 = 1
    Portd.4 = 1
    Portd.6 = 1
    
    Stepper_enable = 0                                          'Motor aus
    
    
    ' =============================================================================
    ' Eigentliches Programm als Endlosschleife
    ' =============================================================================
    Do
    ' =============================================================================
    ' Taster 1                       nach links schwenken
    ' =============================================================================
      If Pinb.0 = 1 Then
        Portc.0 = 0
      Else
        Portc.0 = 1
      End If
    ' =============================================================================
    ' Taster 2                       nach rechts schwenken
    ' =============================================================================
      If Pinb.2 = 1 Then
        Portc.1 = 0
      Else
        Portc.1 = 1
      End If
    ' =============================================================================
    ' Taster 3                       Element 1 heben
    ' =============================================================================
      If Pinb.4 = 1 Then
        Portc.2 = 0
      Else
        Portc.2 = 1
      End If
    ' =============================================================================
    ' Taster 4                       Element 1 senken
    ' =============================================================================
      If Pinb.6 = 1 Then
        Portc.3 = 0
      Else
        Portc.3 = 1
      End If
    ' =============================================================================
    ' Taster 5                       Greifer öffnen
    ' =============================================================================
      If Pinb.1 = 1 Then
        Portc.4 = 0
      Else
        Portc.4 = 1
      End If
    ' =============================================================================
    ' Taster 6                       Greifer schließen
    ' =============================================================================
      If Pinb.3 = 1 Then
        Portc.5 = 0
      Else
        Portc.5 = 1
      End If
    ' =============================================================================
    ' Taster 7                       Element 2 heben
    ' =============================================================================
      If Pinb.5 = 1 Then
        Portc.6 = 0
      Else
        Portc.6 = 1
      End If
    ' =============================================================================
    ' Taster 8                       Element 2 senken
    ' =============================================================================
      If Pinb.7 = 1 Then
        Portc.7 = 0
      Else
        Portc.7 = 1
      End If
    ' =============================================================================
    ' Taster 9                       Greifer heben
    ' =============================================================================
      If Pind.0 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 10                      Greifer senken
    ' =============================================================================
      If Pind.2 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 11                      UNBELEGT
    ' =============================================================================
      If Pind.4 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 12                      UNBELEGT
    ' =============================================================================
      If Pind.6 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    Loop
    
    
    End
    Bei den Bedingungen bin ich mir nicht ganz sicher. Muss es da
    Code:
    If PinX.Y...
    heißen oder doch
    Code:
    If PortX.Y ...
    ?
    Das mit dem Messen werde ich morgen nachholen, muss jetzt zur Arbeit.

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Genauso isses ok
    Code:
      If Pinb.4 = 1 Then 
              Portc.2 = 0 
      Else 
              Portc.2 = 1 
      End If
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    29.10.2007
    Beiträge
    76
    Gut, dann wäre das geklärt.
    Habe deinen Rat befolgt und das Ganze mal durchgemessen. Bei diesem Programm (wie es auch oben steht)
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    ' =============================================================================
    ' Variablendeklaration
    ' =============================================================================
    Dim I As Integer                                            'Zählvariable
    
    Dim Servodevice As Byte                                     'Servoansteuerung
    Dim Servocommand As Byte
    Dim Servonummer As Byte
    Dim Servodata As Byte
    
    Dim Greifer As Integer                                      'Greiferposition
    Dim Greifergelenk As Integer
    Dim Mittelgelenk As Integer
    Dim Hauptgelenk1 As Integer
    Dim Hauptgelenk2 As Integer
    
    
    ' =============================================================================
    ' Konfiguration
    ' =============================================================================
    Config Portb = Input                                        'Input1 für Taster
    Config Portc = Output                                       'Output für LEDs
    Config Portd = Input                                        'Input2 für Taster
    Config Pind.7 = Output                                      'Output für Sounds
    'Config Scl = Portc.0                                        'Ports fuer I2C-Bus
    'Config Sda = Portc.1
    
    Config Pina.0 = Output                                      'Kommunikation
    Stepper_enable Alias Pina.0                                 'mit MOTCTRL
    Config Pina.1 = Output
    Stepper_richtung Alias Pina.1
    Config Pina.2 = Output
    Stepper_takt Alias Pina.2
    
    
    ' =============================================================================
    ' Statusmeldung "OK"
    ' =============================================================================
    Sound Portd.7 , 400 , 200
       Waitms 100
    Sound Portd.7 , 400 , 300
       Waitms 100
    Sound Portd.7 , 400 , 400
       Waitms 100
    Sound Portd.7 , 400 , 500
       Waitms 100
    Sound Portd.7 , 400 , 600
       Waitms 100
    Sound Portd.7 , 400 , 700
       Waitms 100
    Sound Portd.7 , 400 , 800
       Waitms 100
    Sound Portd.7 , 600 , 900
       Waitms 100
    
    
    ' =============================================================================
    ' Initialisierung
    ' =============================================================================
    Portc.0 = 0                                                 'Alle LEDs an
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portc.6 = 0
    Portc.7 = 0
    
    Portb.0 = 1                                                 'Pullup-Widerstände
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Portb.4 = 1
    Portb.5 = 1
    Portb.6 = 1
    Portb.7 = 1
    
    Portd.0 = 1
    Portd.2 = 1
    Portd.4 = 1
    Portd.6 = 1
    
    Stepper_enable = 0                                          'Motor aus
    
    
    ' =============================================================================
    ' Eigentliches Programm als Endlosschleife
    ' =============================================================================
    Do
    ' =============================================================================
    ' Taster 1                       nach links schwenken
    ' =============================================================================
      If Pinb.0 = 1 Then
        Portc.0 = 0
      Else
        Portc.0 = 1
      End If
    ' =============================================================================
    ' Taster 2                       nach rechts schwenken
    ' =============================================================================
      If Pinb.2 = 1 Then
        Portc.1 = 0
      Else
        Portc.1 = 1
      End If
    ' =============================================================================
    ' Taster 3                       Element 1 heben
    ' =============================================================================
      If Pinb.4 = 1 Then
        Portc.2 = 0
      Else
        Portc.2 = 1
      End If
    ' =============================================================================
    ' Taster 4                       Element 1 senken
    ' =============================================================================
      If Pinb.6 = 1 Then
        Portc.3 = 0
      Else
        Portc.3 = 1
      End If
    ' =============================================================================
    ' Taster 5                       Greifer öffnen
    ' =============================================================================
      If Pinb.1 = 1 Then
        Portc.4 = 0
      Else
        Portc.4 = 1
      End If
    ' =============================================================================
    ' Taster 6                       Greifer schließen
    ' =============================================================================
      If Pinb.3 = 1 Then
        Portc.5 = 0
      Else
        Portc.5 = 1
      End If
    ' =============================================================================
    ' Taster 7                       Element 2 heben
    ' =============================================================================
      If Pinb.5 = 1 Then
        Portc.6 = 0
      Else
        Portc.6 = 1
      End If
    ' =============================================================================
    ' Taster 8                       Element 2 senken
    ' =============================================================================
      If Pinb.7 = 1 Then
        Portc.7 = 0
      Else
        Portc.7 = 1
      End If
    ' =============================================================================
    ' Taster 9                       Greifer heben
    ' =============================================================================
      If Pind.0 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 10                      Greifer senken
    ' =============================================================================
      If Pind.2 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 11                      UNBELEGT
    ' =============================================================================
      If Pind.4 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    ' =============================================================================
    ' Taster 12                      UNBELEGT
    ' =============================================================================
      If Pind.6 = 1 Then
        'Portc.0 = 0
      Else
        Sound Portd.7 , 400 , 200
      End If
    Loop
    
    
    End
    bleibt
    Code:
    PinB.6
    also das Sorgenkind, als einziger Pin Low. Es wird also korrekt eingelesen und die LED ausgeschaltet.
    Übertrage ich diese Software auf das Board
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    Config Portb = Output
    Do
       Portb.6 = 0
       Portb.4 = 0
       Waitms 5000
       Portb.6 = 1
       Portb.4 = 1
       Waitms 5000
    Loop
    lässt sich zwar auch Pin 6 toggeln, er springt aber nur auf 2,74V statt, wie Pin 4 und auch alle anderen, auf 5V.

    Kannst du dir einen Reim darauf machen?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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