- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 9 von 9

Thema: Zustandsabhängige Logik

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207

    Zustandsabhängige Logik

    Anzeige

    E-Bike
    Hallo zusammen,

    ich bin noch relativer Neuling was Programmierung angeht, daher hier meine Frage, die sicher nicht sehr schwer zu beantworten sein sollte:

    Ich habe ein Programm was über den debounce Befehl einen Tastereingang abfragt. Wenn der Taster gedrückt wird und die Prellzeit vorbei ist, wird also die fallende Flanke des Signals erkannt und ein Sub aufgerufen.

    Nun möchte ich aber zusätzliche Sicherheit einbringen, und in dem Sub zuerst noch mal den Zustand des Tasters abfragen lassen: Das Programm soll den Zustand des Eingangs für 20ms prüfen, und erst wenn wirklich während dieser 20ms dauerhaft ein Tastendruck erkannt wurde, das Sub ausführen. Sollte der Eingang während dieser 20ms noch mal seinen Zustand wechseln, soll das Programm wieder in die Hauptschleife zurückkehren und das Sub nicht ausführen.

    Wie kann ich das in Code umsetzen?

    Danke für eure Tips
    Grüße Paul

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Einfach die Debounce Zeit um 20ms verlängern.
    Sicherer geht es nicht.

    Gruß Rolf

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207
    Hi rolf,

    Nein, das ist nicht mein Problem. Es geht darum, dass ich in meiner Schaltung noch gelegentlich Störungen eingekoppelt bekomme. Wenn die Frequenz stimmt, dann wird der Debounce Befehl überlistet, weil immer im Augenblick der Eingangsabfrage ein Signal erkannt wird. Ich möchte daher noch eine Zustandsabfrage integrieren, die überprüft, ob das Signal auch tatsächlich für eine längere Dauer (20ms) anliegt, und nicht nur zwei kurze Spitzen das Sub ausgelöst haben.
    Grüße Paul

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    genau dafür gibts den debounce

    config debounce ist da das Stichwort
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207
    Hi,

    nein, ich erklärs nochmal: Stellt euch vor mein Eingangssignal inklusive Störimpulse (damit meine ich nicht das Prellen des Tasters, sondern wirklich störimpulse) sieht aus wie ein Rechtecksignal mit einer Pulsweite von 1% - Der Controller bekommt die erste Flanke und startet den debounce, fragt 20ms später wieder ab und trifft zufällig wieder eine Spitze die eingekoppelt wurde - dann führt er das Sub aus obwohl der Taster nicht gedrückt wurde.
    Grüße Paul

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    so krasse Störungen kannste z.B. auf n hoch- runter- Zähler
    ausfiltern, aber sinnvoll währs auf alle Fälle
    mal die Leitungen unter die Lupe zu nehmen bzw. den Schaltplan
    zu überarbeiten. Da sind bestimmt n paar Mängel drin.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Die Idee, in der Sub nochmals zu prüfen, ob das Signal auch korrekt war, geht mir programmiertechnisch irgendwie ganz und gar gegen den Strich.

    Jede Sub oder Funktion sollte allein ihre Aufgaben bewerkstelligen können. Wenn man da Aufgaben verschiebt und unsauber teilt, gibts später einen Code, den keiner mehr verstehen und bearbeiten kann. Grade wenn später Fehler auftreten, kann man beim Dezentralisieren von gleichen Aufgaben nicht mehr lokalisieren, wo der Fehler stecken könnte.

    Ein erster Schritt wäre, die Leitungen und Schaltung zu überprüfen und ggf. zu verbessern.

    Falls das nichts bringt, ist die Tastaturabfrage vielleicht dahingehend zu verbessern, das ein Tastendruck z.B 100ms lang verfolgt wird, ob er auch die ganzen 100ms lang vorliegt, und dann erst die Sub ausgeführt wird.

    Gruß & *Daumendrück* MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207
    Hi zusammen,

    ich geb euch vollkommen Recht mit der Ansicht, dass man derartige Störungen Hardwareseitig eliminieren sollte. Das verfolge ich auch noch parallel. Das Problem ist nur, dass ich um das ganze zu testen immer ca. 160 km weit fahren muss (die Anwendung muss auf ner Rennstrecke getestet werden, und die hab ich leider nich vor meiner haustür ^^). Deswegen wollt ich für die nächste Testfahrt alle Register ziehen. Was MeckPommER sagt trifft den Punkt doch schon mal ganz gut: Tastendruck soll 100ms lang verfolgt werden und dann erst das Sub ausgeführt - genau das meine ich ja - bloß wie setze ich das jetzt in Code um (-> wie gesagt, Anfänger in Bascom)
    Grüße Paul

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo,

    das könnte man zum Beispiel so machen:

    Code:
    Taste alias PIND.0 'oder ähnlich
    
    dim TCounter as byte
    
    Do 'Hauptschleife
    If Taste = 0 Then Call Tastendruck
    '....
    loop
    
    sub Tastendruck()
    Tcounter = 0
    for I = 1 to 100
    if Taste = 0 then incr TCounter
    waitms 1
    next
    if TCounter < 90 then exit sub 
    
    '... Hier die Verzweigung
    
    end sub
    Gruß, Stefan

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress