Forum: Mikrocontroller und Digitale Elektronik Pic16F877 Flankensteuerung, wie?


von Daniel P. (dpointeck)


Lesenswert?

Hallo Leute!

Ich will mich zuerst kurz vorstellen.
Bin relativ neu in der uP programmierung.
Deshalb möchte ich euch bitten mit mir ein bisschen nachsichtig zu sein.
Nun zu meinem Problem:

bitte seht euch das mal an.
ich möcht mit dem Pic ein Blinklicht überwachen,
dabei kam mir ein Interrupt am sinnvollsten vor.

Das sieht dann so aus:

zuerst überwache ich RB4 ob das Blinksignal da ist.
quasi bei jedem Blinktakt soll 1 dazugezählt werden.

void interrupt isr(void)
{

  GIE=0;

    if (RBIF)                  // Am port B hat sich etwas geändert
    {

    if ((PORTB & 0b00010000)== 0b00010000)
    {
      a++;
    }

  }

  RBIF = 0;

  GIE=1;

}

und dann auswerten--> ich sag mal min. 10 Blinktakte sind ok.

also

if(a >= 10)
{
    Blink_ok = 1;
}

mein Problem ist das ich aber noch weitere Eingänge am PortB beutze und 
ich ein High von RB4 auch ein Fehler ist.

Also meine denkweise. wenn High dann wird ohnehin nur einmal gezählt 
also kann nie 10 erreicht werden und bei low wird nicht gezählt.

so jetzt zum Fehler. Der Interrupt wird immer ausgelöst wenn sich am 
PortB was ändert und wenn die Leuchte(RB4) dauernd auf high ist, wird 
der Interrupt über einen anderern Eingang am PortB ausgelöst.
Also wird auch bei dauern High raufgezählt.

Eine Idee wäre Flankensteuerung wie funktioniert das beim 16F877???

mfg Daniel.

von Daniel P. (dpointeck)


Lesenswert?

Niemand ne Idee dazu???????????

von tastendrücker (Gast)


Lesenswert?

Du darfst eben nur zählen, wenn RB4='1' ist, und beim letzten Lesen '0' 
war.

Tip: Wenn gezählt wurde, dann das Zählen sperren und erst wieder 
freigebenbis RB4='0' ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.