Hallo, ich habe folgendes Problem: An die Eingänge RA0 bis RA3 möchte ich über Kippschalter eine Spannung von 5V anlegen, um damit eine logische 1 im Programm hervorzurufen. Liegt keine Spannung an, entsprechend eine logische 0. Ich habe dabei sowohl Variante A als auch B durchprobiert (siehe Bild). In beiden Fällen liegt am geschlossenen Schalter 5V an, bei geöffnetem 0V. Leider reagiert der PIC überhaupt nicht. Habt ihr eine Idee? Evtl. liegt aber auch ein Software- oder Konfigurationsfehler vor. Hier mein Code (Auszug):
1 | //+++++++++++++++++++++++++++++++++++ Definitionswerte ++++++++++++++++++++++++++++++++++
|
2 | #define SWITCH_SL PORTAbits.RA0 //PORT für Schlusslicht(SL)-Schalter, Switch-Nummer = 0, PORTA0
|
3 | #define SWITCH_BL PORTAbits.RA1 //PORT für Bremslicht(BL)-Schalter, Switch-Nummer = 1, PORTA1
|
4 | #define SWITCH_GBL PORTAbits.RA2 //PORT für Gefahrenbremslicht(GBL)-Schalter, Switch-Nummer = 2, PORTA2
|
5 | #define SWITCH_BK PORTAbits.RA3 //PORT für Bremslichtkammer(BK)-Schalter, Switch-Nummer = 3, PORTA3
|
6 | #define SWITCH_ANZAHL 4 //die Anzahl der Eingangsswitches
|
7 | |
8 | //+++++++++++++++++++++++++++++++++++ Deklarationen ++++++++++++++++++++++++++++++++++
|
9 | |
10 | unsigned char SWITCH[SWITCH_ANZAHL] = {0,0,0,0}; //Abfrage der Switch-Eingänge |
11 | unsigned char SWITCH_NR = 0; //Zählvariable für die DEBOUNCER-Funktion |
12 | |
13 | |
14 | //++++++++++++++++++++++++++++++++++ Abfrage der Schalter ++++++++++++++++++++++++++++
|
15 | void DEBOUNCER (void) |
16 | {
|
17 | for (SWITCH_NR = 0; SWITCH_NR < SWITCH_ANZAHL; SWITCH_NR++) //Funktion zählt alle Switchnummern durch, um diese neu zu belegen |
18 | {
|
19 | switch (SWITCH_NR) //SWITCH-Array wird mit den Werten vom Eingang belegt. |
20 | {
|
21 | case 0: |
22 | if ( SWITCH_SL ) //so einlesen funktioniert nicht |
23 | {
|
24 | SWITCH[SWITCH_NR] = 1; |
25 | }
|
26 | else
|
27 | {
|
28 | SWITCH[SWITCH_NR] = 0; |
29 | }
|
30 | |
31 | break; |
32 | case 1: |
33 | SWITCH[SWITCH_NR] = SWITCH_BL; //und so auch nicht :( |
34 | break; |
35 | case 2: |
36 | SWITCH[SWITCH_NR] = SWITCH_GBL; |
37 | break; |
38 | case 3: |
39 | SWITCH[SWITCH_NR] = 1; //wird die 1 in den Code geschrieben, funktioniert alles. |
40 | break; |
41 | }
|
42 | }
|
43 | }
|
44 | |
45 | |
46 | //++++++++++++++++++++++++++++++++++ MAIN-PROGRAMM ++++++++++++++++++++++++++++
|
47 | void main(void) |
48 | {
|
49 | ADCON1 = 7; //PORTA-Pins defined as digital I/Os |
50 | TRISA = 0b11111111; //Definiere PORTA als Input (1). |
51 | TRISB = 0b11111111; |
52 | TRISC = 0; |
53 | |
54 | TRISD = 0; //Definiere PORTD als Output (0). |
55 | |
56 | while(1) |
57 | {
|
58 | DEBOUNCER(); |
59 | }
|
60 | }
|
Ich benutze im Übrigen MPLAP IDE v8.53 mit dem Compiler MPLAP C18. Datenblätter und Ähnliches kann ich auf Wunsch nachreichen. Vielen Dank schon mal vorab!