Forum: Mikrocontroller und Digitale Elektronik Hilfe bei PIC Programmierung


von R. H. (snapper)


Angehängte Dateien:

Lesenswert?

MOIN, mein Problem ist das ich das Konfigurationswort mit meinem 
Programmer nicht hinbekomme, lt. der Beschreibung soll es hex2154 
ergeben, das funktioniert bei mir leider nicht, ich weis nicht was ich 
da falsch mache? Auch wenn ich Bit 0 und 1 setze ( interne/externe 
Tacktung ) komme ich nicht auf diesen Wert !?

von H. H. (Gast)


Lesenswert?

Sieht so aus, als ob deine Software MiniPro das CW invertiert.

von W.S. (Gast)


Lesenswert?

R. H. schrieb:
> MOIN, mein Problem ist das ich das Konfigurationswort mit meinem
> Programmer nicht hinbekomme,

Tja, das ist eben das Problem, wenn man immerzu nur nach irgend einer 
IDE schaut und es nicht selbst hinkriegt.
Etwa so ähnlich:
          SEG     CODE
          CORE14

; ID-Konfiguration
          ORG     2000h
          DATA    0Ah
          DATA    1
          DATA    0
          DATA    5

;===== Fuses ========================
          ORG      2007h
;                  DCBA9876543210
Config:   DATA     11111100110010b
;                   3   F   3   2

Allerdings hab ich da meine Zweifel, ob man das so ähnlich bei 
Microchip's eigenem Assembler formulieren kann. Probiere doch einfach 
aus, die Häkchen oben im Dialogfeld so zu verändern, daß dann unten die 
erwartete Zahl herauskommt. Und gegen wen willst du deinen PIC mit 
heruntergelassenem Visier (/CP) schützen?

W.S.

von Ramirez (Gast)


Lesenswert?

Die UserId hat doch nix mit der Config am Hut!

von W.S. (Gast)


Lesenswert?

Ramirez schrieb:
> Die UserId hat doch nix mit der Config am Hut!

Tja, eben.
Siehe:
R. H. schrieb:
> MOIN, mein Problem ist das ich das Konfigurationswort mit meinem
> Programmer nicht hinbekomme,

Da nützt es wirklich nichts, wenn man stattdessen User-ID0 rot 
einkringelt.

W.S.

von Hans B. (Gast)


Lesenswert?

Ich schreibe das(die) Konfigurationswort(e) mit dem MPLAB-X Assembler 
normalerweise immer direkt in den Code. -Ohne irgendwelche graphische 
Funktionen des Programmiergerätes oder der IDE zu bemühen.
Das kann dann z.B. so aussehen:
 __CONFIG _CONFIG1, b'00111111000100'
 __CONFIG _CONFIG2, b'01011111111100'

von Datenblattlesende (Gast)


Lesenswert?

Datenblatt Kapitel 14.1 Configuration Bits

"The configuration bits can be programmed (read as ‘0’)
or left unprogrammed (read as ‘1’) to select various
device configurations. These bits are mapped in
program memory location 2007h."

von Datenblattlesende (Gast)


Angehängte Dateien:

Lesenswert?

s. anlage

von old_pic_fan (Gast)


Lesenswert?

Hans B. schrieb:
> Ich schreibe das(die) Konfigurationswort(e) mit dem MPLAB-X
> Assembler
> normalerweise immer direkt in den Code. -Ohne irgendwelche graphische
> Funktionen des Programmiergerätes oder der IDE zu bemühen.
> Das kann dann z.B. so aussehen:
>  __CONFIG _CONFIG1, b'00111111000100'
>  __CONFIG _CONFIG2, b'01011111111100'

Das ist eigentlich der Normalfall, die Config-Bits in den Code zu 
schreiben. Es gibt noch eine andere Art, die gut lesbar ist, die kommt 
in den Code:

    __CONFIG _CONFIG1, __CP_ON & _CPD_OFF & _LVP_OFF & _BOREN_OFF & 
_MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _FOSC_INTOSCIO

Dann macht der Compiler alles automatisch richtig und Du musst die 
Config nicht im Progger eingeben. w.o. schon geschrieben, ist dort ein 
gesetztes Bit 0 und ein nicht gesetztes Bit 1 !!!

von R. H. (snapper)


Lesenswert?

W.S. schrieb:
> Tja, das ist eben das Problem, wenn man immerzu nur nach irgend einer
> IDE schaut und es nicht selbst hinkriegt.

