Forum: Mikrocontroller und Digitale Elektronik C-Compiler und Config-Words Beschreibung bei PIC .


von skorpionx (Gast)


Lesenswert?

Ich mache erste Schritte in PIC-Programmierung. Meine ersten Versuche 
laufen
unter C-Compiler SDCC. Wie beschreibe ich Config-Words( CONFIG1H, 
CONFIG2H,
CONFIG2L usw.) wenn ich einen C-Compiler benutze? Im welchem 
Speicherart (Eeprom oder Flashprom) sind die Config-Words  abgelegt?

skorpionx

von Sven P. (Gast)


Lesenswert?

Ich kenne die PICs nicht... sollten bei PIC die "Configwords" das sein, 
was beim AVR die Fuses sind, werden die nicht von/mit dem Compiler, 
sondern mit dem Brennprogramm beschrieben.

Ansonsten noch viel Spaß mit PIC... SCNR

von (prx) A. K. (prx)


Lesenswert?

Sven Pauli wrote:

> Ich kenne die PICs nicht... sollten bei PIC die "Configwords" das sein,
> was beim AVR die Fuses sind, werden die nicht von/mit dem Compiler,
> sondern mit dem Brennprogramm beschrieben.

Bei Microchips Compilern da steht das oft direkt im Quellcode und 
folglich im Objektfile mit drin. Sowas wäre prinzipiell auch bei AVRs 
möglich - als eigene Section für die paar Bytes.

von Sven P. (Gast)


Lesenswert?

A. K. wrote:
> Bei Microchips Compilern da steht das oft direkt im Quellcode und
> folglich im Objektfile mit drin.

Er hat aber gesagt, dass er den SDCC verwendet, und der ist alles aber 
nicht von Microchip.

von (prx) A. K. (prx)


Lesenswert?

@Sven: Da das ziemlich wahrscheinlich auch bloss im Hex File an 
speziellen Pseudoadressen landet ist es ziemlich schnuppe welcher 
Compiler verwendet wird.

@skorpionx: Die Configbits aus dem Hexfile in den Controller zu jagen 
ist Sache des Programmiergeräts/-Programms. Wo genau die im Controller 
wirklich stecken ist nur deren Problem.

http://www.micahcarrick.com/04-25-2005/pic-c-programming-linux.html

von skorpionx (Gast)


Lesenswert?

Laut "sprut":
>Beim Brennen eines Programms in einen PIC müssen eine Reihe
>von Optionen ausgewählt werden, die auf die spätere Funktion des
> PIC einen großen Einfluß haben. Bei alter DOS-Software (PP.EXE)
>erfolgt das durch Kommandozeilenparameter, bei meiner Windowssoftware
>für Brenner2 und Brenner3 durch grafische Auswahlfelder. Alternativ
>können diese Parameter auch schon im Programmquelltext festgelegt werden. >Beim 
Brennen werden diese Einstellungen im Konfigurationsregister des PIC >abgelegt.

weiter:

>Man kann sich jetzt aus den einzelnen Bits ein ... Steuerwort >zusammenbasteln, 
und es in das ASM-File aufnehmen, indem man dort z.B. >folgende Zeile einfügt:

; Configuration festlegen
        __CONFIG     B'11110100100000 '

>Durch den Pseudobefehl '__CONFIG' erkennt der Assembler, dass er dieses 
>Datenwort als Config in das HEX-File aufnehmen soll, und es wird später 
>automatisch in den PIC gebrannt.

Also, so geht das in Assembler. Aber in C...?

von Chris S. (schris)


Lesenswert?

config at 0x2007 __CONFIG = _CP_OFF & _WDT_OFF & _BODEN_OFF & ...

oder
config CODE
    DATA 3F32H

IDLOCS CODE
    DATA 1234H


je nach verwendetem Linker-script.

von Stefan E. (sternst)


Lesenswert?

A. K. wrote:

> Bei Microchips Compilern da steht das oft direkt im Quellcode und
> folglich im Objektfile mit drin. Sowas wäre prinzipiell auch bei AVRs
> möglich - als eigene Section für die paar Bytes.

Nicht "wäre", sondern "ist". ;-)
http://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html

von skorpionx (Gast)


Lesenswert?

Sprut-Brenner erkennt nach dem laden von der *.hex Datei,
ob Konfiguration für PIC schon in der Datei vorhanden ist und wenn 
nicht,
gibt es ein Meldung und Konfiguration kann man von „Hand“ durchführen.
Es kann auch von Vorteil sein die Konfiguration in C-File durchzuführen.
Der Art „wie“ ist Compiler abhängig.

Bei C-18:
#pragma config OSC = HS   //CPU=20 MHz
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF  //Watchdog Timer
#pragma config LVP = OFF  //Low Voltage ICSP

SDCC:
code char at __CONFIG1H conf1 = 0x22; // Select HS OSC CPU=20 MHz
code char at __CONFIG4L conf2 = 0x81; // Disable LVP Low Voltage ICSP
code char at __CONFIG2H conf3 = 0x0E; // DIsable WDT Watchdog Timer

SDCC unterstützt auch : “#pragma code”
Vielleicht könnte man sich über diese Anweisung auch etwas basteln…

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.