Forum: Mikrocontroller und Digitale Elektronik PIC3 Problem?


von Alfred M. (eddie207)


Lesenswert?

Hallo PIC-Freaks!
Versuche verzweifelt, eine HEX-Datei (Frequenznormal aus Elektor 
5/6/2018) in den Microcontroller (16F1778) einzuprogrammieren.
Der PIC wird einwandfrei erkannt, das Brennen funktioniert, aber VERIFY 
meldet einen Fehler, ein READ bringt mir lauter Nullen.
Egal was ich mache, der PICKit schreibt mir immer lauter Nullen in den 
MIC-Speicher. Zumindest sieht es so aus.

Wer weiss rat, was mache ich falsch?????

Danke im voraus!
eddie207

Posts: 2
Joined: Thu Sep 06, 2018 3:09 pm

von Thomas E. (picalic)


Lesenswert?

Servus,

ich tippe mal darauf, daß Du die Code Protection aktiviert hast! Deren 
Sinn ist es ja gerade, das Auslesen zu verhindern.

von Alfred M. (eddie207)


Lesenswert?

Hallo Thomas!

Ich arbeite mit MPLAB X IPE V4.2
Da ich neu auf dem Gebiet bin, kommt die Frage, wo ich das einstelle?

von Thomas E. (picalic)


Lesenswert?

Alfred M. schrieb:
> Hallo Thomas!
>
> Ich arbeite mit MPLAB X IPE V4.2
> Da ich neu auf dem Gebiet bin, kommt die Frage, wo ich das einstelle?

In der Regel wird der Wert für die Config-Register im Quelltext 
eingestellt und beim Compilieren werden die Daten dann ins Hexfile 
eingebaut. Neben der Code-Protection werden dort auch Dinge wie 
Oszillator-Configuration, Watchdog, Benutzung des Reset-Pins (als Reset- 
oder Port-Eingang) usw. eingestellt. Im Asm-Quelltext steht da z.B. 
sowas:
  __config _CONFIG1, _FOSC_INTOSC & _WDTE_SWDTEN & _PWRTE_ON & _MCLRE_ON 
& _CP_OFF

In C-Quelltext i.d.R. als:
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC 
oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP 
pin function is digital input)
#pragma config CP = OFF         // Flash Program Memory Code Protection 
(Program memory code protection is disabled)
...

Die IPE benutze ich nicht, daher kann ich nicht sagen, ob bzw. wo man 
dort die Config-Register auch abweichend vom Hex-File einstellen kann.

von Erwin D. (Gast)


Lesenswert?

Alfred M. schrieb:
> Wer weiss rat, was mache ich falsch?????

Nur eine Idee:
Schau mal in der IPE unter Settings->Advanced Mode.
Vielleicht findest du dort etwas mit dem Thema "code protection".
Ich hab im Moment keinen Programmer hier, so daß ich nicht testen kann.

von Teo D. (teoderix)


Lesenswert?

MPLAB X: Windows/PIC Memory Views/Configuration Bits
Damit kannst du dir das alles Generieren lassen. Copy&Past feddisch.

von Erwin D. (Gast)


Lesenswert?

Teo D. schrieb:
> MPLAB X: Windows/PIC Memory Views/Configuration Bits
> Damit kannst du dir das alles Generieren lassen. Copy&Past feddisch.

Er hat nur ein Hex-File und will das mit der IPE flashen.
Ohne Source nützt ihm die IDE nix. --feddisch--

Alfred M. schrieb:
> eine HEX-Datei

Alfred M. schrieb:
> Ich arbeite mit MPLAB X IPE V4.2

von Erwin D. (Gast)


Lesenswert?

Hallo eddie207,

ich hab mal nachgeschaut, was man mit der IPE machen kann.
Wie vermutet, muß man dazu in den Advanced Mode gehen.
Dann kannst du unter 'Operate' bei 'Device and Tool Selection' auf den 
Button 'Read' gehen. Vorher natürlich den richtigen µC und den richtigen 
Programmer auswählen.
Nach dem Auslesen kannst du dann unten die 'Configuration Bits' sehen. 
Dort kannst du sie auch verändern. In deinem Fall wären das 'GWRP', 
'GSS' und 'GSSK', die du auf 'OFF' stellen solltest. Anschließend kannst 
du mit dem Button 'Program' das ganze wieder in den µC schreiben.
Alternativ inm Feld 'Hex File' das File, welches du brennen willst 
auswählen, dann unten die 'Configurations Bits' verändern und dann mit 
dem Button 'Program' das ganze in den µC schreiben.
Versuchs mal und berichte, ob es geklappt hat, ok?
Viel Erfolg!

Erwin

von Volker S. (vloki)


Lesenswert?

Anscheinend muss man bei IPE in den Advanced Mode gehen,
um im Menü Window/Target Memory Views etwas auswählen zu können.

Dann kann man wohl auch Änderungen vornehmen.

von Erwin D. (Gast)


Lesenswert?