Tja, das ist eben das Problem, das es hier immer wieder Leute gibt die 
sich nicht vorstellen können das es auch Bastler gibt die nicht ganz so 
tief mit der Materie vertraut sind und einfach nur mit ihrem Programmer 
einen Baustein richtig programmieren wollen und deswegen hier Hilfe 
suchen !

W.S. schrieb:
> Da nützt es wirklich nichts, wenn man stattdessen User-ID0 rot
> einkringelt.

Das Config und UserId nichts miteinander zu tun haben ist mir schon 
klar, ich habe es auch nur markiert und mit einem Fragezeichen versehen 
weil mir nicht klar ist ob da überhaupt irgendetwas eingetragen werden 
muß
oder wozu ist UserId sonst gut ?

von W.S. (Gast)


Lesenswert?

R. H. schrieb:
> oder wozu ist UserId sonst gut ?

Das ist eine _USER_-Kennzeichnung. Da kannst du eintragen was du willst 
und zu welchem nur dir bekannten Zweck. Weder der PIC noch der Assembler 
brauchen die. Manual lesen hilft auch hier.

old_pic_fan schrieb:
> Dann macht der Compiler alles automatisch richtig

Der ist doch garnicht dabei, wenn es um Assemblerprogrammierung geht. 
Und nochwas: Die Bedeutung der diversen Bits im Konfigurationswort (bzw. 
Wörtern) ist leicht unterschiedlich von Typ zu Typ. Da kann weder ein 
Compiler noch ein Assembler etwas ganz allein "automatisch" richtig 
machen, sondern er braucht dazu entsprechende Anweisungen in einer 
Konfigurationsdatei oder Datenbank oder so - und sowas muß eingebunden 
oder angezeigt werden in der Quelle. Man kann das allerdings auch selber 
erledigen, dann ist mal wieder eine Quelle für Irrtümer weniger im 
Vorhaben.

W.S.

von HildeK (Gast)


Lesenswert?

R. H. schrieb:
> lt. der Beschreibung soll es hex2154 ergeben

Offenbar hat der Beschreiber einen gesetzten Haken als 'H' gesehen. 
Deine IDE sieht aber den gelöschten Haken als 'H'.
In dem Fall hast du die Häkchen richtig gesetzt.
Haken so zu setzen, dass 0x2154 herauskommt ist bei dem Prozessor 
jedenfalls nicht möglich, denn dann müssten
a) 16 Felder da sein
b) auch alle 16 beschreibbar sein. Bei dir sind nur die Bits 0-8 und 13 
beschreibbar.
Normalerweise weiß man, welche der Fuses man aktivieren will und welche 
nicht. Dass die LOW-aktiv im Prozessor stehen, interessiert doch gar 
nicht.

H. H. schrieb:
> Sieht so aus, als ob deine Software MiniPro das CW invertiert.

Ja, so sieht's aus, ist auch beim AVR-Studio so.

R. H. schrieb:
> wozu ist UserId sonst gut ?

Ich hab zwar keine Ahnung 😀, vermutlich kannst du dich dort als Urheber 
verewigen ...

von W.S. (Gast)


Lesenswert?

HildeK schrieb:
> Haken so zu setzen, dass 0x2154 herauskommt ist bei dem Prozessor
> jedenfalls nicht möglich, denn dann müssten
> a) 16 Felder da sein

Nö.
Rechne mal nach: ne 2154h kriegt man in 14 Bit hinein. Dreimal 4 Bit und 
im höchsten Nibble nur 2 Bit.

W.S.

von HildeK (Gast)


Lesenswert?

W.S. schrieb:
> Nö.
> Rechne mal nach: ne 2154h kriegt man in 14 Bit hinein. Dreimal 4 Bit und
> im höchsten Nibble nur 2 Bit.

Ja schon, nicht aber so, dass in dem Feld Config Word (rechts unten) 
0x2154 steht, denn dann müsste er oben 1101 1110 1010 1101 setzen können 
- mit 1 für ein gesetztes Häkchen.
Das meinte ich und deshalb schafft er es auch nicht ... :-)

von Hans B. (Gast)


Lesenswert?

So ganz klar ist mir die Fragestellung bzw. das Problem nicht.
Vielleicht wird ein Fehler gesucht, der gar nicht existiert?
Das Konfigurationswort hat 14 bit.
Aber davon sind 4 bit gar nicht implementiert und daher  im Wert 
bedeutungslos.
Es gibt also für jede gewünschte Konfiguration 16 verschiedene richtige 
Konfigurationsworte, die funktional völlig gleichwertig sind.
In der gezeigten Benutzeroberfläche wird ein hex-wert angegeben aber es 
gibt auch noch 15 weitere gleichwertige.

