-         

Ergebnis 1 bis 2 von 2

Thema: Schiebeschalter abfragen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.10.2006
    Beiträge
    109

    Schiebeschalter abfragen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    nachdem ich jetzt so einigermassen den Durchblick habe nun eine Frage: Ich möchte an einem Pin einen Schiebeschalter abfragen (ständig 0 oder 1) und
    dann entsprechend nur einmal einen Text auf einem Display ausgeben. Habe dazu folgenden Code geschrieben:
    Anfang:

    Portd.4 = 0 'Led einschalten.
    If Pind.1 = 0 Then 'Je nach Schalterstellung wird auf dem
    Text1 = " 1 Pe" 'Display die jeweilige Betriebsart an-
    Text2 = "rson" 'gezeigt. Diese wird auch zur weiteren
    P = 0 'Verarbeitung verwendet.
    If Sta = 0 Then T = 15 '15Min. vorgeben (nur bei 1. Durchlauf)
    Elseif Pind.1 = 1 Then
    Text1 = " 2 Per"
    Text2 = "sonen" 'Dazwischen wird der Status des Tas-
    P = 1 'ters mehrfach zur weiteren Verarbei-
    If Sta = 0 Then T = 10 'tung abgefragt.10Min. vorgeben (nur
    End If 'bei 1. Durchlauf)

    If P = X Then 'Der Display wird dabei nur neu aufge-
    Cls 'baut wenn sich die Schalterstellung
    Waitms 300 'ändert.
    Locate 1 , 3
    Lcd Text1
    Locate 2 , 1
    Lcd Text2
    X = Not X
    End If

    Goto Anfang

    leier hat die Sache einen Haken, denn wenn der Schalter am Anfang schon auf 1 steht, dann wird der Display nicht aufgebaut.
    Gibst da eine elegantere Lösung um einen Pin auf eine abfallende oder ansteigende Flanke hin zu prüfen, so dass vom Programm her erst wieder eine Aktion eintritt wenn sich der Zustand ändert??

    Eine 2. Frage:
    Gibt es eine Lösung wie man trotz dem Wait-Befehl noch nebenher irgendwelche Ports einlesen kann? z.B. einen Taster für einen Abbruch?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    Soweit mir bekannt ist bestizt jeder AVR einen Pin-change-interrupt.... der ist genau dafür da bei einer Flanke an einem oder mehreren Pins einen Interrupt auszulösen. AAAABER: Der Schalter wird wahrscheinlich Prellen... das must du beim schreiben der ISR beachten!!! Sonst meldest du dich nach kaum ein paar Stunden wieder, warum das Programm nicht läuft
    Allerdings löst der Iterrupt noch nicht dein Problem, daß das Display beim ersten mal nicht aktualisiert wird...

    Zur Frage 2:
    Ja, einfach das Wait durch einen Timer ersetzen und eine loop schleife solange ausführen, bis der Timer abgelaufen ist. In der Loop-Schleife kannst du dann machen,was du willst.

    Gruß,
    SIGINT

Berechtigungen

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