- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Zeitabhängige Abfrage eines digitalen Einganges

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81

    Zeitabhängige Abfrage eines digitalen Einganges

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich hab hier nen AT90S2313-Controller vor mir liegen und frage mich gerade, wie man es am besten eine Abfrage realisieren könnte, dass meintetwegen der Pin PB2 3 Sekunden lang auf High-Pegel liegt.

    Ich bekomme von außen ein Signal an den Controller und dieser soll nun sicherstellen, dass das Signal 3 Sekunden lang auf High-Pegel liegt.

    Das Problem ist ja jetzt, dass ich nicht einen Timer benutzen kann um alle 3 Sekunden den Pin abzufragen. In der zwischenzeit kann das Signal ja kurzzeitig von 1 auf 0 und wieder zurückspringen.

    Wäre schön wenn da jemand kreative Ideen hätte.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hast Du PD2 oder PD3 frei?
    Ich seche das so,
    Externen Interrupt bei steigender Flanke.
    In der ISR den Intrrupt auf falende Flanke umschalten und Timer starten.
    Jetzt braucht Du nur abzuwarten ob, der Timer abgelaufen , oder der extene Interrupt erneut ausgelöst worden ist.
    Wenn Timer abgelaufen, dann war er Pegel 3 sekunden lang high, wenn erneut Ext. Interrupt kam, war er keine 3 Sekunden lang.
    Ich hoffe, daß der Ansatz richtig ist...

    Gruß Sebasian

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Hi,

    mittels Hardware-Interrupt ist es natürlich am Elegantesten, damit lassen sich auch kürzeste Signalausfälle erkennen.

    Geht das nicht, lässt sich die Sache auch mit einer If-Then-Abfrage lösen. Dann muß das Signal aber für minimum einen Programmzyklus ausfallen, damit es sicher erkannt wird.

    In etwas so, in Bascom:

    Code:
    Dim Zeit_ok as Bit
    Dim Timer_on as Bit
    Dim Signal_error as Bit
    
    Do
    
    If PinX.Y = 1 and Timer_on=0 then
     Start TimerZ
     Timer_on=1
    end if
    
    If PinX.Y=0 and Timer_on=1 then
     Stop TimerZ
     Signal_error=1
    end if
    
    Loop
    Grüße

    Torsten

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    Beides nette Ansätze, obwohl mir das Verwenden des externen Interrupts besser gefällt, als eine ständige Abfrage.
    Vielen Danke.... war sehr hilfreich!!

    (Ich hätte übrigens beide Pins [Int0 und Int1] frei)

Berechtigungen

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

Labornetzteil AliExpress