-         

Ergebnis 1 bis 9 von 9

Thema: Taster Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.03.2012
    Ort
    BaWü
    Beiträge
    31

    Taster Problem

    Anzeige

    Hallo Allerseits,

    versuche nun schon seit Wochen an meinem selbstgebauten AT Mega 8 Controller Board Taster zu verwenden, nur die wollen einfach nicht.
    Die Taster natürlich alle gegen GND geschalten

    Mein Quelltext sah dann so aus...

    $regfile = "m8def.dat"
    $crystal = 4000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32

    Config Pinb.2 = Input 'Taster 2 (-)'
    Config Pinb.3 = Input 'Taster 1 (+)'
    Config Portd.7 = Output 'LED rot'
    Config Portd.6 = Output 'LED grün'
    Config Pinb.4 = Input 'Taster 3 (Enter)'
    Config Pinb.5 = Input 'Taster 4 (Clear)'

    If Pinb.3 = 1 Then
    Portd.6 = 1
    Waitms 30
    Portd.6 = 0
    End If

    If Pinb.2 = 1 Then
    Portd.7 = 1
    Waitms 30
    Portd.7 = 0
    End If

    If Pinb.4 = 1 Then
    Portd.6 = 1
    Waitms 30
    Portd.6 = 0
    End If

    If Pinb.5 = 1 Then
    Portd.7 = 1
    Waitms 30
    Portd.7 = 0
    End If


    End

    Die Taster sollten lediglich je die passende LED kurz aufblinken lassen wenn man die drückt.

    Hättet ihr vielleicht eine Idee, was falsch sein könnte !?

    mfg Paulschen97

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Bei dir fehlt die Do-Loop Schleife.
    Dein Programm wird nur 1x durchlaufen und endet dann.
    Versuch es mal so:

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    Config Pinb.2 = Input 'Taster 2 (-)'
    Config Pinb.3 = Input 'Taster 1 (+)'
    Config Portd.7 = Output 'LED rot'
    Config Portd.6 = Output 'LED grün'
    Config Pinb.4 = Input 'Taster 3 (Enter)'
    Config Pinb.5 = Input 'Taster 4 (Clear)'
    
    Do
    
    If Pinb.3 = 1 Then
    Portd.6 = 1
    Waitms 30
    Portd.6 = 0
    End If
    
    If Pinb.2 = 1 Then
    Portd.7 = 1
    Waitms 30
    Portd.7 = 0
    End If
    
    If Pinb.4 = 1 Then
    Portd.6 = 1
    Waitms 30
    Portd.6 = 0
    End If
    
    If Pinb.5 = 1 Then
    Portd.7 = 1
    Waitms 30
    Portd.7 = 0
    End If
    
    Loop
    End
    Und sollen die LEDs wirklich nach 30ms ausgehen? Weil das siehst du kaum...änder die Zeit einfach mal auf 1 Sekunde
    Geändert von Kampi (22.09.2012 um 22:31 Uhr) Grund: Korrektur vergessen
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Kampi, wo war nochmal die do-loop Schleife?
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von HeXPloreR Beitrag anzeigen
    Kampi, wo war nochmal die do-loop Schleife?
    -.-
    Danke für den Hinweis
    Das kommt davon wenn man etliche Sachen gleichzeitig macht ^.^
    Hab den Text kopiert und wollte ihn gerade umändern als was dazwischen kam :P
    Hab es nun editiert und jetzt ist es richtig.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Hm. Wenn die Taster nach GND schalten, dann würde ich noch die Pullups einschalten und die Abfrage invertieren.

    z.B. so:
    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    Taster1 Alias Pinb.3                                        '+
    Taster2 Alias Pinb.2                                        '-
    Taster3 Alias Pinb.4                                        'Enter
    Taster4 Alias Pinb.5                                        'Clear
    Ledrot Alias Portd.7
    Ledgruen Alias Portd.6
    
    Config Ledrot = Output                                      'Standard ist eingang
    Config Ledgruen = Output
    
    Set Taster1                                                 'Pullup
    Set Taster2                                                 'Pullup
    Set Taster3                                                 'Pullup
    Set Taster4                                                 'Pullup
    ' portb=&b00111100                                           'Oder alle Pullups auf einmal, spart Code
    
    
    Do
    
    If Taster1 = 0 Then
       Set Ledgruen
    End If
    
    If Taster2 = 0 Then
       Reset Ledgruen
    End If
    
    If Taster3 = 0 Then
       Set Ledrot
    End If
    
    If Taster1 = 0 Then
       Reset Ledrot
    End If
    
    Loop
    End
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Die PullUp-Widerstände sind in der Tat unumgänglich, da ansonsten die Eingänge bei offenem Schalter frei "in der Luft" hängen, und sich aufgrund ihres sehr hohen Eingangswiderstandes ein völlig unkalkulierbares Gemisch an wilden Störsignalen einfangen. Deshalb müssen sie unbedingt über einen hochohmigen Widerstand auf einen sauberen High-Pegel gezogen werden. Und die haben die Controller gleich eingebaut - man aktiviert sie, indem man die entsprechenden Bits im PORT-Register auf 1 setzt (wie peterfido ja schon beschrieben hat).

    Aber in Deinem Code ist auch noch ein kleiner Denkfehler drin:

    Die Taster sollten lediglich je die passende LED kurz aufblinken lassen wenn man die drückt.
    Das tut Dein Code grundsätzlich auch. Aber was passiert, nachdem die LED 30 ms an war und wieder ausgeschaltet wurde? Der Controller ist bereits nach wenigen Befehlen wieder an dem gleichen Punkt, an dem der Taster abgefragt wird und die LED erneut für 30 ms angeschaltet wird. Bei 4 MHz dürften die LED somit nur wenige Mikrosekunden aus sein, bis sie wieder für 30 ms angeschaltet wird - und das erscheint dem Auge natürlich als ein dauerhaftes Leuchten.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    In Peterfidos Code-Vorschlag steckt allerdings auch ein "Bug", der möglicherweise für Verwirrung sorgen könnte:


    Code:
    
    Taster1 Alias Pinb.3                                        '+
    Taster2 Alias Pinb.2                                        '-
    Taster3 Alias Pinb.4                                        'Enter
    Taster4 Alias Pinb.5                                        'Clear
    Ledrot Alias Portd.7
    Ledgruen Alias Portd.6
    
    Config Ledrot = Output                                      'Standard ist eingang
    Config Ledgruen = Output
    
    Set Taster1                                                 'Pullup
    Set Taster2                                                 'Pullup
    Set Taster3                                                 'Pullup
    Set Taster4                                                 'Pullup
    Pin-Register kann man nicht setzen - man kann sie nur abfragen!

    Für Paulschen nochmal im Detail:
    Setzen kann man nur die PORT-Register. Ist der Anschluss ein Ausgang, legt man damit den logischen Pegel dieses Ausgangs fest. Ist der Anschluss ein Eingang, schaltet man mit dem PORT-Register den PullUp-Wierstand ein (PORTX.Y = 1) oder aus (PORTX.Y = 0).

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Stimmt, sorry. Das passiert bei "mal eben schnell". So arbeite ich normal auch nicht. Ich nutze die untere, binäre Schreibweise: portx=&b00001111 für PullUps.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Klar - das war natürlich auch nur für den Verfasser des Threads gemeint, um Verwirrung im Frühstadium zu vermeiden

Ähnliche Themen

  1. [ERLEDIGT] Problem mit Taster ab frage
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 06.01.2012, 16:53
  2. Problem mit der Taster
    Von oliver123 im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 25.04.2011, 12:46
  3. Taster erkennungs Problem
    Von patti16 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 01.01.2009, 20:21
  4. Eventuelles Taster Problem
    Von duronus im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 25.01.2007, 11:04
  5. Problem bei Taster Abfrage mit ADC
    Von MartinNRW86 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 20.09.2006, 15:37

Berechtigungen

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