von uxdx (Gast)


Lesenswert?

Leute, wenn ihr von der Atmel-Fraktion seid, dann seid ihr bei PIC auf 
dem falschen Dampfer: kein vernünftiger PIC-Progammierer programmiert 
Config-Bits mit dem Programmer, die schreibt man als Config-Zeile in den 
Code, setzt vorher die Include (achtung: p16... statt pic16...) zu dem 
richtigen PIC und die Chose läuft.

Beispiel aus einem aelteren Programm von mir fuer den PIC16F886:
1
;***********************************************************************
2
; Definition µC, Programm laeuft auch mit PIC16F882 und PIC16F883
3
4
    list p=16f886
5
    #include <p16f886.inc>
6
7
    ERRORLEVEL -302             ; schaltet Bank-Warnungen ab
8
9
; CONFIG fuer PIC16F886
10
11
    __CONFIG _CONFIG1, _DEBUG_OFF & _CP_OFF & _LVP_OFF & _BOR_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTOSCIO
12
    __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
13
14
;***********************************************************************
15
; Beginn Programm
16
;

"Fuses" hat ein PIC nicht, die Config-Bits kann man immer im Code 
unterbringen.

Der TE versucht mit einem TL866A einen PIC zu programmieren und das ist 
die Quelle des Übels.

von W.S. (Gast)


Lesenswert?

HildeK schrieb:
> - mit 1 für ein gesetztes Häkchen.

Ich schätze, es ist allemal sicherer, in das Manual zum betreffenden PIC 
zu schauen und danach die Bits zu setzen, als herumzuorakeln, ob ein 
gesetztes Häkchen in einem Menü nun Bit low oder high zu bedeuten hat.

W.S.

von uxdx (Gast)


Lesenswert?

W.S. schrieb:
> HildeK schrieb:
>> - mit 1 für ein gesetztes Häkchen.
>
> Ich schätze, es ist allemal sicherer, in das Manual zum betreffenden PIC
> zu schauen und danach die Bits zu setzen, als herumzuorakeln, ob ein
> gesetztes Häkchen in einem Menü nun Bit low oder high zu bedeuten hat.
>
> W.S.

Wurde oben schon von Hans B, Datenblattlesende und old_pic_fan gesagt:
0 ist gesetzt, 1 ist nicht gesetzt.

Spielt aber keine Rolle, die Config-Bits setzt man im Code über 
Schlüsselworte und der Assembler oder Compiler macht es dann richtig.

von R. H. (snapper)


Angehängte Dateien:

Lesenswert?

wenn man nur das Hex File hat und den Text mit den Angaben zur 
Konfiguration hat ist glaube ich ein Assembler oder Compiler nicht viel 
von Nutzen!
Außerdem sind das Werkzeuge die ich nicht kenne und bedienen kann.
Habe nach langer Suche doch noch was für meinen Mini-Pro Programmer 
gefunden, ist für den PIC16F628 (auch ohne externe Tacktung) aber das 
dürfte passen weil die sich nur ganz geringfügig unterscheiden.

von HildeK (Gast)


Lesenswert?

W.S. schrieb:
> HildeK schrieb:
>> - mit 1 für ein gesetztes Häkchen.
>
> Ich schätze, es ist allemal sicherer, in das Manual zum betreffenden PIC
> zu schauen und danach die Bits zu setzen, als herumzuorakeln, ob ein
> gesetztes Häkchen in einem Menü nun Bit low oder high zu bedeuten hat.

Ohne Zweifel.
Andererseits weiß man, das solche Bits EEPROM-Zellen sind. Und die sind 
'1' im unprogrammierten Zustand.
Und klar, ich habe meine Erfahrung mit ATMEL-µCs und einer bestimmten 
IDE erworben - nicht mit PICs. Auch da wird ein gesetzter Haken zu einer 
'0' im angezeigten Hex-Wert. Und es passt gut zu dem was der TO 
beschrieben und warum er damit ein Problem hat.
Meine Aussage sollte einen Hinweis geben, wie der TO sich ggf. weiter 
schlau machen kann.

von W.S. (Gast)


Lesenswert?

R. H. schrieb:
> wenn man nur das Hex File hat und den Text mit den Angaben zur
> Konfiguration hat ist glaube ich ein Assembler oder Compiler nicht viel
> von Nutzen!

