Forum: Mikrocontroller und Digitale Elektronik Flash als Speicher für DAten verwenden (ATtiny13)


von Patrick (Gast)


Lesenswert?

Hallo zusammen,
ich arbeite mit den ATtiny13 und habe das Problem, dass der EEPROM zu 
klein ist.
Ich möchte nämlich einen Text über die serielle Schnittstelle ausgeben, 
wenn der Text immer gleich ist, kann ich ihm im Programm einfach so 
schreiben, er steht dann irgendwo im Flash. Das Problem ist nun, dass 
der Text dem Mikrocontroller übermittelt werden soll, und der 
Mikrocontroller diesen dann speicher soll, möglichst aber am Ende des 
Flashs.
Ist das über haupt möglich?
Vielen Dank!!!

von Guido S. (flintstone)


Lesenswert?

Hallo Patrick,

ich vermute, dass es möglich ist, da ein Bootloader auch nichts anderes 
macht. Ist es aber nicht einfacher einen externen EEPROM anzuschliessen? 
Ich denke da an einen Chip der z.B. mit TWI (I2C) arbeitet.

Gruß
Guido

von Patrick (Gast)


Lesenswert?

Hat überhaupt jemand verstanden, was ich machen will?
Schätze, ich hab mich unklar ausgedrückt, oder?

von Oliver (Gast)


Lesenswert?

>Hat überhaupt jemand verstanden, was ich machen will?
>Schätze, ich hab mich unklar ausgedrückt, oder?

Schätze, du hast es selber noch nicht ganz verstanden.

Die Stichworte von Guido sind alle richtig, such dir das für dich 
passende aus.

Oliver

von g457 (Gast)


Lesenswert?

Ja, das geht, kuckst Du ins Datenblatt [1] ins Kapitel "16. 
Self-Programming the Flash".

Obs sinnvoll ist sei mal dahingestellt. Überlegenswert wäre wie schon 
angesprochen ein externer Speicher, eeprom/flash/sram/..

HTH

[1] http://atmel.com/dyn/resources/prod_documents/doc8126.pdf

von Gast 57 (Gast)


Lesenswert?

Hallo Patrick,

verstanden habe ich schon, was Du machen willst.

Gehen wird es, im Prinzip ja (Radio Eriwan, wer kennt das noch)
ABER:
Du mußt halt auf einiges achten:

Der Flash wird Pageweise geschrieben. (Pagegröße siehe Datenblatt)
Der Flash ist nicht gerade sehr häufig überschreibbar.
Die Daten müssen irgendwie in den µC kommen.
(Gilt auch für ein externes EEPROM)

Ich halte die Lösung die Texte im Flash "zwischenzuspeichern"
für eher suboptimal. Ein kleines serielles EEPROM wie auch
von Guido Scheidat dürfte die sinnvollere Lösung sein.

von Matthias K. (mkeller)


Lesenswert?

Im AVR-Gcc Tut gibts zumindest mal den Ansatz:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Ich denke wenn du einen ATtiny13 einsetzt, kommt es auf die Größe an. 
Also kein externes EEPROM möglich.

Wie oft wird der Text denn übertragen? Einmal? Oder ständig?

von Patrick (Gast)


Lesenswert?

Danke,
tut mir leid Guido, unsere Posts haben sich überkreuzt!

Einen externen EEPROM möchte ich nicht anschließen, ich hab dafür keinen 
Platz.
Ja, so was wie ein Bootloader soll es werden, nur das ich eben diese 
geschriebenen Bytes nicht ausführen, sondern lesen möchte.
Gibt es was in BASCOM, das mir helfen könnte?
Vielen Dank!

von Patrick (Gast)


Lesenswert?

Der Text wird nur einmal geschrieben, aber oft ausgelesen.

von g457 (Gast)


Lesenswert?

In Bascom kann ich Dir nicht helfen, aber zumindest ein Grundgerüst (in 
C :-) liefern - die eigentlich einzige Herausforderung ist, dafür zu 
sorgen, dass die Flashseite(n) nicht anderweitig benutzt wird(werden). 
In C ist das ganz einfach zu erreichen: eine eigenen Section anlegen, 
eine Variable hinreichender Größe (ein ganzzahliges Vielfaches der 
Seitengröße) ebendort hineinpacken, die Section beim Linken z.B. 'ganz 
nach hinten' legen. Fertig.

Zum Lesen: pgm_read_byte() und co.
Zum Schreiben: Gemäß Datenblatt die Seite löschen, den neuen Text in den 
Puffer legen, die Seite neu schreiben.

Jetzt viel Spaß beim Umsetzen auf Bascom ;-)

HTH

von Oliver (Gast)


Lesenswert?

>Gibt es was in BASCOM, das mir helfen könnte?

Die Bascom-Hilfe, das Datenblatt zu deinem Controller, dazu aus dem 
Tuturial hier ein Kapitel über Daten im Flash.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Oliver schrieb:
>>Gibt es was in BASCOM, das mir helfen könnte?
>
> Die Bascom-Hilfe,

In diesem Fall, ausnahmsweise, würde mich das sehr wundern, wenn die 
Hilfe dazu irgendetwas zu sagen hätte.

Das Problem ist auch in C schon so speziell, dass man höchst 
wahrscheinlich erst mal 3 Tage Recherche im Forum benötigt, ehe da 
irgendetwas Brauchbares dabei rauskommt.

