PIC: Interrupt RB0 als Tasteingang

Gast #518236
Hallo,

ich bin ziemlich neu in µC-Programmierung, darf mich aber in PICs 
einarbeiten.
Ich habe das MPLAB, PICDEM 2 Plus und CCS Compiler.

Die mirgelieferten Testprogramme laufen, LCD-Display und LED kann ich 
ansteuern. Leider klappt der externe Interrupt an RB0 nicht. Die routine 
wird scheinbar gar nicht durchlaufen.
Zur Vereinfachung habe ich das Programm minimal reduziert, sollt aber so 
doch laufen, oder? An B1 und B2 sind LED , an B0 ist ein Taster 
angeschlossen

Code:

#include<18F452.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#include<display.c>

boolean a = 0;

#INT_EXT
void ext_isr(void)
{
  output_high(PIN_B2);
  a = !a;
}

void main(void)
{
  enable_interrupts(INT_EXT);
  enable_interrupts(GLOBAL);
  while(1)
  {
    if(a)
      output_high(PIN_B1);
    else
      output_low(PIN_B1);
  }
}

Hat jemand einen Rat für mich?

Vielen Dank!

Gruss

Christoph
Wie weisst Du, dass die ISR nicht aufgerufen wird?
Hast Du einen ICD2 zum Debuggen?

Ich kenne zwar CCS nicht, aber müsstest Du die LED-Anschlüsse nicht als 
Output konfigurieren, irgendwie mit TRIS?

Und Achtung! Dein Taster wird prellen und die ISR wird wohl sogar 
mehrmals durchlaufen.

Severino
Gast
Beim CCS kann man zwischen "manual I/O" und "auto I/O" wählen (heisst da 
aber anders). Beim auto-IO generiert der CCS die TRIS-Befehle gleich 
mit.
Gast
Ich kenne das PICDEM Board nicht, aber Pull-UP Wiederstände solltest Du 
schon haben. Wenn das PICDEM keine externen hat, am besten die internen 
aktivieren.
Auf dem PICDEM 2 Plus ist für RB0 ein Pullup bestückt.

Aber ist ev. Jumper J6 nicht gesteckt? Der schliesst die Leds and GND 
an.

Und funktioniert das wirklich mit dem "auto I/O". Bei so Automatismen 
habe ich immer etwas gesunde Skepsis (Vertrauen ist gut, Kontrolle ...)

Severino
Gast
Hi

Das "auto-I/O" sollte in eurem Fall aktiviert sein.
Deaktivieren tust du es mit der Zeile.
1
#use fast_IO;

Ich rate dir aber stark davon ab, dem CCS-Compiler die Steuerung der 
Tris-Register zu überlassen. Also füg die oben genannte Zeile ein und 
setze die Tris-Register immer selbst. Denn dann weist du auch immer 
welchen Zustand ein Pin gerade hat.

Ich persönlich benutze auch sehr selten die CCS-Internen Befehle, 
sondern setzte meist die Register selbst. Dazu muss man sich zuerst zwar 
eine eigene Header mit den diversen Register Adressen bauen, aber 
dadurch kann man sich dann acuh einiges erleichtern (zb.: Pin toggeln).

Hat bei dir das LED-Blink-Programm funktioniert?

Achja.. wenn du LVP nicht unbedingt brauchst, solltest du es ausschalten 
oder sonst den entsprechenden Pin auf Masse ziehen.

Kennst du die Seite von Sprut? Sie ist zwar für ASM-Programmierung, aber 
dort sind sehr viele nützliche und interessante PIC-Spezifische Sachen 
erklärt.
www.sprut.de

WEiters gibts auf der Seite von Fernando Heitor ein Tutorial für den 
CCS-Compiler, sowie ein sehr empfehlenswertes Forum(wo man als PIC 
Programmierer nicht immer dumm angemacht wird ;-))

http://www.fernando-heitor.de/

Und hier gleich ein Link zum externen Interrupt:
http://www.fernando-heitor.de/component/option,com_openwiki/Itemid,123/id,tutorials:ccs:kapitel_2/

mfg SChoasch
Gast
Ich habe mit eurer Hilfe weiter probiert:
Den Jumper J6 habe ich entfernt und statt der Ausgabe auf die LED 
(PIN_B1) habe ich die Ausgabe auf den Buzzer (PIN_C2) gelegt.
Das funktioniert!

Sobald ich dann den Jumper J6 wieder stecke, sehe ich, dass meine 
Kontroll-LED (PIN_B2) ebenfalls an ist, aber erst bei dann wieder 
gestecktem J6. Die ISR wurde also durchlaufen und mein Buzzer hat ja 
auch auf die Taste reagiert. Die LEDs an Port B mit der Beschaltung 
machen da die Probleme auf dem PICDEM 2 Plus.

Danke fuer die Hilfe und die Link-Infos!

Grüsse

Christoph

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.