www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik at89c5131A EEPROM


Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Wollte mal wissen wie das jetzt geht

wenn ich vom Akku ins EEPROM was schreiben will
weil ich mus zu erst was ins ColumLatch schreiben

weis nicht genau wie das geht kann mir jemand nen beispiel ziegen in 
Assembler ?

wär sehr dankbar

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
normalerweise geht das über den Befehl movx @dptr,a. Hast du allerdings 
ein serielles eeprom über iic oder spi dran, dann wird das ganze etwas 
schwieriger

Autor: Reski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich will das interne eeprom programmieren
so wie du mir das aufgeschrieben hast kenn ich es auch hatt aber nicht 
funktioniert

weil wie gesagt es mus erst in das columnlarch geschrieben werden ist 
ein RAM und von da aus ins eeprom

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe das datenblatt jetzt nicht vorliegen, aber das klingt schon 
komisch.
normal wäre, wenn du das interne eeprom freischalten müsstest, über ein 
steuerbit im sfr

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, in meinem Datenblatt steht drin, was zu tun ist:

10.2 Write Data in the Column Latches
Data is written by byte to the column latches as for an external RAM 
memory. Out of the 11
address bits of the data pointer, the 4 MSBs are used for page selection 
(row) and 7 are used for
byte selection. Between two EEPROM programming sessions, all the 
addresses in the column
latches must stay on the same page, meaning that the 4 MSB must not be 
changed.
The following procedure is used to write to the column latches:
• Set bit EEE of EECON register
• Load DPTR with the address to write
• Store A register with the data to be written
• Execute a MOVX @DPTR, A
• If needed, loop the three last instructions until the end of a 128 
bytes page

10.3 Programming
The EEPROM programming consists on the following actions:
• Writing one or more bytes of one page in the column latches. Normally, 
all bytes must belong
to the same page; if not, the first page address will be latched and the 
others discarded.
• Launching programming by writing the control sequence (52h followed by 
A2h) to the
EECON register.
• EEBUSY flag in EECON is then set by hardware to indicate that 
programming is in progress
and that the EEPROM segment is not available for reading.
• The end of programming is indicated by a hardware clear of the EEBUSY 
flag.

Ralf

Autor: rossi75 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht Dir auch ne Routine in C? Hier mal ein Ausschnitt von meinen 
Projekten. Endlich jmd der sich auch noch an diesem sehr schönen 
Controller vergreift. Ich hab das übrigens nachher mit SDCC compiliert. 
Das ASM-Listing dazu kann ich Dir ggf. auch noch zukommen lassen wenn Du 
möchtest.

cu,
olly...

___________________________________________

Uchar EEPROM_rd(Uchar xdata *address)
{
  // Auf EEPROM umschalten, einzelnes Byte aus EEPROM lesen und im RAM 
(IDATA, nicht XDATA) lagern,
  // dann auf XDATA zurückschalten und von IDATA nach XDATA zurückgeben
  Uchar val;  // IDATA
  bit ea_save = EA;  // IDATA, Interrupts speichern
  EA = 0;  // Interrupts ausschalten
  EECON = 0x02;  // XDATA > EEPROM schalten
  val   = *address;  // EEPROM > IDATA lesen
  EECON = 0x00;  // EEPROM > XDATA schalten
  EA = ea_save;  // Interrupts wiederherstellen
  return (val);  // IDATA > XDATA zurückgeben
}

void EEPROM_wrt(Uchar xdata *address, Uchar val)
{
  int i;
  bit ea_save = EA;  // Interruptstatus zwischenspeichern
  EA = 0;  // und ausschalten
  WD_ACK();
  EECON = 0x02;  // auf EEPROM mappen
  *address = val;  // pointer auf EEPROM beschreiben
  EECON = 0x50;  // Schreibsequenz einleiten
  EECON = 0xA0;  // Schreibsequenz vollenden
  while (EECON & 0x01); // warten bis EEPROM zuende geschrieben wurde...
  for (i = 0; i < 500; i++);                      // Show-Effekt: 
Extra-Warteschleife um Schreibvorgang zu verlangsamen, nicht höher 
setzen weil HW-Watchdog sonst nicht bedient werden kann. Wenn das nicht 
drin ist, wird seltsamerweise auch nix gespeichert...
  EECON = 0x00;   // EEPROM > XDATA schalten
  EA = ea_save;   // Interruptstatus wiederherstellen
}

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohe danke dir aber in C verstehe ich das nicht :-)

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.