Forum: Mikrocontroller und Digitale Elektronik Startschwierigkeiten mit C-Compiler


von Tom R. (der_neue)


Lesenswert?

Hi
Ich habe ich habe versucht einen PIC mal mit C zu Programmieren. Dabei 
trat allerdings das Problem auf, dass ein Eingang immer "0" ausgibt.

Die Hardware, die ich benutze ist die Versuchsplatine aus dem Buch 
"Mikrocontroller für Einsteiger", auf der ein PIC 16F876A ist. Das ganze 
möchte ich nun mit C programmieren, da es für mich wesentlich einfacher 
ist als Assembler neu zu lernen.
Als Compiler nutze ich den von HI-TECH (lite Version).

Hier der Code ...
1
#include  <htc.h>
2
#include  <pic16f876a.h>
3
4
#ifndef _XTAL_FREQ
5
 #define _XTAL_FREQ 4000000
6
#endif
7
8
__CONFIG(CP_OFF & WDTE_OFF & BOREN_OFF & PWRTE_OFF & FOSC_XT & WRT_OFF & LVP_OFF & DEBUG_OFF & CPD_OFF);
9
10
#define T1 PORTAbits.RA4
11
#define T2 PORTAbits.RA5
12
#define T3 PORTCbits.RC0
13
#define T4 PORTCbits.RC1
14
15
#define LED1 PORTAbits.RA2
16
#define LED2 PORTAbits.RA3
17
#define LED3 PORTBbits.RB4
18
#define LED4 PORTBbits.RB5
19
20
main(void){
21
  PORTA = 0x00;
22
  PORTB = 0x00;
23
  PORTC = 0x00;  
24
25
  TRISAbits.TRISA4 = 1;
26
  TRISAbits.TRISA5 = 1;
27
  TRISCbits.TRISC0 = 1;
28
  TRISCbits.TRISC1 = 1;
29
30
  TRISAbits.TRISA2 = 0;
31
  TRISAbits.TRISA3 = 0;
32
  TRISBbits.TRISB4 = 0;
33
  TRISBbits.TRISB5 = 0;
34
35
  while(1){
36
    
37
    LED1 = !T1;
38
    LED2 = !T2;
39
    LED3 = !T3;
40
    LED4 = !T4;
41
  }
42
}

Das Programm, welches eigentlich nur Eingänge auf Ausgänge schaltet 
funktioniert soweit, außer das die LED2 dauerhaft leuchtet und somit T2 
vermutlich immer 0 ausgibt.

von (prx) A. K. (prx)


Lesenswert?

Die ADC-Portpins sind per Default auf den ADC geschaltet und erst dann 
digital nutzbar, wenn man das entsprechend einstellt. Siehe ADCON1.

von Chris B. (dekatz)


Lesenswert?

PORTA ist nach dem Einschalten im ANALOG-Mode, da kommt beim Einlesen 
des Ports immer eine "0" zurück. Entweder mit ADCON ode ANSEL 
(Datenblatt befragen!!!) auf DIGITAL umstellen.

Ahh, da war jemand schneller......

: Bearbeitet durch User
von Tom R. (der_neue)


Lesenswert?

Vielen dank an euch beide.

Die Zeile
"ADCON1 = 0b00000110;"
hats gebracht.

Grüße Tom

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.