Also ein Fall von copy&paste oder so ähnlich. Dann weißt du auch nicht, 
ob es eventuell bereits richtig im Hexfile steht.

> Außerdem sind das Werkzeuge die ich nicht kenne und bedienen kann.

Eben. Die hier zusammengetragenen Ratschläge waren für Leute gedacht, 
die selbst eine Firmware schreiben wollen und sind damit an deiner 
Befindlichkeit vorbeigeschrammt. Hättest du aber vermeiden können, wenn 
du das richtig im Eröffnungspost geschrieben hättest. Ist im Nachhinein 
für alle anderen ärgerlich.

W.S.

von R. H. (snapper)


Lesenswert?

W.S. schrieb:
> Dann weißt du auch nicht,
> ob es eventuell bereits richtig im Hexfile steht.

Dann wären die Configdaten nach dem prog. mit dem Hexfile mit Sicherheit 
nicht alle leer, darauf bin ich auch schon gekommen !

von Klartext (Gast)


Lesenswert?

W.S. schrieb:
> Ist im Nachhinein
> für alle anderen ärgerlich.
>
> W.S.

"Ärgerlich"? sind nur Typen wie W.S., die ungefragt meinen ihre 
"Weisheiten" hier verbreiten zu müssen.

Du sülzt hier gefühlt 24h in jedem Forum rum und meinst offensichtlich, 
oberlehrerhaft andere zu jedem Thema belehren zu müssen.

Verpiss dich endlich und jammer sonstwo rum!

von Hans B. (Gast)


Lesenswert?

Wenn hex 2154 das gewünschte configword ist, also das ist dann
bin: 1 0000 101010100  dann ist für jede "0" ein häkchen zu setzen.
Weil aber für bit 12, 11, 10, 9 (das sind die 4 hier freigestellten 
Nullen) ein Nullsetzen nicht möglich ist, aber genau diese 4 bit 
keinerlei Bedeutung haben ist es gleichwertig folgendes einzugeben:
bin 1 1111 10 10 10 100 das entspricht hex 3F54 -das ist dem PIC egal 
weil der diese bits nicht auswertet, aber so sollte man das problemlos 
in die Maske eingegeben können.

Also nochmals, setze überall für eine "0" ein häkchen nach diesem 
Schema:
1111110
1010100
der hex-wert sollte dan 3F54 sein und das ist als config völlig 
gleichwertig mit "deinem" hex 2154

Ich hoffe, das hilft jetzt weiter.
-Und die Leser mögen auf logische Fehler, Tipp- od. Rechenfehler 
kontrollieren und hinweisen....

von Hans B. (Gast)


Lesenswert?

Nachtrag:
In dem von mir errechneten config wird "low voltage programming" 
deaktiviert. Ist das so OK?
Kann dein Programmiergerät sowohl low- als auch high- volt programming?
Ist dein PIC bereits für Low-voltage programming vorprogrammiert? - dann 
reagiert er anders und muss mit HI-volt-programming überschrieben 
werden.
Vermutlich ist aber alles OK und problemlos.

von R. H. (snapper)


Lesenswert?

low-high volt programming ? keine Ahnung ob mein MiniPro TL866A das 
kann.
Wenn ich die Einstellungen lt. meinem letzten Bild vornehme ergibt sich 
3F5C, bei zus. angewählten Power-Up Timer (PWRT) die 3F54

von Hans B. (Gast)


Lesenswert?

hex 3F54 ist OK und in der Wirkung völlig ident mit hex 2154

von W.S. (Gast)


Lesenswert?

R. H. schrieb:
> low-high volt programming ? keine Ahnung ob mein MiniPro TL866A das
> kann.

Sowas hat auch ein bissel Einfluß auf die Schaltung, in der so ein PIC 
steckt. Zumindest bei den älteren Typen wurde beim Startup des PIC der 
Programmiermodus aktiv, wenn (wimre) RB3 auf high war. Es ist also 
weniger die Frage, was dein Brenner denn so alles kann, sondern ob und 
was in der Schaltung vorgesehen ist. Kann sich alles geändert haben, 
also lies das Manual zu deinem Chip und schau dort nach.

W.S.

von avenger (Gast)


Lesenswert?

W.S. ist Kritikresistent und müllt hier weiter mit seinen unsinnigen 
Kommentaren die Foren voll, hat wahrscheinlich nichts besseres zu tun !

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.