mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18F eeprom_read HI-Tech geht nicht


Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

habe hier ein Programm (läuft ca. seit 4Jahren Non Stop ohne Fehler).
Habe jetzt ein Update gemacht, löst das Problem aus hat aber nichts mit 
dem Problem zu tun.
Jetzt geht beim Init, das ist das erste was der Chip macht das 
eeprom_read
vom HI-Tech C Compiler nicht mehr, anderes Projekt, gleiche Routine 
geht.
Hat vielleicht jemand eine Idee woran das liegen könnte?

Danke im voraus

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:
> habe hier ein Programm (läuft ca. seit 4Jahren Non Stop ohne Fehler).
> Habe jetzt ein Update gemacht, löst das Problem aus hat aber nichts mit
> dem Problem zu tun.

Muß ja, da es nicht mehr geht ...

> Jetzt geht beim Init, das ist das erste was der Chip macht das
> eeprom_read
> vom HI-Tech C Compiler nicht mehr, anderes Projekt, gleiche Routine
> geht.
> Hat vielleicht jemand eine Idee woran das liegen könnte?

Wo sind die Programme? Womit wurde das alte Programm übersetzt? Welcher 
PIC 18Fxxxx wird verwendet? Welches Programmiergerät? Schaltplan? 
Aufbau?

