Forum: Mikrocontroller und Digitale Elektronik PIC: Interrupt RB0 als Tasteingang


von Christoph (Gast)


Lesenswert?

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

von tastendrücker (Gast)


Lesenswert?

Interne Pull-UP Widerstände aktiviert (oder externe dran)?

von Christoph (Gast)


Lesenswert?

intern ist nix aktiviert und extern auch nichts dran.
ich habe die Verschaltung auf dem PICDEM- bord genutzt.

von Severino R. (severino)


Lesenswert?

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

von König Europas (Gast)


Lesenswert?

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.

von König Europas (Gast)


Lesenswert?

Achso, ich sehe gerade deinen Oszillator: Brauchst du bei 4MHz wirklich 
HS, oder nimmst du nicht besser XT?

von tastendrücker (Gast)


Lesenswert?

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.

von tastendrücker (Gast)


Lesenswert?

edit: Widerstände (oh Gott...)

von Severino R. (severino)


Lesenswert?

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

von Schoaschi (Gast)


Lesenswert?

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

von Christoph (Gast)


Lesenswert?

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


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.