Forum: Mikrocontroller und Digitale Elektronik MPLABX PIC EEPROM brennen max. 16 Byte


von Andreas S. (newpiccer)


Lesenswert?

Moin zusammen,
ich versuche erfolglos ein 80 Byte großes Array gleich beim Brennen in 
einen PIC 16F876A zu speichern (MPLABX, xc8).

eeprom unsigned char Messwert [] = 
{19,20,21,21,22,23,24,25,26,27,28,28,29,30,31,32...};

Bis 16 Byte funktionierts ohne Probleme, dann kommt von meinem Brenner 
8p von Sprut die Rückmeldung:
Start write EEPROM## x Errors (x Anzahl der Fehler)
Der 16F876A hat 256 Byte EEPROM. Daran kanns nicht liegen.
Wenn ich zwei Arrays á 16 Bytes mit unterschiedlichen Namen brennen 
lasse, gehts auch problemlos.
Jemand ne Idee?
Danke
Andreas

von Frank K. (fchk)


Lesenswert?

Das EEPROM ist in Pages eingeteilt, die offensichtlich 16 Bytes groß 
sind. Du kannst immer nur 16 Bytes (8 Worte) in die Latches schreiben, 
dann muss ein Programmierbefehl kommen.

Ich tippe auf einen Bug in der Software. Besorg Dir mal für 20€ vom 
Chinamann einen PICKit3-Clone und versuche es damit. Die ganzen 
"Brenner" sind ohnehin nicht mehr zeitgemäß.

fchk

von Toxic (Gast)


Lesenswert?

Andreas S. schrieb:
> ich versuche erfolglos ein 80 Byte großes Array gleich beim Brennen in
> einen PIC 16F876A zu speichern (MPLABX, xc8).

Ich hab den PIC nicht hier sonst wuerde ich es testen:
1.um Werte im EEprom abzuspeichern/lesen gibt es fertige 
Library-Funktionen
(siehe XC8-Userguide)

==============
// eeprom_read(unsigned char);
==============
// eeprom_write(unsigned char,unsigned char);
==============
// __EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);
==============

2. benutzt du den qualifier "const" vor einer Variablen/Array wird diese 
automatisch im Programmspeicher(ROM) abgelegt - anstatt im RAM

versuche es damit und lass dir auch im EEprom- oder Programmspeicher 
window
anzeigen wo ,was ,wie gespeichert ist

von Andreas S. (newpiccer)


Lesenswert?

Moin,
vielen Dank für eure Antworten.
Das EEPROM ist nicht in Pages aufgeteilt und ich bin sehr zufrieden mit 
dem Brenner von Sprut.
Das EEPROM-speichern während das Programm läuft ist nicht schwer, das 
kriege ich hin.
Das mit dem 'const' ist ein hilfreicher Tipp. Werde ich mir merken.
Das EEPROM-Fenster zeigt die richtigen Werte an der richtigen Stelle an.

Mir geht es darum Programmspeicherplatz zu sparen und deshalb möchte ich 
gerne das EEPROM gleich beim Brennen beschreiben.

Jemand noch ne Idee?
Danke
Andreas

von Uwe (Gast)


Lesenswert?

Hallo

Mit dem Macro __EEPROM_DATA(Data1, Data2, Data3, Data4, .... Data8)

kann man immer acht Byte ins EEPROM schreiben. Wenn mehr Werte 
gewünscht, wird der Macro mehrfach verwendet. Den Macro natürlich nicht 
zur runtime verwenden, sondern am besten im main.h.

Gruß

Uwe

von Toxic (Gast)


Lesenswert?

Toxic schrieb:
> ==============
> // __EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);
> ==============

Uwe schrieb:
> Mit dem Macro __EEPROM_DATA(Data1, Data2, Data3, Data4, .... Data8)


====================================================
XC8 C Compiler User’s Guide:nachlesen auf Seite 340
====================================================

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.