PIC18F4680: 5V-Spannung auf digitalen I/O schalten

OP #1787428
Lesenswert?
• ▲
▼
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!
Angehängte Dateien:
OP #1787488
Lesenswert?
• ▲
▼
Hallo Stampede,

danke für die schnelle Antwort.

zu 1. Alles klar!

zu 2. Ausgabe usw. habe ich vom Code entfernt, da ich das mit der 
einprogrammierten 1 getestet habe und alles soweit funktioniert. Es 
scheitert nur an der Schnittstelle von 5V draußen und die Berechnung als 
logische 1 im Programm.

zu 3. Mit
1
ADCON1 = 7;
 definiert man die PORTA-Pins als digitale I/Os, was ich vorgenommen 
habe. Direkt deaktivieren kann man den ADC meines Erachtens nach nicht, 
bzw. nur, wenn man ihn vorher konfiguriert hat, was ich nicht getan 
habe.

Der Knackpunkt erscheint mir deshalb in der Funktion DEBOUNCER oder in 
der Konfiguration.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.