PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC16F874A in den Programmspeicher schreiben...



conmafi
29.06.2011, 18:16
Hi,

ich habe folgendes Problem. Ich wollte eine Tabelle die aus 256x10-bit Werten besteht im Programmspeicher des PIC16F874A ablegen, wobei einzelne Werte gelegentlich angepasst werden müssen.
Das schreiben in ein leeren Programmspeicher (also mit 3FFF gefühlt) klappt ohne Probleme, das auslesen der Werte geht auch. Wenn ich jetzt versuche einzelne bestehende Werte zur ändern, dann werden dieser nicht korrekt in den Programmspeicher geschrieben. Es scheint so das gesetzte Bits gelöscht werden, aber gelöschte Bits nicht gesetzt werden, also 1=>0 geht aber 0=>1 geht nicht. Kann mir da jemand weiter helfen? Muss man den Programmspeicher vor dem Schreiben erst mal irgendwie "löschen" (auf 3FFF bringen?) Wie stelle ich es an das ich die vorhandenen Werte aus der Tabelle ändern kann?

P.S. Ich habe das noch nicht auf dem PIC ausprobiert sondern nur in der IDE. Vielleicht macht die IDE hier irgendwelche Probleme?

Gruß...

RoboHolIC
29.06.2011, 22:19
Hi,

Muss man den Programmspeicher vor dem Schreiben erst mal irgendwie "löschen" (auf 3FFF bringen?) Wie stelle ich es an das ich die vorhandenen Werte aus der Tabelle ändern kann?

Hallo conmafi.

Das Schreiben in den Flash- bzw. EEPROM-Speicher ist in den Datenblättern von Microchip beschrieben. Ich hab's bisher allerdings nur schmökernd gelesen. Das ist ein genau definiertes, etwas umfangreiches Prozedere, das genau eingehalten werden muß einschließlich der Bedingung, daß stets vier Programmwörter in einem Rutsch geschrieben werden müssen. Einzelne Werte ändern geht nur durch Schreiben eines Viererblocks. Der eigentliche (Lösch- und) Schreibvorgang läuft erst nach der Übergabe des vierten Speicherwort und Setzen eines Schreibbefehl-Flags wirklich los und dauert etwa 4ms (alles sinngemäß laut Datenblatt).
Soweit die Ecksteine des Datenblatts.
Wird das alles eingehalten? Ich könnte mir gut vorstellen, daß eine Verletzung einzelner Bedingungen nicht abgefangen wird und zu einem solchen "halb-richtigen" Ergebnis wie "neue Nullen schreiben ohne die alten zu löschen" führen kann.

Arbeitest du auf Asssemblerebene oder verläßt dich ander fraglichen Stelle vielleicht dein Hochsprachencompiler?
Liegt dir das aktuellste Datenblatt vor? Auch wirklich zur Release-Nummer des Controllers passend ?

Gruß
Christian

PICture
29.06.2011, 23:31
Hallo!

Ein praktisch ausprobiertes Beispiel befindet sich im : http://www.rn-wissen.de/index.php/PIC_ASM_Beispiele#Programmspeicher_.28Flash.29_bes chreiben_und_lesen das laut http://www.rn-wissen.de/index.php/PIC_Assembler#High-End__-.3E_Basic_Line_.26_Mid-Range auf PIC16... mit Berücksichtigung allen Unterschiede zwischen der PIC Familien umgeschrieben werden muss. ;)