-         

Ergebnis 1 bis 7 von 7

Thema: Was ist hier falsch?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    30
    Beiträge
    519

    Was ist hier falsch?

    Anzeige

    Hallo

    Ich habe für meinen Mega 8 folgendes Programm geschrieben

    Code:
    $regfile = "m8def.dat"                                      'ATmega8
    $crystal = 3686411                                          'Quarz: 3686411 Hz
    
    Declare Sub Tasterlinks
    Declare Sub Tasterrechts
    Declare Sub Anhalten
    
    Ddrd = &B11110000                                           'Pin PD4 bis PD7 als Ausgänge
    Ddrb = &B00000000
    
    Portd.2 = 1                                                 'Taser  1
    Portd.3 = 1                                                 'Taster 2
    Portb.0 = 1                                                 'Taster 3
    
    
    
    
    Do
      Portd.4 = 1                                               'Motoren drehen in gleiche Richtung
      Portd.5 = 0
      Portd.6 = 1
      Portd.7 = 0
    
    Debounce Pind.2 , 0 , Tasterlinks , Sub                     'Taster 1
    Sub Tasterlinks
    
         Portd.4 = 0
         Portd.6 = 0
    
         Portd.5 = 1
         Portd.7 = 1
         Waitms 1500
    
         Portd.4 = 1
         Portd.7 = 1
    
         Portd.6 = 0
         Portd.5 = 0
         Waitms 2000
    
    End Sub
    
    Debounce Pind.3 , 0 , Tasterrechts , Sub                     'Taster 2
    Sub Tasterrechts
    
         Portd.4 = 0
         Portd.6 = 0
    
         Portd.5 = 1
         Portd.7 = 1
         Waitms 1500
    
         Portd.4 = 0
         Portd.7 = 0
    
         Portd.6 = 1
         Portd.5 = 1
         Waitms 2000
    
    End Sub
    
    
    Debounce Pinb.0 , 0 , Anhalten , Sub                     'Taster 3
    Sub Anhalten
    
         Portd.4 = 0
         Portd.5 = 0
         Portd.6 = 0
         Portd.7 = 0
         Waitms 20000
    
    End Sub
    
    Loop
    End
    Bei den Tastern handelt es sich um Schließer. Sie liegen jeweils zwischen dem Mega8 und Masse

    Wenn ich das Programm aber auf meinen Mega8 überspiele benimmt er sich ziemlich komisch, ich habe ihn noch nicht an die Motoren angeschlossen sondern nur mit dem Messgerät die Spannung an den Outputs für die Motoren abgegriffen.
    Der AVR schaltet hier ständig zwischen 0V und 12V (Maximalspannung) hin und her. Ich schätze mal er geht den Befehler für die Taster nach, die aber nicht angeschlossen sind und er das deswegen gar nicht sollte...was ist hier denn falsch?

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Kollege, du hast die Sub's mitten in die DO..LOOP Schleife reingeschrieben. Das bringt Unglück.
    Darf ich dir eine andere Reihenfolge empfehlen
    Code:
    Do 
      Portd.4 = 1            'Motoren drehen in gleiche Richtung 
      Portd.5 = 0 
      Portd.6 = 1 
      Portd.7 = 0 
      Debounce Pind.2 , 0 , Tasterlinks , Sub           'Taster 1 
      Debounce Pind.3 , 0 , Tasterrechts , Sub         'Taster 2     
      Debounce Pinb.0 , 0 , Anhalten , Sub                'Taster 3 
    Loop 
    
    End
    
    '--------------------------- SUB -------------------------------------
    Sub Tasterlinks 
    
         Portd.4 = 0 
         Portd.6 = 0 
    
         Portd.5 = 1 
         Portd.7 = 1 
         Waitms 1500 
    
         Portd.4 = 1 
         Portd.7 = 1 
    
         Portd.6 = 0 
         Portd.5 = 0 
         Waitms 2000 
    
    End Sub 
    '--------------------------- SUB -------------------------------------
    Sub Tasterrechts 
    
         Portd.4 = 0 
         Portd.6 = 0 
    
         Portd.5 = 1 
         Portd.7 = 1 
         Waitms 1500 
    
         Portd.4 = 0 
         Portd.7 = 0 
    
         Portd.6 = 1 
         Portd.5 = 1 
         Waitms 2000 
    
    End Sub 
    
    '--------------------------- SUB -------------------------------------
    Sub Anhalten 
    
         Portd.4 = 0 
         Portd.5 = 0 
         Portd.6 = 0 
         Portd.7 = 0 
         Waitms 20000 
    
    End Sub
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Aha. Du sagst, du hast keine Taster angeschlossen. Dann mußt du aber die Pins mit Pullup auf +5V legen. Ist das so ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    42
    Beiträge
    849
    Das mit dem PullUp's passt schon soweit. Die internen PullUp's sind aktiviert. Damit genügt ein Taster genen GND um Low-Aktiv zu schalten (gedrückt = 0, losgelassen, Ruhestellung = 1).

    Code:
    Ddrd = &B11110000                                           'Pin PD4 bis PD7 als Ausgänge 
    ...
    Portb.0 = 1                                                 'Taster 3 
    Portd.2 = 1                                                 'Taser  1 
    Portd.3 = 1                                                 'Taster 2
    Nach dem Code sind die Pins PD0, PD2 und PD3 intern auf High gelegt mit dem internen Widerstand.

    DDR = 0
    PORT = 1

    ist immer interner PullUp

    DDR = 0
    PORT = 0

    ist immer ohne internen PullUp

    Grüße Wolfgang

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du, ich werd mal den "debounce" genau analysieren, dann weiß ich mehr.
    Ist der Effekt bei allen drei Tasten ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Also, ich seh' so keinen Fehler.

    Für ihn sind die Pins ganz einfach auf LOW

    Müßt' nochmal in der M8 Doku lesen., ob's mit Pullup was besonderes gibt.

    Setz' sie zu Testen mal extern auf high
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    30
    Beiträge
    519
    Hallo

    Ja es funktionert so, dass ein gedrückter Taster 0 ist, ein nicht angeschlossener/nicht gedrückter Taster auf 1 ist. So stand es auch in meinem Buch, das habe ich direkt so übernommen.

    Der Fehler lag darin dass ich die Subs in die DoLoop Schleife gesetzt habe.

    Danke für die Hilfe

Berechtigungen

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