mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM beim mega8 funzt nicht wie gewünscht


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend,

ich gehe doch recht in der Annahme dass der mega8 512Bytes EEPROM hat?!

bei mir schauts nämlich aus als ob es weniger wären ...

hier ein Programmausschnitt

uint8_t eeByteArray[512] EEMEM;
int16_t messidx=0, u12, u18;

das folgende wird in einer Schleife aufgerufen
  if ( messidx<500 )
  {
    eeprom_write_byte(eeByteArray+messidx++, u12);
    eeprom_write_byte(eeByteArray+messidx++, u18);
  }

wenn ich die Schleife rechtzeitig abbreche passt alles,
mache ich das nicht werden die Daten am Anfang des EEPROMS mit Daten 
überschrieben die eigentlich am Ende stehen müssten

hat einer ne Idee?

Autor: Der keine Ahnung hat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe zwar keine Ahnung aber für micht sieht es so aus als ob Du pro 
Schleifendruchgang zwei Bytes "verbrauchst". Dann kommst Du natürlich 
auch nur 256 mal "rum".

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was verstehst du unter rechtzeitig, ist <500 schon die Grenze?

Die Funktion ist do deklariert:
static _inline_ void   eeprom_write_byte (uint8_t *__p, uint8_t 
__value)

Bei den Parametern u12, u18 hast du einen impliziten cast nach uint8_t 
und eventuell schreibst du andere Werte als die erwarteten (z.B. 0 statt 
256). Im EEPROM stehen bei aufsteigenden Werten also 0..255,0...255 
hintereinander! Das mag so aussehen, als ob nur die erste Hälfte 
richtig beschrieben wird. Der komplette Quellcode würde helfen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind 512 Bytes, ja.  Irgendwo muss da der Wurm sein, vielleicht auch 
in einem Programmteil, den Du nicht gezeigt hast.

Angenommen, das da oben ist die einzige Stelle, an der ins EEProm 
geschrieben wird: Kann Dein Index negativ werden?  Und Du schreibst 
jeweils nur das untere Byte Deiner 16-Bit-Variablen.  Das ist Dir schon 
klar?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe zwar keine Ahnung aber für micht sieht es so aus als ob Du pro
>Schleifendruchgang zwei Bytes "verbrauchst". Dann kommst Du natürlich
>auch nur 256 mal "rum".
aber ich erhöhe ja den Index auch zwei Mal ...


>Bei den Parametern u12, u18 hast du einen impliziten cast nach uint8_t
>und eventuell schreibst du andere Werte als die erwarteten (z.B. 0 statt
>256).
ja ist klar, aber u12 und u18 sind kleiner als 256,
es funktioniert wie gesagt alles wenn ich die Messung rechtzeitig 
abbreche

dann werde ich wohl debuggen müssen, ich hoffte ich hätte was übersehen 
was vielleicht ganz offensichtlich ist ...

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie zu befürchten war der Fehler im restlichen Programm .... :-(

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.