www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC Interrupt auslösen


Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey

Ich arbeite mit einem PIC 18F4685. An den Pins E0,1,2 sind jeweils 
Taster angeschlossen. Können die einen Interrupt auslösen? Soweit ich es 
kapiere, können es lediglich INT0,1,2 respektive RB0,1,2...

Gruß
Bastler

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niemand einen Rat?

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne, TMR0 ist als 16 bit Timer eingestellt. Ich kann den Timer auch 
auslesen, ebenfalls das INTCONbits.TMR0IF bit wird bei Überlaufen 
gesetzt. Nur eben der Interrupt wird nicht ausgelöst

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SuperBastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bring den Timer-Interrupt immer noch nicht zum auslösen. Hat niemand 
eine Idee?

Autor: Maik Werner (werner01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also interupptvektoren hast du auch frei gelassen, also org 100 fürs 
normale Programm?
also GIE,TMR0IE und TMROIP müssen auf 1 stehen, dann springt er bei 
Überlauf zu 008. das jetzt selber auszuprobieren hab ich aber kein Bock.
TMR0=1100XXXX. das muss funzen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.