mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16C74 Interruptproblem?


Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe beim Programmieren des PIC 16C74 ein Problem mit der 
Interruptroutine. Die Parameter des PICs sind so eingestellt, dass die 
ISR bei einer Änderung an Port B durchlaufen wird. Ich habe nun ein 10Hz 
Signal an PIN_B1 angehängt. Mein Problem ist nun, das die ISR nicht 
nicht durchlaufen wird und fdd immer 0 ist.
Das 10 Hz Rechtecksignal an PIN_B1 habe ich mit dem Oszi überprüft und 
hat die Zustände 0.1V und 4.8V.

Kann mir jemand weiterhelfen?
Kurt

Programm(Im PCW PIC C Compiler geschrieben):

//globale Variablen, damit die ISR auch zugreifen kann
unsigned int fa=0, fb=0, fc=0, faa=0, fbb=0, fcc=0, fdd=0, br=0, xa=0, 
xb=0, xc=0, xd=0, xaa=0, xbb=0, xcc=0, xdd=0;

#include <INTERRU2.H>

#int_rb

rb_isr()
{

   xa=input( PIN_B2 );
   xb=input( PIN_B3 );
   xc=input( PIN_B5 );
   xd=input( PIN_B1 );
   br=input( PIN_B6 );

   if(xd!=xdd)
   {
   xdd=xd;
   fdd++;
   }


}


main()
{

  setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
  setup_port_a(ALL_ANALOG);
  setup_adc(ADC_CLOCK_INTERNAL);
  port_b_pullups(0);
  enable_interrupts(RB_CHANGE);
  enable_interrupts(GLOBAL);

  while(1)
     {
  delay_ms(250);
     //..Ausgabe von fdd über das Display..
  }
}

Autor: Stark Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die Hauptfreigabe für Interrupts freigegeben?
Beim 16F84 z.B. ist es im INTCON-Register Bit7 (GIE).
Ist dieses Bit gelöscht, werden keine Interrupts ausgeführt.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das müsste mit dem Befehl "enable_interrupts(GLOBAL);

" erfolgen....

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe noch am PIN_B6 einen Schalter dranhängen, und wenn ich diesen 
betätige, wird die ISR problemlos durchlaufen. Aber der 10Hz Rechteck an 
PIN_B1 löst keinen Start der ISR aus....
Wie ist das zu erklären?

Autor: Stark Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du mal probeweise versuchen würdest, das 10kHz-Signal an Pin_B6 
anzulegen, um zu sehen, was passiert.
Oder du legst an Pin_B1 den Taster an, um zu sehen, ob das Register 
"mechanisch" hochzählt.
Der Pin_B1 ist schon auf Eingang eingestellt,oder? (Entschuldige, aber 
ich beherrsche nur Assembler und kein C)
Hast du schon einen anderen 16C74 dazu benutzt, könnte ja sein, daß 
dieser Pin defekt ist.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PIN_B0 bis PIN_B7 sind als Eingänge definiert.

Ich habe jetzt alle Pins mit dem Schalter durchgetestet.
Es haben alle Anschlüsse ausser PIN_B0, PIN_B1, PIN_B2 funktioniert.

Ich kann mir nicht vorstellen, dass die Pin defekt sind(verwende 2 
16C74, bei beiden das gleiche Verhalten).

Komisch??

Autor: Florian S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr solltet beachten, das
- der Port-B-"Änderungs"-Interrupt nur für Port B4-B7 zuständig ist. Bei 
Änderungen an B0, B1, B2 und B3, wird also die ISR NICHT durchlaufen!!!
- Port B0 der "Ext."-Interrupteingang ist.

Gruß Flo

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt die Interruptquellen auf die PINs B4 bis B7 angehängt, jetzt 
funktioniert es einwandfrei. Danke für die Hilfe!

cu Kurt

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.