100kb Variablen auf ATMEGA2560

Gast #2358292
Lesenswert?

hallo

ich habe ein Programm auf einem atmega2560 laufen, was 3 Schrittmotoren 
steuert, basierend auf einer Wertetabelle von rund 100kb.

bisher sende ich die Daten permanent seriell von einem PC, der sie aus 
txt-Datei ausliest.
ich will das System jetzt umbauen, das es ohne PC auskommt. das heißt 
die Daten sollen direkt auf dem atmega gespeichert sein.

theoretisch hat er ja genug Speicherplatz, aber funktioniert das auch 
praktisch, das ich da so viele Werte abspeichere?

wie würdet ihr das machen?

wie bekomme ich die Daten am besten im Programm abrufbar, und wo soll 
ich sie speichern?
#2358665
Lesenswert?

100k Lookuptable ist etwas arg viel. Ich wuerd da nochmals drueber und 
versuchen eine Funktion zu fitten.

Anstelle des internen Flash waere auch ein Atmel Datenflash zB ein 
AT45DB321 oder so moeglich.

Ich haette allerdings Angst dass die Tabelle nicht mehr genuegen 
koennte. Dann benoetigt man einen Bootloader falls die Daten im internen 
Flash liegen oder ein paar Zeilen Code falls sie im externen Flash 
liegen.
Den Bootloader wurd ich in jedem Fall haben wollen, denn allenfalls muss 
man das Programm auch neu laden.
Gast #2358693
Lesenswert?

danke für die antworten!

Ich probiere es jetzt mit einem arduino mega 2560.
ich brauche 3 Timer für die Schrittmotor Ansteuerung, deshalb brauche 
ich eh den großen atmega.

für arduino gibt es eine progmem Bibliothek, die es ermöglicht Variablen 
in den Programmspeicher zu schreiben.

mal sehen ob das funktioniert.
Gast #2358737
Lesenswert?

es sind Schrittwerte für die Schrittmotoren, die in int gespeichert 
werden. anordnen werde ich es in einem 3d array.
einen int pro wert brauche ich, da gibt es glaube ich nicht mehr so viel 
zu kürzen. (es waren mal über 500kb bevor ich "aufgeräumt" habe)
Gast #2358833
Lesenswert?

Warum nicht ein I2C EEPROM (128KiB) verwenden? Dann kann man ein 
kleineren MC verwenden. Sollte der Speicher nicht reichen, kann man mit 
einem weiteren EEPROM den Speicher erweitern. Falls mit 5V der MC 
betrieben wird, ist die EEPROMs ohne Spannungswandlung zu verwenden.

Den AT45DB321 oä würde ich bei Schaltungen bis 3.6V verwenden, da man 
mehr Speicher fürs Geld bekommt, als bei EEPROMs.

Ein "riesen" MC mit vielen Pins zu verwenden um 3 Schrittmotoren zu 
steuern würde ich mir nochmal überlegen. Meine Lösung wäre ein ATMEGA8 
und EEPROMS bei 5V oder ATMEGA8L (oder 8A) und Datenflash.
Persönliche Seite #2358869
Lesenswert?

Ich frag mich, warum ihr ihm das ausreden wollt, Speicher ist doch genug 
da, die Hardware steht und ihr macht tausend Vorschläge von Dataflash 
über EPROM und wahrscheinlich kommt gleich noch die SD Karte.

1
static const unsigned char MotorWerte[102400] PROGMEM = { 0x00, 0x01, 0x02,....... }
Wird so wohl nich mehr funktionieren, irgendwo ist Schluss bei der 
Anzahl der Inhalte eines Arrays.

Gelesen wird mit pgm_read_byte, word, ...

Schreib dir deine Werte in mehrere Tabellen und Handle die Auflösung 
ungefähr so, dass du die Werte gleichmässig aufteilst und dann mit ein 
paar if's schaust, wie gross ist der index-Wert und in welcher Tabelle 
steckt es dann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren