www.mikrocontroller.net

Forum: Compiler & IDEs PIC Programmierung in C, Einstiegsproblem


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include "C:\Daten\PIC_Prog\programme\versuch 1\main.h"
  #include <stdio.h>

void SysInit(void){
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   Set_Tris_B(0xFF);
   Set_Tris_D(0x00);
}

void main(){
   SysInit();
   for(;;){
      OUTPUT_D(0xFF);
   }
}

und hier ist das Projekt H-File:
#include <16F874A.h>
#device adc=8

#FUSES HS
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES RC                       //Resistor/Capacitor Osc with CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected
#FUSES NOBROWNOUT               //No brownout reset

#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#Byte PORTA = 0x05
#Byte PORTB = 0x06
#Byte PORTC = 0x07
#Byte PORTD = 0x08
#Byte PORTE = 0x09

#Bit LED0 = PORTD.0
#Bit LED1 = PORTD.1
#Bit LED2 = PORTD.2
#Bit LED3 = PORTD.3
#Bit LED4 = PORTD.4
#Bit LED5 = PORTD.5
#Bit LED6 = PORTD.6
#Bit LED7 = PORTD.7
#Bit TASTE0 = PORTB.0
#Bit TASTE1 = PORTB.1
#Bit TASTE2 = PORTB.2
#Bit TASTE3 = PORTB.3
#Bit TASTE4 = PORTB.4
#Bit TASTE5 = PORTB.5
#Bit TASTE6 = PORTB.6
#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

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick B. (p51d)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #FUSES RC                       //Resistor/Capacitor Osc with CLKOUT

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

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.