www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM


Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich möchte eine Kurve Digital in einem EEPROM ablegen. Die Kurve wird
dann im Hauptprogramm ausgelesen und D/A gewandelt!

Meine frage ist, wie ich das EEPROM beschreibe! Verstehe ich das
richtig, dass mein 8518 z.B. in der Initialisations-Routine die Daten
ins EEPROM schreiben kann?

Oder muss ich das EEPROM mit einem speziellen Programmiergerät
beschreiben?

Vielen Dank für die Antworten....

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Das geht natürlich.

Martin

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannnst es während des eigentlichen Programmlaufs in das EEPROM
schreiben, aber das ist eigentlich Quatsch, da du die Daten ja dann
schon im Flash hast und die direkt von dort lesen kannst, ausserdem
sind sie im Flash sicherer als im EEPROM aufgehoben.
Wenn doch im EEPROM, dann solltest du die Daten direkt beim
Programmieren des Chips mit Brennen, das können alle üblichen
Programmiergeräte/Adapter, auch im ISP-Mode.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm! Das tönt gut! Ich möchte das EEPROM direkt beim Programmieren des
Chips mit Brennen!

Aber ich habe nicht viel Ahnung, wie ich das Anstellen soll!! Ich habe
das STK 500 Starter Kit!

In welcher Sprache muss man dann ein EEPROM programmieren! Ich möchte
eine Tabelle ins EEPROM laden... Kann man das mit AVRStudio und dem STK
500?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Izoard!

Programmierst du unter C oder unter Assembler?
Mir ist nämlich bei meinem CodeVision AVR etwas aufgefallen.
Wenn man dort etwas in das EEPROM legt, so beginnt die Variable bei
Adresse 1 und nicht bei Adresse 0.
Ich habe dem Support ein Email geschickt und die haben mir geantwortet:
The first byte of the EEPROM is not used as on some AVR chips it's
altered during power on.

Was nochmal deine Frage angeht hier meine Meinung (Ich gehe jetzt von C
aus):
Ich finde es nicht gut, wenn du das Programm schreibst und das EEPROM
separat bespielst, da ja dann später das Feld oder die Felder mit dem
Inhalt des EEPROM zusammenpassen müssen und das anzupassen finde ich
umständlich. Außderdem glaube ich, dass es auch umständlich ist das
EEPROM extra zu beschreiben.

Mein Tipp:
Zuerst die Variablen initialisieren:

#pragma warn-
unsigned char eeprom grossesfeld[200], kleinesfeld[20];
#pragma warn+

Danach füllst du die Felder an. z.B.

felderanfuellen();


Dann flasht du das Programm und lässt es laufen.
Hat das geklappt, so machst du die gesamte Funktion "felderanfuellen"
zum Kommentar.

Daruch hast du den großen Vorteil, dass du alles in einem File hast,
also die Informationen, die im EEPROM stehen und das Programm selbst.
Auch wenn die Funktion "felderanfuellen" unter Kommentar steht, weißt
du trotzdem, wenn du nach einiger Zeit im Programm wieder nachschaust,
welche Werte ins EEPROM gehören.
Du hast wie gesagt alles in einem File und musst dich nicht um
irgendein File kümmern, dass ins EEPROM hinein muss.

Tschüss
Martin

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so'n Quark. Dafür gibts ne Projektverwaltung. Neues Projekt anlegen,
alle zu programmienden files dazuladen, Projekt speichern, fertig.
Jedesmal, wenn du das Projekt öffnest, hast du auch alle benötigten
files geladen.
Und mit deiner Mimik, einmal laufen lassen und dann auskommentieren,
funktioniert auch nicht, da es keinen flash-erase gibt, sondern nur den
chip-erase, beim nächsten flashen ist also auch der EEPROM leer.

Konstanten kann man sowohl in C als auch in Assembler im flash
lokalisieren, dafür brauch man keinen EEPROM.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ crazy horse: Wir sprechen von einem Externen EEPROM!!! (sorry)

@ Martin: Danke, jetzt hab ich noch ein kleines Problem:

Mein uC muss ja nicht viel können! Ich denke an ein Tiny! Jedoch sind
die Daten für's EEPROM relativ gross ~4K!
Wie würdest du das machen? Oder weiss sonst jemand, wie man mein
Problem löst?

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachträgliches programmieren der Daten über serielle Schnittstelle? Hat
auch den Vorteil, dass man nachträglich nochmal was ändern kann.
Mußt halt ne kleine Programmierroutine schreiben, die dir die Daten von
der seriellen Schnittstelle nimmt und dann ins Flash oder EEPROM oder
weiß der Geier was reinschreibt.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Carzy Horse: Aber natürlich du hast recht. Tschuldigung mein
Denkfehler.

