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!!!
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
Hat überhaupt jemand verstanden, was ich machen will? Schätze, ich hab mich unklar ausgedrückt, oder?
>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
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
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.
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?
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!
Der Text wird nur einmal geschrieben, aber oft ausgelesen.
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
>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
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.
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
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
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.
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
Danke Peter, der ist genau das richtige. Der lässt sich doch genauso programmieren wie der tiny13 (auch von der Hardware)?
Was empfiehlt sich denn als Speichermöglichkeit für Daten, die sich oft ändern?
... Was empfiehlt sich denn als Speichermöglichkeit für Daten, die sich oft ändern? ... Wie oft?
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.
schon was externes.. also etwa jede Minute 1kb schreiben und 2-5 jahre solltes schon halten
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).
60 24 365,25 = 525960 Schreibvorgänge pro Jahr
1kb insgesamt, aber verteilt und nicht als 1kb block. okay, ich schau mal, was ich zu fram finde, ansonsten halt doch "normales" eeprom.
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.
FM24C16A: 2KB FRAM (TME). Schreibt sich wie I2C-EEPROM, nur ohne Schreib/Löschzeit und beliebig oft.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.