- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: Basic Programmierschwierigkeiten

  1. #1

    Basic Programmierschwierigkeiten

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich bring mir gerade Basic bei.
    ich programmiere über Bascom einen atmega8.
    ich möchte wenn eine taste 3s lang gedrückt wird so ein bestimmter Ausgang schalten.
    wie kann ich das in basic programmieren.

    also:
    if Taster (3s gedrückt) then Ausgang 1 aktiv
    if Taster (nochmals 3s gedrückt) then Ausgang 1 deaktiv

    hab schon den "Taster AND WAITMS 3000 then Ausgang1" aktiv
    ausprobiert aber da bringt er mir nur fehlermeldungen

    danke
    mfg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo rocketman123,

    so einfach wird das nicht gehen.
    Du müßtest folgendes versuchen:

    1. Du müßtest den Taster regelmässig in bestimmten Abständen, z.B. 5x pro Sekunde (alle 200ms), abfragen. Also: Taste abfragen, dann 200 ms Pause.
    2. In einer Schleife geschieht das 3 Sekunden lang, also insgesamt 15 Mal. Sieh dir in der Hilfe die Schleifen an (DO-LOOP und WHILE-WEND)!
    3. Damit die Schleife 3 Sekunden läuft, brauchst du einen Zähler (eine Variable), der die Schleife nach 15 Durchläufen abbricht (DO-LOOP UNTIL Zähler > 15).
    4. Wenn alle 15 Tasterabfragen = 1 sind, dann wird die LED ein- oder ausgeschaltet (getoggelt). Wenn eine der Abfragen = 0 ist, wird die Schleife sofort abgebrochen (EXIT DO) und neu gestartet.

    Versuch 'mal dein Glück.

    Gruß Dirk

  3. #3
    kann mir jemand ein beispiel prgramm geben. ich bin noch nicht so fit in basic. oder ne seite wo ich mich schlau machen kann und basic für Bascom lernen kann

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    hmm, ich würde es so machen:

    Code:
    'hier davor noch das übliche geschribsel. statt den buchstaben x,y,p und q,
    'die gleich noch kommen musst du dir eben die entsprechenden 
    'Portnamen bzw die pinnummern eingeben
    
    
    PINx.y = Input   'Pin y von Port x als Eingang
    PORTx.y = 1      'Pullup von dem pin an
    Taster Alias PINx.y   'Pin y von port x heißt jetzt "Taster"
    
    Portp.q = Output 'Pin q von Port p ist dein output, wird nach 3 sec taster=0 getoggelt
    Ausgang Alias Portp.q 'jetzt heißt der pin q von port p "Ausgang
    
    dim Zähler as byte   'Variable "Zähler" deklariert
    
    
    'Hauptschleife kommt jetzt:
    
    Do
    
      Zähler = 0            'das setzt den Zähler wieder zurück, wenn die While-schleife 
                                 'unterbrochen wurde. wird auch gebraucht, damit "Zähler"
                                 'einen bestimmten Wert hat, wenn die While-Schleife beginnt
    
      while Taster = 0    'der Taster an Pin y von Port x muss nach GND gehen,
                                 'darum ist logisch 1 hier low, also 0. wenn Taster = 1, 
                                 'dann hört die while-schleife auf, wird über die Do-Loop-Schleife
                                 'aber immer wieder aufgerufen. dadurch wird nach jeder 
                                 'Tasterunterbrechung neu angefangen zu zählen
        Zähler = Zähler + 1 'Die Variable "Zähler wird um 1 erhöht
        if Zähler = 30 Then   'wenn Zähler 30 mal um eins erhöht wurde,
                                       'was aufgrund der waitms-funktion nur 10mal pro sec passiert,
                                       'dann
    
           toggle Ausgang      'wird der ausgang getoggelt
           Zähler = 0             'der zähler wieder rückgesetzt
           endif                     'und neu angefangen
    
        waitms 100              'das ist die waitms- funktion. wenn du genauere ergebnisse haben willst,
                                     'setze sie auf 10 und bei der if- anweisung "if Zähler = 300" 
                                     'dann könnte nur das byte nicht mehr ausreichen,
                                     'als dass die Variable "Zähler " definiert ist.
    
        Wend
    
    loop
    Ich habs jetzt mal für nen Mega8515 ausprobiert und port-/pinnamen eingegeben:
    Code:
    $regfile = "m8515.dat" 
     $framesize = 32 
     $swstack = 32 
     $hwstack = 32 
     $crystal = 8000000 
    
    
    
    
    Config Pina.0 = Input                                       'Pin y von Port x als Eingang 
    Porta.0 = 1                                                 'Pullup von dem pin an 
    Taster Alias Pina.0                                         'Pin y von port x heißt jetzt "Taster" (kann sein, dass es "Taster Alias PORTx.y" heißen muss) 
    
    Config Porta.1 = Output                                     'Pin q von Port p ist dein output, wird nach 3 sec taster=0 getoggelt 
    Ausgang Alias Porta.1                                       'jetzt Heißt Der Pin Q Von Port P "Ausgang" 
    
    Dim Zaehler As Byte                                         'Variable "Zähler deklariert" 
    
    
    'Hauptschleife kommt jetzt: 
    
    Do 
    
      Zaehler = 0 
    
      While Taster = 0             'der Taster an Pin y von Port x muss nach GND gehen, 
                                ' darum ist logisch 1 hier low, also 0. wenn Taster = 1, 
                                ' dann hört die while-schleife auf 
        Zaehler = Zaehler + 1                                   'die Variable "Zähler wird um 1 erhöht" 
    
        If Zaehler = 30 Then                                    'wenn Zähler 30 mal um eins erhöht wurde, 
                                       'was aufgrund der waitms-funktion nur 10mal pro sec passiert, dann 
    
           Toggle Ausgang                                       'wird der ausgang getoggelt 
           Zaehler = 0                                          'der zähler wieder rückgesetzt 
           End If                                               'und neu angefangen 
    
        Waitms 100                   'das ist die waitms- funktion. wenn du genauere ergebnisse haben willst, 
                                     'setze sie auf 10 und bei der if- anweisung "if Zähler = 300" 
                                      'dann könnte nur das byte nicht mehr ausreichen, 
                                      'als welches die Variable "Zähler " definiert ist. 
    
       Wend            
    
    Loop
    EDIT: fehler behoben, funktioniert!
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    evlt. kann der befehl bitwait auch helfen?
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    öhm, hehe, bin auch nurn neuling, wie funzt denn der bitwait?

    EDIT: thx, ok, aber nicht mehr heute
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    , ja nun hab seit 14 Monaten Bascom nicht angefasst. mache das meiste mit ASM. aber guck mal bitte in die Bascom Hilfe, da sollte das stehen
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Gnaaah, ich bin doof!

    hinter While und die Bedingung gehört natürlich KEIN "THEN"

    so isses für den compiler richtig, ich probiers gleich mal aus:
    Code:
    $regfile = "m8515.dat" 
     $framesize = 32 
     $swstack = 32 
     $hwstack = 32 
     $crystal = 8000000 
    
    
    
    
    Config Pina.0 = Input                                       'Pin y von Port x als Eingang 
    Porta.0 = 1                                                 'Pullup von dem pin an 
    Taster Alias Pina.0                                         'Pin y von port x heißt jetzt "Taster" (kann sein, dass es "Taster Alias PORTx.y" heißen muss) 
    
    Config Porta.1 = Output                                     'Pin q von Port p ist dein output, wird nach 3 sec taster=0 getoggelt 
    Ausgang Alias Porta.1                                       'jetzt Heißt Der Pin Q Von Port P "Ausgang" 
    
    Dim Zaehler As Byte                                         'Variable "Zähler deklariert" 
    
    
    'Hauptschleife kommt jetzt: 
    
    Do 
    
      Zaehler = 0 
    
      While Taster = 0             'der Taster an Pin y von Port x muss nach GND gehen, 
                                ' darum ist logisch 1 hier low, also 0. wenn Taster = 1, 
                                ' dann hört die while-schleife auf 
        Zaehler = Zaehler + 1                                   'die Variable "Zähler wird um 1 erhöht" 
    
        If Zaehler = 30 Then                                    'wenn Zähler 30 mal um eins erhöht wurde, 
                                       'was aufgrund der waitms-funktion nur 10mal pro sec passiert, dann 
    
           Toggle Ausgang                                       'wird der ausgang getoggelt 
           Zaehler = 0                                          'der zähler wieder rückgesetzt 
           End If                                               'und neu angefangen 
    
        Waitms 100                   'das ist die waitms- funktion. wenn du genauere ergebnisse haben willst, 
                                     'setze sie auf 10 und bei der if- anweisung "if Zähler = 300" 
                                      'dann könnte nur das byte nicht mehr ausreichen, 
                                      'als welches die Variable "Zähler " definiert ist. 
    
       Wend            
    
    Loop
    Und es funktioniert! ich editiere noch den anderen Beitrag, damit der auch richtig ist.
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

Berechtigungen

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

12V Akku bauen