@ Izoard: Achso wird reden von einem externen EEPROM.
Bei einem externen EEPROM kann man das anwenden, was ich dir schrieb.
Nur kann man natürlich keine Felder anlegen, so wie es beim internen
EEPROM machbar ist. Man benötigt eine Funktion die ein Byte auf eine
bestimmte Adresse schreibt und eine Funktion, die ein Byte von einer
bestimmten Adresse holt.
z.B:
void write_byte(unsigned int adresse, unsigned char byte);

unsigned char read_byte(unsigned char adresse);

Es kommt jetzt natürlich noch darauf an, ob es ein serielles oder ein
paralleles EEPROM ist. Im Datenblatt des EEPROMs sind immer
dementsprechende Hinweise für eine Programmierung des Speichers.

Tschüss!

Martin

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Erdi Soft

Also, so wie ich das jetzt verstehe, muss ich (um das ext. EEPROM
einmalig zu beschreiben) eine WriteEEPROM - routine schreiben, die mir
die Daten vom Flash ins externe EEPROM schreibt!

oder wie meinst du das mit:

"Mußt halt ne kleine Programmierroutine schreiben, die dir die Daten
von
der seriellen Schnittstelle nimmt und dann ins Flash oder EEPROM oder
weiß der Geier was reinschreibt."

Dann bruch ich also doch ein grosser uC, um das EEPROM zu beschreiben!
:-(

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du mal ganz genau beschreiben, was du eigentlich
machen willst.
Willst du sowas wie nen Signalgenerator bauen?

Wenn ich alles richtig verstanden habe, willst du irgendwas bauen, was
dir aus nem Speicher Daten ausliest und dann an nen D/A-Wandler gibt,
oder?`Wenn du sowieso nen 8515 benutzt, kannst du den Speicher auch
direkt anschließen. (Was meinst du mit nem grossen µController???)
Was meinen Vorschlag angeht, das war so gemeint: Du schreibst dir ein
Programm für den Controller, welches Daten von der seriellen
Schnittstelle entgegennimmt und dann in den externen Speicher, der ja
am µController angeschlossen ist, schreibst. Danach kannst du die
serielle Verbindung wegmachen und hast deine Daten im Speicher
(extern).

Vielleicht solltest du dir ein Programmiergerät bauen, mit dem man
EPROMs, EEPROMs, Flash, ... beschreiben kann. Ein paar Threads weiter
unten geht es um so ein Teil.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kopieren vom flash ins EEPROM ist und bleibt sinnlos.

Download über eine serielle Schnittstelle ist zwar möglich, aber mit
nem Tiny wird das auch arg knapp.

Bau dir für ein paar Cent Material den I2C-Programmer von Lancos
(ponyprog), funktioniert problemlos.

Alternativ kannst du mal über Datenreduktion oder Berechnung der
Kennlinie nachdenken und dann vielleicht doch alles intern
unterbringen.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mich entschieden, dass ich die Daten über die Serielle
Schnittstelle (RS-232) über den uC (AT2313) in das EEPROM schreiben
möchte!

Wie muss da mein Programmablauf aussehen? Kann ich das über einen
kleinen Buffer realisieren: also z.B. die letzten 20 Daten von der
RS-232 speichern und während dem empfangen der RS-232 Schnittstelle das
EEPROM brennen? Geht das?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du solltest dir einen Buffer in der Größe anlegen, welches dein EEPROM
im page-write-Schreiben unterstützt. Die kleineren 24C02-16 haben min.
8 byte. Hast du die 8 Byte empfangen, ab damit ins EEPROM,
Schreibzyklus dauert 10ms. Bei 9600 Baud dauert die Übertragung der 8
Bytes 1/9600 x 10 x 8= 8,3ms, reicht also. Daten reinschieben, "on the
fly" schreiben, warten oder handshake nicht erforderlich. Kleinere
Baudrate schadet nicht, größere geht ohne weitere Massnahmen nicht.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm, vielen Dank!

Also so:


16 Bytes (24C16) von der RS-232 in den Buffer schreiben!
(1/9600*10*16=16.6 ms)

wenn Buffer voll ist, Daten an EEPROM übergeben! (wenige us) =>?

Daten werden von RS-232 wieder in Buffer geschrieben, während das
EEPROM gesperrt ist und den Schreibvorgang zu Ende führt!??


stimmt das so?
Die RS-232 Übertragung wird also mit Polling gelesen?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du sowohl im Polling als auch im Interrupt-Betrieb machen.
Oben ist natürlich ein Fehler drin, bei 9600 und 8 byte-page-write
reicht die Zeit nicht, bei 16 byte-page-write aber schon.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, dann versteh ich's :-)

Danke

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.