Autor: Be T. (wilhelmt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich programmiere auch gerade mit einem PIC18 - allerdings in 
Maschinencode. Dein Problem kann ich nicht lösen, aber denjenigen, die 
das vielleicht versuchen würden, könntest du ihre Hilfsbereitschaft 
vergrößern, wenn du außer allgemeinen Sätzen auch was technisch 
Handgreifliches rausrücken würdest, z.B. welcher Prozessor genau, welche 
Version des Compilers, und zumindest die paar Zeilen, in welchen das 
EEprom ausgelesen werden soll, könntest du einstellen - ggf. hilfreich 
wäre auch, welche der genannten technischen Umstände gegenüber vormals 
nun anders sind.
Grüße, wilhelmT
Ups.... da war einer etwas schneller!

: Bearbeitet durch User
Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Prozessor PIC 18F2680
Compiler PICC 18 V.9.80 HI-Tech Pro
Code:
  ID = eeprom_read(0x000A);
  ID = (ID<<8) + eeprom_read(0x0001);
  ID = (ID<<8) + eeprom_read(0x0002);
  ID = (ID<<8) + eeprom_read(0x0003);

ich weiß aber nicht was das bringen soll, wie schon gesagt größeres 
Projekt, ging lange Zeit und eeprom_read gehört zum Compiler.
Steht auch im Post "eeprom_read vom HI-Tech C Compiler".

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach noch was ich habe das jetzt anders reingenommen, der Code geht auf 
mehreren Geräten einwandfrei (seit Jahren).

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:

> ich weiß aber nicht was das bringen soll,

Ich weiß es auch nicht. Wie soll Dir jemand aufgrund Deiner bisherigen 
Informationen helfen? Nicht mal die Fehlerbeschreibung ist klar.

selbst schrieb:
> Jetzt geht beim Init, das ist das erste was der Chip macht das
> eeprom_read
> vom HI-Tech C Compiler nicht mehr

Was geht da nicht mehr? Hängt sich der Controller auf, bringt er nicht 
die erwarteten Inhalte (EEPROM-Inhalt korrupt?) oder oder oder


PS:
> Code:
>   ID = eeprom_read(0x000A);
>   ID = (ID<<8) + eeprom_read(0x0001);
>   ID = (ID<<8) + eeprom_read(0x0002);
>   ID = (ID<<8) + eeprom_read(0x0003);

eeprom_read(EE_ADDR) bringt ein Byte aus der Adresse EE_ADDR zurück. Was 
machst Du damit warum? Das sieht irgendwie seltsam aus.

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

stimmt habe ich nicht klar gesagt, eeprom_read(EE_ADDR) gibt immer 0x00 
zurück. Die Werte sind halt die Adresse, der Code funktioniert schon, 
der EEprom ist in der Source gesetzt und gültig. Der Fehler tritt auf 
allen Modulen auf die neu Programmiert sind.

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:
> der EEprom ist in der Source gesetzt und gültig. Der Fehler tritt auf
> allen Modulen auf die neu Programmiert sind.

Gerade das (EEPROM gesetzt und gültig) scheint dann aber nicht zu 
klappen.

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na ja, aber das Mplab zeigt mir den EEprom korreckt an.

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:
> na ja, aber das Mplab zeigt mir den EEprom korreckt an.

Hast Du mal den PIC abgesteckt, mplab beendet, neugestartet und den PIC 
dann angesteckt und das EEPROM neu ausgelesen?

Den Prozessor hast Du nicht gewechselt? (andere Adressen, andere Größe 
des EEPROM o.ä.)

(sorry, ist gerade Stochern im Nebel, hab kein mplab auf diesem PC, um 
das nachzuvollziehen)

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe das Update auf mehreren Modulen gemacht, alle andere 
Adresse.
Die Updates gehen über Bootloader runter. Alle Module gleicher Fehler.
Dann Module ausgebaut und zurück gelesen (im Mplab). In allen Modulen 
ist die jeweilige Adresse korrekt geschrieben. Im Mplab neu programmiert 
ohne Bootloader, gleicher Fehler.

Autor: Be T. (wilhelmt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht kann ich dir doch einen Hinweis geben. Es gibt in deinen 
Berichten 3 Übereinstimmungen mit meinem (gelösten) Problem: Selbe 
Controller-Familie, bei mir war es ein PIC18F14K22, das „eigentliche 
Programm“ funktionierte, und es ging um das Auslesen des EEproms. Kein 
Update – ich hatte ein orig Prog von Microchip übers EEprom-Auslesen als 
Ausgangsbasis für mein späteres Prog benutzt. Im Original funkte alles, 
nach meinen Erweiterungen tauchte im völlig unveränderten Auslesen des 
EEproms eine Fehlfunktion auf.

Da hatte sich durch die anschwellende Menge des Programm- und 
Daten-Codes plötzlich und für mich unbemerkt die Bank für die 
EEprom-Variablen geändert. Im Assembler-Code musste es statt „bewährt“ 
wie im Original  movf EEDATA,0,1 stattdessen nun  movf EEDATA,0,0 
heißen. Passende Bank, ein einziges Bit geändert und schon gab das 
EEprom die lange vermissten Daten wieder her.

Und aufgrund des Hinweises von "Löter": Unabhängig davon kämpfte ich 
noch an einer anderen Front. Beim ständigen Auf-und Abbau meiner 
"Schaltung", bestehend aus 3 einzelnen sehr fliegend verkabelten 
Platinen hatte ich es einmal geschafft, die Versorgungsspannung falsch 
anzuklemmen. Danach ging zwar alles wieder, so schien es mir jedenfalls, 
aber letztlich hatte der Prozessor doch einen Klatsch in einem 
Teilbereich gerade fürs EEprom weg. Da war dann doch der Tausch gegen 
einen Neuen nötig.
Grüße, wilhelmT

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:
> Im Mplab neu programmiert
> ohne Bootloader, gleicher Fehler.

selbst schrieb:
> anderes Projekt, gleiche Routine
> geht.

Da hilft nur vergleichen und systematisch prüfen. Derselbe Controller? 
Außenbeschaltung? Was wurde vorher im Programm (anders) gemacht? 
EEPROM-Routinen korrekt aufgerufen? Initialisierung? ...

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ist mir schon klar, hatte gehofft das schon jemand mal das Problem 
hatte.
Ja alle Module sind gleich. Der Fehler ist im Init, da wurde auch vorher 
nichts anders gemacht, das ist ja die Sch....

Autor: Löter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
selbst schrieb:
> Der Fehler ist im Init, da wurde auch vorher
> nichts anders gemacht, das ist ja die Sch....

Hast Du die alte stabile Version da? Übersetz und brenn die doch mal 
komplett neu. Dann weißt Du, ob es am Werkzeug oder am Programm liegt.

Wenn Programm ... irgendwas muss anders sein, configuration bits, 
Initialisierung, anderer Code, der vorher läuft und eventuell was 
zerschießt, ...

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja alte Version kann ich mal testen.

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also alte Version macht den gleichen Fehler, das ist ja blöd.
Wie gesagt, provisorisch anders gelöst, Rest läuft einwandfrei.

Autor: Volker S. (vloki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Be T. schrieb:
> Da hatte sich durch die anschwellende Menge des Programm- und
> Daten-Codes plötzlich und für mich unbemerkt die Bank für die
> EEprom-Variablen geändert. Im Assembler-Code musste es statt „bewährt“
> wie im Original  movf EEDATA,0,1 stattdessen nun  movf EEDATA,0,0
> heißen. Passende Bank, ein einziges Bit geändert und schon gab das
> EEprom die lange vermissten Daten wieder her.

Das "bewährte" Beispiel hat nur funktioniert, weil das BSR "zufällig" 
die passende Einstellung hatte. Eigentlich hätte schon immer auf die 
ACCESSbank zugegriffen werden müssen.



selbst schrieb:
> Wie gesagt, provisorisch anders gelöst, Rest läuft einwandfrei.

Wie hast du es denn jetzt gelöst?

Autor: selbst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das EEprom auslesen habe ich drin gelassen, danach setze ich die Adresse
von Hand im Programm, damit bin ich aber nicht mehr frei konfigurierbar.

Autor: jeder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht wieder, einmal auf Assembler umgestellt und dann wieder zurück.
Was für ein Fehler.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.