Forum: Mikrocontroller und Digitale Elektronik PIC18F14K50 Pin-INT0 immer 0, obwohl 5V anliegen.


von Andreas B. (biosniper)


Lesenswert?

*PIC18F14K50 - MPLAB v8.86*
1
void main (void)
2
{
3
  TRISA = 0b11111111;  //Alles als Eingang.
4
  LATA = 0b00000000;
5
  PORTA = 0b00000000;
6
  WPUA = 0b00000000;   //Pull-UP => OFF.
7
8
  TRISB = 0b11111111;  //Alles als Eingang.
9
  LATB = 0b00000000;
10
  PORTB = 0b00000000;
11
  WPUB = 0b00000000;   //Pull-UP => OFF.
12
13
  TRISC = 0b11101111;  //LED (RC4) als Treiber.
14
  LATC = 0b00000000;
15
  PORTC = 0b00000000;
16
17
  ANSEL  = '00000000'; //ADC => Digital.
18
  ANSELH = '00000000'; //ADC => Digital.
19
20
  while (1) {
21
  if (PORTCbits.RC0 == 0) {
22
    LATCbits.LATC4 = 1;         //LCD-Backlight => ON
23
  } else {LATCbits.LATC4 = 0; } //LCD-Backlight => OFF
24
  }
25
}

Mein Backlight-LCD leuchtet, obwohl direkt am PIN 16 
(RC0/INT0/AN4/C12IN+/Vref+) 4,8 Volt gemessen werden.
Also, nicht am Lötpad, sondern direkt am Gehäuse PIN.
Die 4,8 Volt sind mit einem 22k Pull-Up Widerstand angelegt. Vorher 
hatte ich einen 100k, aber die Änderung => 22k hat keine Änderung 
gebracht.

Alles andere funktioniert in meinem Programm, bis auf diesen PIN. Das 
obige Progrämmelchen ist nur ein kleines Testprogramm, welches auch so 
auf dem PIC laufen gelassen wurde. Ich habe den Prozessor auch schon 
ausgetauscht, aber er war nicht defekt. Es sei denn, dass beide defekt 
wären. Ich hatte aber noch nie einen defekten PIC gehabt, die sind 
scheinbar sehr robust.

Als ich vor ein paar Tagen anfing das Programm zu schreiben wollte MPLAB 
ein Update machen von 8.85 => 8.86, was ich zulies. Ich lasse ihn aber 
immer über das alte Programm updaten. Eine komplette Neuinstallation von 
MPLAB incl. C18 wäre noch die letzte Idee die ich dazu hätte. Bin noch 
davor zurückgeschreckt, weil das nicht unkompliziert war mit den ganzen 
versteckten Einstellungen.

Ich programmiere die PIC's seit etlichen Jahren, auch die INT-PIN's, 
aber so ein Problem hatte ich noch nie.

Bin am Ende meiner Weisheit, was kann das sein ?

Wahrscheinlich habe ich schon ein Brett vor dem Kopf und sehe das 
Problem nicht mehr.

Danke

von Andreas B. (biosniper)


Lesenswert?

Ich glaube es nicht, 1 Minute nachdem ich dieses Topic abgesendet habe 
sah ich den Fehler:
1
  ANSEL  = '00000000'; //ADC => Digital.
2
  ANSELH = '00000000'; //ADC => Digital.

Das muss so aussehen:
1
  ANSEL  = 0b00000000; //ADC => Digital.
2
  ANSELH = 0b00000000; //ADC => Digital.

Jetzt funktioniert alles.

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.