PIC Interrupt auslösen

Gast #1441767
Lesenswert?

Taster direkt als Interruptquelle zu nutzen ist nicht sinnvoll, da man 
sie vorher per Hardware entprellen müsste. Frage die Taster in einem 
Timerinterrupt oder einem schon vorhandenen, regelmäßigen Interrupt ab 
und setze Flags, auf die das Hauptprogramm dann reagieren kann.
Gast #1441776
Lesenswert?

ok, ich richte also einen Timer gesteuerten Interrupt ein, der z.B. alle 
10tel Sekunde die Taster abfragt. Wenn der Taster aber gerade während 
der Abfrage "prellt" sodass er am Port als nicht gedrückt aufscheint, 
regiert die Abfrage nicht oder?
Gast #1441908
Lesenswert?

ok ich hab nun folgendes:

#pragma interrupt check
void check (){
   if(INTCONbits.TMR0IF==1){     //flag überprüfen
      if (led==1) led=0;
      else led=1;
      INTCONbits.TMR0IF=0;       //flag rücksetzen
   }
}


in der main funktion wird folgendes aufgerufen um die interrupts zu 
initialisieren:

void Interrupt_enable(){
  T0CON=0b10000111;     //TMR0 enable, prescaler 256
  INTCON=0b10100000;    //enable interrupts, enable TMR0 overflow 
interrupt
}

Ziel wäre es vorerst mal, die Led blinken zu lassen, tut sie aber noch 
nicht
PIC ist ein 18f4685 mit 25Mhz. Sieht jemand wo der Fehler liegt?
Gast #1442051
Lesenswert?

Ich hab jetzt die Speccs der Timer der 18F-Serie nicht im Kopf, aber 
wenn TMR0 immernoch ein 8bit-Timer ist, dann blinkt die LED schon, nur 
viel zu schnell um es zu sehen. Falls du ein Oszi hast, halt es mal an 
den LED-Ausgang dran.
#1442437
Lesenswert?

Servus alle,

also das mit den Tasten entprellen mach ich so:
interupptfähigen Eingang nehmen ,
in Interruptroutine nen Teimer starten und wieder weiter im Programm,
Interrupt vom teimer abwarten und jetzt die gewünschte Funktion 
ausführen.

Mit der Variante verbraucht man sehr wenig Rechenzeit, weil man die 
Peripherie ja Stark parallel nutzt.

Ist nur ein Vorschlag!
#1442453
Lesenswert?

mist jetzt hab ich aber ein wenig umständlich beschrieben. man braucht 
natürlich keinen interrupt für den Taster der den Timer Startet.

Aber im Interuppt die entsprechenden Ports abfragen.

PS: ich mach bei ner Tastenabfrage einfach immer 50µs Pause bei 
Matrixtastatur. Und das geht sehr gut! ist so einfacher und mit dem 
Timer eleganter.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren