- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Taster zeitgesteuert schalten lassen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169

    Taster zeitgesteuert schalten lassen

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich möchte gerne abfragen ob ein Taster gedrückt wurde, was ja nicht
    wirklich schwer ist, allerdings möchte ich erst eine Aktion durchführen
    lassen wenn der Taster z.B. 3 sec. lang gedrückt wird, um "zufälliges" drücken zu unterbinden. Einen Timer habe ich noch frei, auch schon viel gelsen, nur scheinbar nicht das richtige

    Hat jemand einen Rat für mich ?

    Danke.

    Jens

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Wie wär´s etwa so:

    Der Taster geht auf einen Interrupt-Eingang (PinX.Y), den Du auf "Change" konfiguriertst (Auslösen bei jedem H-L oder L-H - Wechsel).

    In der ISR wird geprüft, ob der Taster gerade gedrückt oder losgelassen wurde.

    Wurde er gedrückt startet der Timer, wurde er losgelassen wird der Timer angehalten und auf einen bestimmten Ausgangswert gesetzt (...):

    ISR:
    If PinX.Y = 1 then
    start timerX
    Else
    stop timerX
    timerX = ...
    End if
    Return

    Den Timer-Vorwert ... musst Du nur noch so berechnen, dass der Timer nach 3 Sekunden überläuft. In der Timer-ISR kannst Du dann die Aktion auslösen lassen.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Oder der Timer-Interrupt fragt alle paar Millisekunden den Eingang ab. Falls Taste gedrückt, zählt er ne Variable hoch, ansonsten wird diese zurückgesetzt. Falls ein bestimmter Stand erreicht wurde, wird die Aktion ausgelöst.

    So kann die Timer-ISR noch weitere Dinge erledigen, zb weitere tasten abfragen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Vielen Dank für den Tip, aber ich weiss grad nicht wie ich das anwenden kann. Ich habe mir mit print tcnt0 die Werte anzeigen lassen, aber die schwanken ja doch ziemlich stark, da weiss ich nicht wo ich ansetzen soll

    Jens

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Poste doch mal den Code - dann findet bestimmt jemand hier einen Ansatz!

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Jens,

    Du brauchst Dich garnicht um den Wert von tcnt0 kümmern.

    Was Du machen mußt, den Timer so laufen zu lassen, daß er meinetwegen alle 50 ms überläuft und den entsprechenden Interrupt einschalten.
    Timer starten,stopen ist Quatsch.

    Einfach nur laufen lassen.

    Im Interrupt machst Du folgendes

    pseudocode
    Code:
    if (TasteGedrueckt)
       Zaehler = Zaehler +1;
    else
       Zahler = 0;
    if (Zaehler == 60)
       /*Tue was, 3 Sekunden sind um*/
    Das wäre in etwa der Vorschlag von uwegw

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Hallo,

    vielen Dank.
    Ich werde es direkt zuhause ausprobieren.
    Im prinzip würde doch der Code von Dir jetzt schon reichen oder ?
    Einen extra Timer starten oder sonstwas muss ich doch eigentlich gar nicht mehr oder seh ich das falsch ?

    Ich habe eh eine endlos Abfrage für einen ADC Eingang, dazwischen habe ich jetzt folgenden Code eingefügt (Taster ist Pind.7 ):


    Do

    If Taster = 1 Then A = A + 1
    Else
    A = 0
    If A = 60 Then Print "60 sind um"



    --
    --
    --

    Loop

    Gruß
    Jens

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Jens,

    Den Timer brauchst Du um auf Deine 3 Sekunden zu kommen .
    Funktioniert denn Dein Programm ?
    Wiel lange mußt Du drücken, bis der Print Befehl ausgegeben wird ?

    Gruß Sebastian

    P.S.

    Irgendwie ist es nicht so einfach zu rechnen...
    Bei einem Timerinterrupt von 10 mS mußt Du natürlich bis 300 rechnen um auf 3 Sekunden zu kommen ...
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Hallo Sebastian,

    ja das Programm funktioniert soweit, einzigst mit dem LDR bin ich immer noch nicht so zufireden, er funktioniert zwar, aber nicht so wie ich möchte
    Das habe ich aber zum weitergrübeln hinten angestellt.

    Eine Lösung mit dem Timer gefällt mir besser.
    Ich habe jetzt festgestellt das A dann den Wert 1200 haben muss (ca., ein fach "mitgezählt" und die Printausgabe gelesen), das ist mir aber alles zu unsicher.

    Wie kann ich denn den Timer0 mit dem Pind.7 Programmtechnisch verbinden ?

    Jens

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Wie verbinden ?

    So wie das oben steht, timer0 so konfigurieren, daß er alle 10 ms einen Überlauf macht.

    In dem Overflow Interrupt, diese if else Sache rein fertig.

    300 ist doof, das passt micht mehr in ein byte, da könnte man den Timer so einstellen, daß er alle 20 ms überläuft und bis 150 Zählen, klar ?

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests