Forum: Mikrocontroller und Digitale Elektronik Programmierung PIC18F4550


von Thomas P. (topla)


Lesenswert?

Hallo an die Spezialisten,

ich habe ein kleines Projekt mit einem PIC18F4550 auf Basis von 
Opensource etwas angepasst. Kernstück der Anpassung war der Einsatz 
eines adum1401 zur Potentialtrennung zwischen dem PIC auf der USB-Seite 
und einem RS485-Bus. Für mich war das der erste Kontakt mit PICs. Hat 
alles prima funktioniert, Leiterplatten wurden gefertigt, bestückt und 
getestet. Läuft einwandfei.
Nun wurden aus der gleichen Serie vier weitere Leiterplatten bestückt, 
allerdings kamen PICs aus einer anderen Charge zum Einsatz. Ergebnis: 
funktioniert nicht mehr. Messen an der Schaltung ergibt, dass Pin RC7 
(wird als serieller Eingang verwendet) auf High-Pegel liegt und sich 
selbst mit 1kOhm nach Masse nur wenige Millivolt nach unten bewegt. 
Meiner Meinung nach ist das ein Zeichen für einen aktiven Ausgang, klar, 
dass da nichts geht.
Der Probeaufbau eines weiteren Exemplars mit einem Prozessor einer 
weiteren Charge ergab wieder eine einwandfreie Funktion, am Programm 
kann es also definitiv nicht liegen.
Nun die Frage: Kann es sein, dass bei den vier fehlerhaften Exemplaren 
noch irgendwelche Einstellungen des PICs fehlen (oder vorhanden sind), 
die selbst ein Löschen und neu Programmieren (Galep-4 mit Adapter) nicht 
gerade zieht? Wie schon gesagt, ich habe keinerlei Erfahrungen mit PICs.

Klar, die fehlerhaften Prozessoren werden ausgetauscht, kein Problem, 
aber die Ursache interessiert mich schon. JTAG haben die Dinger ja wohl 
nicht auf Port C ;-).

Gruß
Thomas

von Andreas (Gast)


Lesenswert?

Hast du schonmal die Fuses überprüft?
In MPLAB IDE unter Configure -> Configuration Bits kannst du die Bits 
deiner neuen PICS mit denen deines alten vergleichen.

von Andreas (Gast)


Lesenswert?

Andreas schrieb:
> Hast du schonmal die Fuses überprüft?
> In MPLAB IDE unter Configure -> Configuration Bits kannst du die Bits
> deiner neuen PICS mit denen deines alten vergleichen.

Natürlich geht es da nur in MPLAB IDE.
Der Galep müsste auch irgendwo ein Menü haben um die Fuses setzen zu 
können.

von Thomas P. (topla)


Lesenswert?

Wenn ich einen funktionierenden PIC auslese, sollten doch alle Daten 
(Programm, Fuses, EEPROM) mit gelesen werden und dann auch auf dem neuen 
Exemplar landen, oder?
Lese ich einen funktionierenden PIC aus und vergleiche dann mit einem 
nicht funktionierenden, ergibt das keinerlei Abweichungen.
Daher auch der Verdacht, dass da irgendwelche verdeckten Einstellungen 
selbst ein Löschen überstehen. Oder die Dinger sind schlicht und 
ergreifend Schrott...

Thomas

von Erich (Gast)


Lesenswert?

>Wenn ... oder?

eben NEIN!
Schon mal was von Ausleseschutz gehört?

Falls dieser gesetzt ist (i.d.R. macht das jede Profifirma so, denn in 
der SW steckt ja das Knowhow) so kannste den Chip eben NICHT mehr 
auslesen und clonen.
Nur eine Teil-Identifikation ist lesbar, über den man (der SW-Autor) 
festellen kann welche version seiner SW drin ist.

Steht alles im Datenblatt des uC.
Dort suchen nach "code protection" bzw. "CONFIG5L" "CONFIG5H",
Kapitel Program Verification and Code Protection

Ein geschützer Baustein liefert beim auslesen immer "Müll" oder "leer".
Er kann allerdings gelöscht und erneut programmiert werden (wenn man ein 
Programm dafür hat).

Gruss

von Thomas P. (topla)


Lesenswert?

Wie im Erstposting zu lesen ist, habe ich das Programm selbst 
geschrieben und die funktionierenden wie auch die nicht funktionierenden 
Bausteine sind nicht geschützt. Die Bausteine lassen sich alle 
erfolgreich programmieren und verifizieren, auch ein Vergleich des 
Inhalts eines nicht funktionierenden mit einem funktionierendem Baustein 
ist erfolgreich.
Die Frage ist nun eben, ob die Pics (mit denen ich Null Erfahrung habe) 
irgendeine Gemeinheit (also ein Feature) besitzen, was auch ein Löschen 
und neu Beschreiben des Bausteins überlebt, beim Vergleich nicht 
auftaucht und derartige Probleme verursachen kann.
Ich kann es mir zwar nicht vorstellen, aber es bleibt ja nur übrig, dass 
alle vier Pics die gleiche Macke haben.

Thomas

von Erich (Gast)


Lesenswert?

Du solltest benennen, welche Tools bzw. welches Programmiergerät du 
benutzt.

Ich verwende ausschließlich MPLAB mit den originalen ICD3 sowie PicKit3 
.

Gruss

von Andreas G. (beastyk)


Lesenswert?

Thomas P. schrieb:
> Nun die Frage: Kann es sein, dass bei den vier fehlerhaften Exemplaren
> noch irgendwelche Einstellungen des PICs fehlen (oder vorhanden sind),
> die selbst ein Löschen und neu Programmieren (Galep-4 mit Adapter) nicht
> gerade zieht?

Er hat einen Galep-4 mit Adapter, also hat er uns gesagt welche Hardware 
er zum proggen nimmt!
Ich würde aber auch auf die Fuses tippen, oder da stimmt was nicht beim 
setzen der Ports...das sieht man aber nur mit Code (Glaskugel)
Ich weiß nicht ob und wie man bei Galep-4 Fuses setzen kann.

Gruß
Ich

von Dieter W. (dds5)


Lesenswert?

Die config words (fuses) hängt der Assembler oder Compiler normalerweise 
an die HEX Datei mit dran und der Programmer verarbeitet die auch 
richtig.

von holger (Gast)


Lesenswert?

>Die config words (fuses) hängt der Assembler oder Compiler normalerweise
>an die HEX Datei mit dran und der Programmer verarbeitet die auch
>richtig.

Wenn man sie im Quellcode definiert. Wenn man sie nur über die
IDE einstellt wäre ich mir da gar nicht so sicher das die auch
in der Hex Datei landen. Da sollte man vieleicht mal nachsehen.

von Thomas P. (topla)


Lesenswert?

Die Fuses werden im Hex-File (300000) bereitgestellt.
Aus dem List-File:
Configuration Fuses:
   Word  1: 0E24   PLL5 CPUDIV1 USBDIV HSPLL NOFCMEN NOIESO
   Word  2: 0E3F   NOPUT BROWNOUT BORV21 VREGEN NOWDT WDT128
   Word  3: 0500   CCP2C1 NOPBADEN LPT1OSC NOMCLR
   Word  4: 0080   NOSTVREN NOLVP ICSP1 NOXINST NODEBUG
   Word  5: C00F   NOPROTECT NOCPB NOCPD
   Word  6: E00F   NOWRT NOWRTC NOWRTB NOWRTD
   Word  7: 400F   NOEBTR NOEBTRB

Auch beim Auslesen werden die Fuses mit gelesen, ebenso beim Compare mit 
Verglichen - immer ohne Fehler.

Thomas

von Thomas P. (topla)


Lesenswert?

