Forum: Compiler & IDEs PIC Programmierung in C, Einstiegsproblem


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

ich stehe mal wieder tierisch im mist, denn ich kriege einfach ein 
kleines Programm auf einem PIC nicht zum laufen.

Hier ist das c-File für den 16F874A mit externem 20MHz Quarz:
1
#include "C:\Daten\PIC_Prog\programme\versuch 1\main.h"
2
  #include <stdio.h>
3
4
void SysInit(void){
5
   setup_adc_ports(NO_ANALOGS);
6
   setup_adc(ADC_OFF);
7
   setup_psp(PSP_DISABLED);
8
   setup_spi(SPI_SS_DISABLED);
9
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
10
   setup_timer_1(T1_DISABLED);
11
   setup_timer_2(T2_DISABLED,0,1);
12
   setup_comparator(NC_NC_NC_NC);
13
   setup_vref(FALSE);
14
   
15
   Set_Tris_B(0xFF);
16
   Set_Tris_D(0x00);
17
}
18
19
void main(){
20
   SysInit();
21
   for(;;){
22
      OUTPUT_D(0xFF);
23
   }
24
}

und hier ist das Projekt H-File:
1
#include <16F874A.h>
2
#device adc=8
3
4
#FUSES HS
5
#FUSES NOWDT                    //No Watch Dog Timer
6
#FUSES RC                       //Resistor/Capacitor Osc with CLKOUT
7
#FUSES NOPUT                    //No Power Up Timer
8
#FUSES NOPROTECT                //Code not protected from reading
9
#FUSES NODEBUG                  //No Debug mode for ICD
10
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
11
#FUSES NOCPD                    //No EE protection
12
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected
13
#FUSES NOBROWNOUT               //No brownout reset
14
15
#use delay(clock=20000000)
16
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
17
18
#Byte PORTA = 0x05
19
#Byte PORTB = 0x06
20
#Byte PORTC = 0x07
21
#Byte PORTD = 0x08
22
#Byte PORTE = 0x09
23
24
#Bit LED0 = PORTD.0
25
#Bit LED1 = PORTD.1
26
#Bit LED2 = PORTD.2
27
#Bit LED3 = PORTD.3
28
#Bit LED4 = PORTD.4
29
#Bit LED5 = PORTD.5
30
#Bit LED6 = PORTD.6
31
#Bit LED7 = PORTD.7
32
#Bit TASTE0 = PORTB.0
33
#Bit TASTE1 = PORTB.1
34
#Bit TASTE2 = PORTB.2
35
#Bit TASTE3 = PORTB.3
36
#Bit TASTE4 = PORTB.4
37
#Bit TASTE5 = PORTB.5
38
#Bit TASTE6 = PORTB.6
39
#Bit TASTE7 = PORTB.7
Das Programm sollte einfach nur ein par LED's einschalten, aber nicht 
einmal der Quarz schwingt. Ich weiss echt nicht mehr weiter.
Als Compiler verwende ich nen ccs pcwhd oder so ähnlich.

Bis jetzt habe ich nur Atmel Prozessoren Programmiert, und da fällt mir 
von Anfang her gleich einen riesen Unterschied auf: Die AVR's lassen 
sich auch Registerweise Programmieren, da ja in den H-Files alles schön 
definiert ist, aber bei den PIC's ist alles irgendwie über Funktionen 
versteckt, irgendwie etwas unschön, oder mache ich etwas falsch?

Danke für eure Hilfe
P51D

von Zwirbeljupp (Gast)


Lesenswert?

Du solltest mal einen Schaltplan posten. In der Software sehe ich soweit 
kein Problem, dass der Quarz nicht schwingt, klingt aber nach einem 
Hardwareproblem.

> Bis jetzt habe ich nur Atmel Prozessoren Programmiert, und da fällt mir
> von Anfang her gleich einen riesen Unterschied auf: Die AVR's lassen
> sich auch Registerweise Programmieren, da ja in den H-Files alles schön
> definiert ist, aber bei den PIC's ist alles irgendwie über Funktionen
> versteckt, irgendwie etwas unschön, oder mache ich etwas falsch?

Nur weil das gerade beim CCS C Compiler so unglücklich gelöst ist, heißt 
das nicht, dass dies eine Eigenart der PIC-Controller ist. Auch PICs 
haben Register und z.B. bei den Microchip-Compilern (C18/C30/C32) sind 
alle Register auch in Headerdateien definiert.

von Patrick B. (p51d)


Angehängte Dateien:

Lesenswert?

ok, im Anhang habe ich das board und das schema.

könnten eventuell die kondensatoren beum quarz zu gross sein?

ok. ich werde dann mal den c18 ausprobieren

danke für die rasche hilfe

von Zwirbeljupp (Gast)


Lesenswert?

Du hast die LEDs ohne Vorwiderstände direkt am Port? uiuiuiui...
Die Kondensatoren am Quarz sind grenzwertig, sollten aber noch gehen. 
Testweise könntest Du hier mal 22pF einsetzen.
Viel schlimmer finde ich aber, dass es keine 100nF-Kondensatoren direkt 
an der Spannungsversorung des PICs gibt! Kann man die etwa bei den AVRs 
weglassen? ;-)

Der C18 wird Dir bei einm PIC16F nichts bringen. Den Compiler hatte ich 
nur als Beispiel genannt. Von Microchip gibt es keinen Compiler für die 
16er PICs. Allerdings würde ich für aktuelle Designs auch keinen PIC16 
mehr einsetzen (es sei denn, es gibt einen speziellen Grund, z.B. 
Kosten). Schau mal bei den 18F-PICs, mit etwas Glück findest Du sogar 
einen pinkompatiblen zum 16F874A.

gruß
daniel

von Gast (Gast)


Lesenswert?

> #FUSES RC                       //Resistor/Capacitor Osc with CLKOUT

und dann ein 20MHz Quarz? Das passt nicht!!

von Zwirbeljupp (Gast)


Lesenswert?

>> #FUSES RC                       //Resistor/Capacitor Osc with CLKOUT
> und dann ein 20MHz Quarz? Das passt nicht!!
Oha, das hab ich übersehen, ja die Zeile muss natürlich raus, wenn Du 
oben drüber bereits #FUSES HS stehen hast!

33pF ist übrigens für einen 20 MHz-Quarz doch schon zu groß (gerade 
nochmal ins Datenblatt geschaut)! Nimm hier auf jeden Fall 22pF!

von Patrick B. (p51d)


Lesenswert?

Zwirbeljupp schrieb:
> Du hast die LEDs ohne Vorwiderstände direkt am Port? uiuiuiui...
Die LEDShaben intern einen widerstand, den ich im schema weggelassen 
habe.

> Viel schlimmer finde ich aber, dass es keine 100nF-Kondensatoren direkt
> an der Spannungsversorung des PICs gibt! Kann man die etwa bei den AVRs
> weglassen? ;-)

nein, den habe ich woh vergessen....

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.