mikrocontroller.net

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


Autor: Christoph (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interne Pull-UP Widerstände aktiviert (oder externe dran)?

Autor: Christoph (Gast)
Datum:

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

Autor: Severino R. (severino)
Datum:

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

Autor: König Europas (Gast)
Datum:

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

Autor: König Europas (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
edit: Widerstände (oh Gott...)

Autor: Severino R. (severino)
Datum:

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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Das "auto-I/O" sollte in eurem Fall aktiviert sein.
Deaktivieren tust du es mit der Zeile.
#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...

mfg SChoasch

Autor: Christoph (Gast)
Datum:

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


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.