So, das Thema hat mir keine Ruhe gelassen.
Es blieb als Fehlerquelle ja nur noch das Programm selber übrig. Da das 
nicht von mir stammt (aber alle Quellen liegen vor) und ich auch keine 
Lust hatte, den CCS extra zu installieren, habe ich mal im lst-File 
herumgesucht. Es ist schon interessant, was ein Compiler aus einer Zeile 
Hochsprache so macht. Ursache war letzten Endes ein in einer Funktion 
versteckter Befehl BCF TRISC.RC7, der nach dem Setzen von RC6 und RC7 in 
den EUSART-Modus RC7 wieder auf Ausgang setzt und damit die Blockade 
verursacht. Wird im Hexeditor der Befehl durch einen NOP ersetzt, 
funktioniert alles wie gedacht.
Interessant daran ist aber, dass es Revisionen des PIC18F4550 zu geben 
scheint, die diesen Effekt nicht aufweisen; also ein Umschalten von RC7 
auf Ausgang nach dem Setzen des asynchronen EUSART-Mode ignorieren.
Irgendwelche errata-Listen habe ich jetzt nicht mehr durchsucht, aber so 
ein inkonsistentes Verhalten gefällt mir nicht, auch wenn das 
eigentliche Problem der Programmierer war.

Thomas

PS: Ich mag PICs immer noch nicht.

von usuru (Gast)


Lesenswert?

Hast Du mal in den Microchip-Foren gefragt, da bekommt man sofort 
kompetente Antwort.

von Jens M. (Gast)


Lesenswert?

Thomas P. schrieb:
> Interessant daran ist aber, dass es Revisionen des PIC18F4550 zu geben
> scheint, ...


welche Revisionen hast du denn?

Wenn ich das Errata überfliege sind da einige Änderungen drin die den 
EUSART betreffen und damit zu tun haben könnten.

Das Errata zu lesen halte ich für auch für obligatorisch. Wofür ist es 
denn sonst da? Microchip ist in Sachen Fehler zu kommunizieren sehr 
offen und professionell das sollte man nutzen.

usuru schrieb:
> Hast Du mal in den Microchip-Foren gefragt, da bekommt man sofort
> kompetente Antwort.

Evtl. nachdem man seine Hausaufgaben bzg. errata gemacht hat.

von Thomas P. (topla)


Lesenswert?

Jens Martin schrieb:
> Wenn ich das Errata überfliege sind da einige Änderungen drin die den
> EUSART betreffen und damit zu tun haben könnten.

Wenn ich das überfliege, finde ich nichts, was auf mein Problem 
hindeutet. Für schnelles und genaues Lesen/Verstehen ist mein Englisch 
nicht gut genug.

usuru schrieb:
> Hast Du mal in den Microchip-Foren gefragt, da bekommt man sofort
> kompetente Antwort.

Bis gestern habe ich ja nicht gewusst, wie das Problem zustande kommt. 
Für mich ist das jetzt gelöst (-> korrekte Programmierung) und die 
Motivation für weitern Aufwand hält sich in engen Grenzen.

Jens Martin schrieb:
> Evtl. nachdem man seine Hausaufgaben bzg. errata gemacht hat.

Die habe ich gemacht und u.a. die Schlussfolgerung gezogen, mich auch in 
Zukunft so gut wie möglich von PICs fern zu halten. Hat mir bis heute 
keine Nachteile beschert und wird hoffentlich auch so bleiben ;-).

Thomas

von Jens M. (Gast)


Lesenswert?

Thomas P. schrieb:
> Für schnelles und genaues Lesen/Verstehen ist mein Englisch
> nicht gut genug.

...

>> Evtl. nachdem man seine Hausaufgaben bzg. errata gemacht hat.
>
> Die habe ich gemacht und u.a. die Schlussfolgerung gezogen, mich auch in
> Zukunft so gut wie möglich von PICs fern zu halten.

Dann ist ja alles gut ;-)

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.