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

Thema: Tasterabfrage während das Programm wartet

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.01.2009
    Beiträge
    12

    Tasterabfrage während das Programm wartet

    Anzeige

    Praxistest und DIY Projekte
    hallo wie kann ich eine Warteschleife in mein Programm einbauen das während der Wartezeit trotzdem eine Eingabe über einen Taster zulässt

    Programmablauf soll für kurze Zeit gestopt werden , in dieser Zeit soll aber der Zustand eines Tasters abgefragt werden der dann die Warteschleife abbricht und ein Unterprogramm aufruft.

    Danke im Voraus .


    Gruß an alle im Forum.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    einfach in deiner warteschleife kontinuierlich die taster abfragen, eventuell ginge es auch über interrupt, dann würde aber dein programm unterbrochen werden, egal wo es sich gerade befindet (interrupt und taster sind aber leicht problematisch, wegen prellen)

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Hallo!

    Welche Warteschleife genau meinst du damit? Der Befehl wait(s/ms/us) hält den kompletten Prozessor an und wird selbst bei eingehenden Interrupts nicht unterbrochen.

    Du musst deine Warteschleife mit einem Timer erzeugen. Der Timer lässt sich wie folgt konfigurieren:
    Code:
    Config Timer0 = Timer , Prescale = 1
    On Timer0 Int0_isr
    Start Timer0
    Enable Timer0
    
    'Die Interrupts müssen auch global freigegeben werden
    Enable Interrupts
    Der Timer0 ist beim Mega8 ein 8bit-Zähler und der Timer1 ein 16bit-Zähler. Er zählt bis zu seinem Endwert (256 oder 65536) und löst dann einen Interrupt aus. Wohin gesprungen werden soll, definierst du mit "On Int0 ...". Mit "Start Timer0" wird der Timer gestartet und mit "Enable Timer0" wird der Interrupt freigegeben. Zu beachten ist auch, dass die Interrupts noch global freigegeben werden müssen. Der Prescaler ist gewissermaßen ein Vorteiler, der den Systemtakt teilt. Er lässt sich zwischen 1, 8, 64, 256 und 1024 einstellen.

    Dein Code würde also gewissermaßen so aussehen:
    Code:
    ' ##################
    ' # Beispiel Tasterabfrage  #
    ' # 12.01.2008 TE              #
    ' ##################
    
    Config PORTA.0 = Output
    Config PORTA.1 = Input
    PORTA.1 = 1
    
    Led alias PORTA.0
    Taster alias PORTA.1
    
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer_isr
    Start Timer0
    Enable Timer0
    
    Dim Status as Bit
    
    Do
    
    If Taster = 0 then Status = 1 else Status = 0
    
    Loop
    
    Timer_isr:
    Toggle Led
    Return
    
    End
    Dieses Programm lässt eine Led (relativ schnell) blinken und der Zustand des Tasters wird in die Bit-Variable "Status" gespeichert.


    Gruß
    Thomas


  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Hallo

    also das ein wait.. befehl den kompletten prozessor anhalten soll ist mir neu.
    ist wird einfach eine warteschleife gemacht und natürlich funktionieren die interrupts auch während einem wait.. befehl...

    du köntest auch folgendes machen (5sec warteschleife):

    Code:
    for i = 1 to 50
        waitms 100
        if taste = 1 then tuirgendwas
    next
    gruss bluesmash

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Zitat Zitat von Bluesmash
    Hallo

    also das ein wait.. befehl den kompletten prozessor anhalten soll ist mir neu.
    ist wird einfach eine warteschleife gemacht und natürlich funktionieren die interrupts auch während einem wait.. befehl...
    Zumindest funktionierts bei mir im Simulator sowie auch in Real nicht. Der Waitbefhel siwrd fertig ausgeführt und erst dann wird in die ISR gesprungen.

    MfG
    Thomas


    PS: Oder täusch ich mich da jetzt komplett?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    12.01.2009
    Beiträge
    12

    Tasterabfrage während das Programm wartet

    Herzlichen Dank für die Schnelle Hilfe ... machmal liegt das Ziel näher als man denkt .

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Das Problem mit der Waitschleife hatte ich auch schon mal. Wenn der in ner Wait ist, reagiert der nur auf einen Interrupt: den der Stromleitung.
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo,

    ein Timerinterrupt unterbricht das laufende Programm, solange es sich nicht selbst im Interrupt befindet.

    Bascom Wait-Schleifen werden von Timerinterrupts unterbrochen.

    Gruß, Michael

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.11.2008
    Ort
    Kapfenberg
    Beiträge
    628
    Zitat Zitat von Michael
    Hallo,
    Bascom Wait-Schleifen werden von Timerinterrupts unterbrochen.
    Bist du dir da wirklich sicher?

    Gruß
    Thomas

Berechtigungen

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

LiFePO4 Speicher Test