P.S.: Einen Punkt hab ich noch vergessen.
Damit du unten neben 'Output IPE' auch die 'Configuration Bits' siehst, 
mußt du oben in der Menuezeile unter 'Window' den Punkt 'Target Memory 
Views' und dann die 'Configuration Bits' auswählen. Wenn du das gemacht 
hast, kannst du entweder (wie oben beschrieben) das Hexfile auswählen, 
die Configuration Bits verändern und wieder in den µC schreiben - oder 
du kannst den Inhalt des µC auslesen, die Bits verändern und das ganze 
wieder reinschreiben.
Wenn das Auslesen nicht klappt (weil das durch die Bits verhindert wird) 
bleibt dir nur, das Hexfile zu laden, die Bits verändern und wieder 
reinschreiben...

Erwin

von John (Gast)


Lesenswert?

Das ist doch alles komplett unnötig.
Nach dem Programmmieren wird automatisch ein VERIFY durchgeführt.
Der Ablauf nach klicken auf [Program] ist:
 - löschen
 - programmieren
 - verify

Das wird auch im Ausgabefenster so angezeigt:
"Programming/Verify complete"

So lange sich der PIC noch im Programmiermodus befindet kann der 
Speicher ausgelesen werden. Auch bei aktiviertem Leseschutz. Der 
Leseschutz ist erst nach Reset aktiv.

Ein zusätzliches VERIFY ist nicht nötig, und mit aktiven Leseschutz auch 
nicht möglich.

Gruß
John

von Erwin D. (Gast)


Lesenswert?

John schrieb:
> So lange sich der PIC noch im Programmiermodus befindet kann der
> Speicher ausgelesen werden. Auch bei aktiviertem Leseschutz. Der
> Leseschutz ist erst nach Reset aktiv.

Warum schreibt dann der TO:

Alfred M. schrieb:
> Der PIC wird einwandfrei erkannt, das Brennen funktioniert, aber VERIFY
> meldet einen Fehler, ein READ bringt mir lauter Nullen.

Wenn das Auslesen VOR dem Reset funktionieren würde, käme doch bei ihm 
kein Fehler. Und er würde keine Nullen lesen, sondern den gerade 
geflashten Inhalt.
Oder verstehe ich deine Worte falsch? Berichtige mich bitte, wenn ich 
etws falsch verstanden habe.

von Erwin D. (Gast)


Lesenswert?

P.S.: Jetzt hab ich's geschnallt :-)

John schrieb:
> Ein zusätzliches VERIFY ist nicht nötig, und mit aktiven Leseschutz auch
> nicht möglich.

Deshalb kommt beim Verify ein Fehler.

Aber mit der IPE kann er auf jeden Fall das Hexfile einlesen, dann die 
Configuration Bits verändern und das ganze auf den µC schreiben. Und 
dann klappt auch das Verify und beim Auslesen sieht er den richtigen 
Inhalt.

von John (Gast)


Lesenswert?

Erwin D. schrieb:
> Wenn das Auslesen VOR dem Reset funktionieren würde, käme doch bei ihm
> kein Fehler. Und er würde keine Nullen lesen, sondern den gerade
> geflashten Inhalt.
> Oder verstehe ich deine Worte falsch? Berichtige mich bitte, wenn ich
> etws falsch verstanden habe.

Nach Programmieren und Verify wird automatisch eine Reset durchgeführt.

von Volker S. (vloki)


Lesenswert?

John schrieb:
> So lange sich der PIC noch im Programmiermodus befindet kann der
> Speicher ausgelesen werden. Auch bei aktiviertem Leseschutz. Der
> Leseschutz ist erst nach Reset aktiv.

Habe ich auch nicht gewusst, aber du hast recht.
(verwende normaler Weise weder IPE noch Code Protection ;-)

Der Thread hat mir aber trotzdem neue Erkenntnisse gebracht, weil ich 
jetzt weiß, dass ich in IPE einfacher Änderungen machen kann als zum 
Beispiel in notepadd++, weil ich mich nicht um die Checksummen kümmern 
muss.

Volker S. schrieb:
> BTW: Weiß jemand wie das mit notepadd++ geht?

von Alfred M. (eddie207)


Lesenswert?

Hallo PIC-Gemeinde!

Zunächst mal vielen Dank für die rege Beteiligung hier!!!
Problem ist erkannt (hoffentlich!?) und gelöst!
Also ich habe bei den Configuration-Bits den Parameter CP (Program 
Memory Code Protection) gefunden. Den hab ich auf OFF gestellt, und so 
kann ich den HEX-Code auch wieder auslesen!!!

von Erwin D. (Gast)


Lesenswert?

Alfred M. schrieb:
> Hallo PIC-Gemeinde!
>
> Zunächst mal vielen Dank für die rege Beteiligung hier!!!
> Problem ist erkannt (hoffentlich!?) und gelöst!
> Also ich habe bei den Configuration-Bits den Parameter CP (Program
> Memory Code Protection) gefunden. Den hab ich auf OFF gestellt, und so
> kann ich den HEX-Code auch wieder auslesen!!!

Stimmt, beim 16Fxxx heißt das Bit CP.
Ich hab hier einen dsPIC33E auf dem Tisch, da heißt alles ein wenig 
anders. Deshalb hatte ich dir vorhin falsche Bit-Bezeichnungen 
genannt...

Freut mich, Glückwunsch :-)

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.