EEProm per default Falsche werte?

Antworten
Benutzeravatar
Maik81SE
Beiträge: 325
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
CPU-Target: x86-64; avr
Wohnort: Lübeck
Kontaktdaten:

EEProm per default Falsche werte?

Beitrag von Maik81SE »

Moin @ll

bei diesem Thema beziehe ich mich mal mit auf diesen Post AVR - Strings direkt aus Flash lesen, jedoch speziell zu dem Thema EEPROM.

Wie ich das dem Post, auf welchem ich mich beziehe richtig entnommen habe (Aber sicherlich habe ich mich da geirrt oder es falsch gelesen :shock:) sollte die Definition des EEPROM wie folgt erzeugt werden.

Code: Alles auswählen

var
  // Variablen im Flash als "CONST"
  _PROM_Status               : byte = $A0; section '.eeprom'; // Programmiert
  _MCUadr                    : byte = $35; section '.eeprom'; // Software-Adresse
in der weiteren Annahme, das ich da direkt nicht zugreifen kann, was ich in dem Artikel schon mitbekommen habe, habe ich versucht dies über einen Pointer zu bewerkstelligen.
Erfolg? null, nix, ned, nada.

Im Programm gehe ich dabei wie folgt vor.

Code: Alles auswählen

var
  adr,_index, status         : uint8;
  Point                      : ^uint8;
  
 begin
  Point                      := @_PROM_Status;
  _Index                      := Point^;
  
    if EEProm_Read(_Index) = $FF then begin
    UARTSendString_1('EEProm ADR 0 = $FF');
    adr                      := 99;
    end
Wenn ich die Eigenart der Zeiger nun auch richtig auf dem Filter habe, muß ich der Funtion function EEProm_Read(ADDR: Byte): Byte; beipringen, das ich die Adresse zB definition _Prom_Statushaben will.?!
und genau da Häng ich gerade Quer.

Alternative könnte ich ja auch beim ersten Durchlauf, schauen, ob der EEProm beschrieben ist und beschreiben, sofern dem Nicht so ist, aber genau dies will ich mir unterm Strich vermeiden.

Auch habe ich mir die Mailinglist diesbezüglich angeschaut und wenn ich das richtig verstehe komme ich da wohl am sinnvollsten via asm an das Ziel, oder habe ich auch da einen Denkfehler?

Grüße und schönen Abend @ll

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.4 FPC 3.2.2);

Benutzeravatar
kupferstecher
Beiträge: 429
Registriert: Do 17. Nov 2016, 11:52

Re: EEProm per default Falsche werte?

Beitrag von kupferstecher »

Direkt weiterhelfen kann ich dir nicht, aber ein, zwei Gedanken dazu:

Normaler Programmcode kommt ja in den Flash, dort eine Daten-Sektion mit dem Programmieradapter zu schreiben, unterscheidet sich also nicht vom normalen Upload. Beim EEPROM könnte ich mir vorstellen, dass dein Programmieradapter nur über spezielle Befehle zugreifen kann, d.h. den EEPROM initialisieren kann.

Deshalb würde ich erstmal versuchen den EEPROM anderweitig zu beschreiben und dann aus deinem Programm heraus lesen. Oder mit deinem obigen Code versuchen zu schreiben und dann mit einem anderen Programm auszulesen. Ich denke mit dem AVR-/Atmel-/Microchip-Studio sollte das gehen. Oder auch direkt über den Priogrammieradapter.

Zur ASM-Programmierung gibt es hier etwas:
https://www.mikrocontroller.net/article ... r#EEPROM_2

Die paar Befehle nach EEPROM_read: dürften reichen. Dann muss noch in Variablen kopiert werden, siehe LDD/STD.

https://wiki.lazarus.freepascal.org/AVR ... _assembler

Benutzeravatar
Maik81SE
Beiträge: 325
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
CPU-Target: x86-64; avr
Wohnort: Lübeck
Kontaktdaten:

Re: EEProm per default Falsche werte?

Beitrag von Maik81SE »

kupferstecher hat geschrieben: Mo 27. Mai 2024, 22:42
Deshalb würde ich erstmal versuchen den EEPROM anderweitig zu beschreiben und dann aus deinem Programm heraus lesen. Oder mit deinem obigen Code versuchen zu schreiben und dann mit einem anderen Programm auszulesen. Ich denke mit dem AVR-/Atmel-/Microchip-Studio sollte das gehen. Oder auch direkt über den Priogrammieradapter.
Im 1ten step habe ich die Daten alle als Const verwendet.

Im 2ten step läuft schon eine abfrage, ob der EEPROM vordefiniert ist, wenn nein, sollen die Daten einmalig geschrieben werden.

Aber da man sich ja auch weiter entwickeln möchte, wäre es ein schönes gewesen, einen Schritt weiter zu gehen.
kupferstecher hat geschrieben: Mo 27. Mai 2024, 22:42
Zur ASM-Programmierung gibt es hier etwas:
https://www.mikrocontroller.net/article ... r#EEPROM_2

Die paar Befehle nach EEPROM_read: dürften reichen. Dann muss noch in Variablen kopiert werden, siehe LDD/STD.

https://wiki.lazarus.freepascal.org/AVR ... _assembler
Das werde ich mir heute Abend mal ausdrucken und schauen, ob ich dies im laufe der Tage für meine Bedürfnisse umsetzen kann.

Wäre schön, wenn dies erst mal mit AVR (ATMega328/ATMega128) läuft, bevor ich später dieses Projekt mit einem STM32 umzusetzen plane.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.4 FPC 3.2.2);

Benutzeravatar
kupferstecher
Beiträge: 429
Registriert: Do 17. Nov 2016, 11:52

Re: EEProm per default Falsche werte?

Beitrag von kupferstecher »

Da war ich mit meiner Antwort wohl voreilig, braucht doch keinen Assembler für den EEPROM-Zugriff. Bin mir aber jetzt auch nicht sicher, was du schon am Laufen hast und was noch fehlt.

https://wiki.freepascal.org/AVR_Embedde ... _EEPROM/de


Beim STM32 (welcher Typ überhaupt, die Meisten haben ja gar keinen EEPROM), sollte selbiger Memory-gemappt sein, sich also über normale Adresszugriff an einer bestimmten Adresse lesen und schreiben lassen.

Also in dem Sinne (ungetestet):

Code: Alles auswählen

var
  EEPROMData: array[0..511] of Byte absolute $08080000;

Antworten