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....
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.
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?
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
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.
@ 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?
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.
@ 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
@ 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! :-(
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.
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.
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?
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.
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?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.