Forum: Mikrocontroller und Digitale Elektronik PIC programmable Bits


von Anfänger (Gast)


Lesenswert?

Hallo Zusammen,

ich arbeite mich gerade in die Programmierung eines PIC12F1840 in C ein 
und habe eine kleine Frage. Ich kann zwar Register wie das TRISA 
beschreiben, beim CONFIG1 klappt es aber nicht. Im Datenblatt steht 
auch, die Bits seien "programmable" und nicht "writable". Wie muss ich 
das machen?
Ich programmiere in MPLAB von Microchip und der Compiler ist Hi-Tech.

Viele Grüße

von Michael S. (rbs_phoenix)


Lesenswert?

Für den Hi-Tech-Compiler gibt es wie für alles andere auch ein Manual 
bzw Datenblatt:
http://ww1.microchip.com/downloads/en/DeviceDoc/manual_PICC_983.pdf

Seite 49 steht beschrieben, wie es gemacht wird.

von Dave_chappelle (Gast)


Lesenswert?

Ich habe das immer so gemacht
1
#pragma config_def = 0b.10.1001.1010.1100

Ebenfalls MPLAB, Compiler kann ich dir leider nicht auswendig sagen :P

MFG
Dave

von Anfänger (Gast)


Lesenswert?

Vielen Dank! Darauf bin ich gar nicht gekommen, in der Anleitung vom 
Compiler zu schauen. Als ich den Befehl dann auch noch nicht in, sondern 
vor die main() geschrieben habe, hat es auch funktioniert :)

von Lehrmann M. (ubimbo)


Lesenswert?

Anfänger schrieb:
> Als ich den Befehl dann auch noch nicht in, sondern
> vor die main() geschrieben habe, hat es auch funktioniert :)

Wenn man mal genau darüber nachdenkt, dann ergibt auch nur das sinn. 
dDiese Bits werden einmal beim flashen gesetzt und bleieb dann bis zum 
nächsten Flashvorgang bestehen. Mit der Main-Schleife haben sie rein 
garnichts zu tun =)

von PIC Einsteiger (Gast)


Lesenswert?

Lehrmann Michael schrieb:
> Wenn man mal genau darüber nachdenkt, dann ergibt auch nur das sinn.
> dDiese Bits werden einmal beim flashen gesetzt und bleieb dann bis zum
> nächsten Flashvorgang bestehen. Mit der Main-Schleife haben sie rein
> garnichts zu tun =)

Da hast du natürlich absolut Recht. Das dachte ich mir dann auch nach 
etwa 10 Versuchen, in denen es nicht funktioniert hat...

Leider habe ich mich nun aber etwas zu früh gefreut. Ich kann zwar so 
einige Config Bits setzen, aber komischerweise nicht alle.
__CONFIG(FOSC_INTOSC);
__CONFIG(FCMEN_OFF);
funktioniert. Sobald ich aber noch einen weiteren __CONFIG() Befehl dazu 
schreibe, bekomme ich eine Fehlermeldung. Ich kann also nur 2 solcher 
Befehle schreiben. Dabei ist es egal welche, sobald ein Dritter 
dazukommt, bekomme ich den Fehler:
Error [1346] ; 0. can't find 0x3 words for psect "config" in segment 
"CONFIG" (largest unused contiguous range 0x2)

Kann mir Jemand auf die Sprünge helfen?

von Erich (Gast)


Lesenswert?

>Ich kann also nur 2 solcher Befehle schreiben.

Wahrscheinlich hat der uC auch nur 2 Config-Words.

Du kannst alle Optionen, die zum 1. bzw. zum 2. Configword gehören in 
die erste resp. zweite __CONFIG Anweisung schreiben,
z.B. ähnlich wie

// Config Word 1
   __CONFIG(FCMEN_ON  & IESO_ON   & CLKOUTEN_OFF & BOREN_ON  & CP_OFF ); 
//

// Config Word 2
   __CONFIG(LVP_OFF & DEBUG_OFF & BORV_27 ); //


Gruss

von PIC Einsteiger (Gast)


Lesenswert?

Achso, gibt es nicht auch dir Möglichkeit, mehrere __CONFIG() Befehle 
pro Configuration word zu benutzen? Das wäre schöner zu kommentieren.

Wenn ich alle Befehle zusammenfasse, funktioniert es aber schon mal, 
danke :)

von Erich (Gast)


Lesenswert?

>Das wäre schöner zu kommentieren.

Ja, wäre.
Geht aber bei diesem Compiler bzw. bei die Pic Derivat wohl nicht.
Genauso bei mir, PIC16F1xxx Typ, hatte das auch schon getestet.

von usuru (Gast)


Lesenswert?

Du kannst nur so viele CONFIG-Pragmas angeben, wie der µC CONFIG-Wörter 
hat, steht auch im Datenblatt (siehe oben). Die Bits, die zu einem Word 
gehören, werden mit "&" verkettet, siehe oben oder als Bitfolge o.ä. 
angegeben.

von usuru (Gast)


Lesenswert?

Das hier kannst Du auch noch probieren
1
  __CONFIG  _CONFIG1, _CP_OFF & _BOREN_OFF & _MCLRE_OFF
2
  __CONFIG  _CONFIG2, _PLLEN_OFF & _BORV_19 & _LVP_OFF & _FCMEN_OFF

von PIC Einsteiger (Gast)


Lesenswert?

Alles klar, dann bin ich jetzt im Bilde. Vielen Dank an alle! :)

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.