von Oliver (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> In diesem Fall, ausnahmsweise, würde mich das sehr wundern, wenn die
>
> Hilfe dazu irgendetwas zu sagen hätte.

Das wäre ja die dabie zu gewinnenden Erkenntnis, ob das mit Bascom geht, 
oder auch nicht.

Für jemanden, für den schon nicht-auszuführende Daten im Flash Neuland 
sind, enthält die Aufgabestellung sowieso noch einige größere 
Herausforderungen. C zu lernen, dürfte dabei noch nicht einmal die 
schwierigste davon sein.

Oliver

von Peter D. (peda)


Lesenswert?

Warum nicht den ATtiny85 nehmen, der hat 512Bytes EEPROM.

Beim ATtiny13 werden die Schreibroutinen ne Menge des winzigen Flash 
(512 Words) verbrauchen, da wird kaum was zum Speichern übrig bleiben.
Und Deine Applikation wird ja auch nicht nur aus Luft bestehen.


Peter

von Patrick (Gast)


Lesenswert?

Hallo Peter,
das ist ne gute Idee, so kann ich es lösen.
Nur ist der Versand bei Reichelt recht hoch, gibt es nich einen 
ähnlichen Tiny-Controller, der die Größe des tiny13 hat und der was 
billiger ist, und den es auch bei Conrad gibt?
Ich brauche nur 100Byte, die 64 reichen ganz knapp nicht aus.

von Peter D. (peda)


Lesenswert?

Patrick schrieb:
> Ich brauche nur 100Byte, die 64 reichen ganz knapp nicht aus.

Dann sollte schon der ATtiny25 reichen (CSD: 1,40€).

CSD verschickt die als Brief, der Versand ist also recht günstig.
Einfach mal anrufen, was es genau kostet.


Peter

von Patrick (Gast)


Lesenswert?

Danke Peter,
der ist genau das richtige.
Der lässt sich doch genauso programmieren wie der tiny13 (auch von der 
Hardware)?

von Klaus (Gast)


Lesenswert?

Was empfiehlt sich denn als Speichermöglichkeit für Daten, die sich oft 
ändern?

von didadu (Gast)


Lesenswert?

RAM

von Markus (Gast)


Lesenswert?

... Was empfiehlt sich denn als Speichermöglichkeit für Daten, die sich 
oft
ändern? ...

Wie oft?

von Klaus (Gast)


Lesenswert?

minütlich

von (prx) A. K. (prx)


Lesenswert?

Intern: RAM - oder reihum durch's EEPROM wandern, wenn nur wenig Bytes. 
Ausrechnen, bei wieviel Daten und wieviel EEPROM das wie lange 
mindestens hält.

Extern: FRAM - oder EEPROM/Dataflash mit gleicher Strategie wie oben.

von Klaus (Gast)


Lesenswert?

schon was externes..

also etwa jede Minute 1kb schreiben
und 2-5 jahre solltes schon halten

von (prx) A. K. (prx)


Lesenswert?

Also 1KB insgesamt und nur der letzte Block wird benötigt?

1/Minute gibt bei 2 Jahren 1 Mio Schreibvorgänge. Ein externes EEPROM 
kann 1 Mio Schreibzyklen, bereits einige KB solchen EEPROM reichen dafür 
also aus.

Ideal ist FRAM, ist auch gut verfügbar (z.B. bei TME).

von didadu (Gast)


Lesenswert?

60  24  365,25 = 525960 Schreibvorgänge pro Jahr

von Klaus (Gast)


Lesenswert?

1kb insgesamt, aber verteilt und nicht als 1kb block.

okay, ich schau mal, was ich zu fram finde, ansonsten halt doch 
"normales" eeprom.

von Andreas K. (derandi)


Lesenswert?

Wie wärs mit einem Tiny 25, 45 oder 85? Die haben 2, 4 bzw. 8x soviel 
RAM und EEPROM-Speicher an Bord und sind zumindest Pinkompatibel.

von (prx) A. K. (prx)


Lesenswert?

FM24C16A: 2KB FRAM (TME). Schreibt sich wie I2C-EEPROM, nur ohne 
Schreib/Löschzeit und beliebig oft.

von (prx) A. K. (prx)


Lesenswert?

Andreas K. schrieb:

> Wie wärs mit einem Tiny 25, 45 oder 85? Die haben 2, 4 bzw. 8x soviel
> RAM und EEPROM-Speicher an Bord und sind zumindest Pinkompatibel.

Aber nur 100000 mal (sicher) beschreibbar. Ergibt bei 2 Jahren eine
Mindestkapazität von 10KB. Ausserdem wurde der ältere Thread von Klaus
gekapert, insofern ist offen ob ebenfalls 8-Pin Zwerg.

von Andreas K. (derandi)


Lesenswert?

A. K. schrieb:
> Aber nur 100000 mal (sicher) beschreibbar.

Guck, der Arbeitsspeicher wächst im selben Verhältnis, wenn er groß 
genug ist müssen die Daten nicht ins EEPROM.
Wäre eigentlich eine tolle Lösung für sein Problem, wenn er nicht schon 
selbst drauf gekommen ist und es sich gespart hat, uns freundlicherweise 
zu unterrichten, um dem Thread ein vernünftiges Ende zu spendieren.

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
Noch kein Account? Hier anmelden.