Hallo, ich habe einen ATMEGA128/16 und versuche damit einen Art Datenlogger zu basteln. Leider mußte ich feststellen, daß via >Dim a as ERAM byte >a=100 ich nur die 4KB des proz ausnutzen kann, ich würde aber gerne ca. 100KB daten speichern, also den FLASH des ATMEGA nutzen. wie geht das? Danke für Eure Tipps... Gruß Johannes
Hi... Mit SPM kann man den Flash beschreiben, mit LPM lesen. Das geht dann indirekt über den Z-Pointer. Steht z.B. im Datenblatt und im AVR-Instruction-set. Ich denke aber, dass das für deine Zwecke ungeeignet ist, Flash ist nunmal Programmspeicher und hat eine begrenzte Lebensdauer (Schreibzyklen). Versuchs doch mal mit einem externen I²C-EEPROM, die gibt es bei Reichelt auch bis 64KByte. Oder mit MMC-Speicherkarte über SPI... Bit- & Bytebruch... ...HanneS...
Hi HanneS, danke für Deine Tipps. Die Schreibzyklen sind kein Problem, es werden alle 2 Wochen neue Daten reingeschrieben und ich tu das auch zyklisch implementieren (so daß jede Zelle nur alle 2 Wochen mal drankommt) Nur stellt sich mir nun die Frage: Wie mache ich so ein SPM / LPM mit Bascom? Hab in der Hilfe geguckt, Bascom kennt weder nen SPM noch nen LPM-Befehl und den Z-Pointer kennt es auch nicht. Geh ich da evtl. mit PEEK / POKE vor??? Gruß Johannes
Hi... Ich weiß es nicht, denn ich benutze kein BASCOM. Ich mach alles in Assembler, stelle aber keine allzu hohe Anforderungen an meine Programme. ...HanneS...
also ich hab mich nochmal erkundigt, bascom mag LPM, aber kein SPM und das ganze ginge über bootloader und fuses und das ist mir zu heiß... hab mir jetzt einen 64MB-MMC-Baustein samt Halterung (Kartenleser mit USB1.1 gabs günstig) besorgt... jetzt versuch ich alles per Soft-SPI-Interface auf PB0,PB1,PB2,PB3 mal schaun ob das funzt...
nicht richtig verstanden: die anwendung waere kein "bootloader" im ueblichen sinn sondern ein programm, das im bereich fuer bootloader liegt und auf den flash-speicher mittels funktionen zugreift/schreibt, die eigentlich fuer bootloader gedacht sind. Es wuerde halt nicht wie bei einem bootloader das anwendungs-programm, sondern die geloggten daten abgelegt. Einerlei, der ansatz mittels externem speicher ist besser.
Hi... @mthomas: So hatte ich das auch verstanden... Ich muss aber zu meiner Schande gestehen, dass ich noch nix mit SPM gemacht habe, auch noch keinen Bootloader. Auch mit dem Mega128 habe ich noch nix gemacht, habe also noch lange nicht alle Tücken im Datenblatt entdeckt. Trotzdem meine ich, dass es in Assembler nicht allzu kompliziert wird, regelmäßig eintreffende Daten ins Flash zu schreiben. Ich habe auch noch nicht nachgeschaut, ob das Schreiben byteweise, wortweise oder nur pageweise möglich ist. @Johannes: Hast du ein Datenblatt der MMC, welches das gesamte Protokoll der Übertragung beschreibt? Ich bin nämlich bei Google bisher nicht fündig geworden, habe nur ein Vierseitiges entdeckt, was vermutlich für Händler geschrieben wurde, also außer der Anschlussbelegung nix Verwertbares enthält. Wenn ja, schick bitte mal den Link oder Mail... Ich habe nämlich an einem AT90LS8535 eine SmartMediaCard laufen, mich stört aber die umständliche Kontaktierung, würde das Nachfolgeprojekt gern mit MMC realisieren. Bit- & Bytebruch... ...HanneS...
also, den MMC Baustein hab ich besorgt (64MB war das kleinste, was der Händler hatte :-o (welch Verschwendung bei 128KB rechnerischem Datenbedarf)) 34,50 Euronen das Ansprechen des Bausteins war unerwartet ganz einfach. das läuft sogar via "freiluftverdrahteter" kleiner Schaltung mit 6 widerständen und 2 dioden (zwecks spannungsabfall auf 3,6V) von www.ulrichradig.de (danke uli!!) mit den bascom befehlen SPIOUT, SPIMOVE... ging feld(500) in den MMC schreiben und lesen auf anhieb prima... jetzt bin ich noch auf der suche, den block, wo hingeschrieben wird, zu verschieben, also die adresse auf dem "riesigen" Speicherblock, schließlich muß ich bei o.g. Methode das Dimfeld vorher im SRAM / ERAM vorhalten und da komm ich ja nicht wirklich weiter, wenn da der speicherbedarf genau so hoch ist wie auf meinem MMC-Chip... aber in angehängter Source scheint jemand hierfür ne Lösung zu haben... ich weiß nur nicht, was die befehle Dat = &HFF Shiftout Mosi , Clk , Dat , Msbl Shiftin Miso , Clk , Resp , Msbl immer bedeuten, schließlich wird mit shiftout nur bitweise verschoben, oder? aber nächste woche wird das mal weiter analysiert... freu mich auf deine kommentare / hilfe, wenn du lust + zeit hast gruß johannes
wieviel byte können denn in der sek vom avr via spi auf die mmc geschrieben werden? weiß das einer von euch?
also ich hab das noch nicht gemessen, aber das scheint superschnell zu sein. wenn ich das richtig sehe, schiebt der avr so ein feld mit 500 byte einfach mal so in 1-2 takten da rüber. das hiesse (wenn die beobachtung stimmt) 500 byte = 4000 bit * 16000000 (Ops) gäbe 64000 MBit/s Das scheint mir realistische Zahl für nen Speicher. Ist aber alles nur Vermutung, sicher weiß ichs auch nicht. Aber vielleicht sonstjemand?
Seriell, also ein (SCK-)Takt pro Bit, plus Befehlsoverhaed... Mit 500 Byte pro Takt wird da wohl nix, wenn doch, dann Nobelpreis... ...HanneS...
stimmt, hab jetzt auch rausgefunden, wie das geht, und zwar bitweise... du hast recht@HanneS leider kommt bei mir im moment nur wirres zeug an, manchmal hängt das ganze komplett und wacht erst auf, wenn ich an der schaltung leicht schüttel... mit den waitstates "delay" in uS (standardeinstellung=2) habe ich auch schon experimentiert von 4, über 7 zu 8 und auch 30, 60, 80 und 1 und 0, aber meist dasselbe ergebnis, die übertragung vom MMC und zum MMC ist bei mir im moment nicht verlässlich... weiß da jemand rat? muß man das besonders abgeschirmt verdrahten? ich hab den MMC in eine halterung montiert, die ich aus einem USB-Chipleser rausgelötet und da dann die Litzen an die Lötkontakte rangelötet... mit den Befehlen SPIIN und SPIOUT funktionierte das ganze auch TOP, leider jetzt nicht mit SHIFTOUT und SHIFTIN (software)
"Schüttelsensor" eingebaut??? Das riecht nach Wackelkontakt (kalte Lötstelle)... Weitere Fragen (betrifft SD/MMC im SPI-Modus im Direktzugriff, also ohne FAT): Weiß zufällig jemand, ob man während des Lesens eines Blocks Pausen machen darf? Ich meine das so, dass man das nächste Byte erst dann einliest (durch senden der 8 SCK-Takte), wenn man es braucht. Wie groß darf ein Block beim Lesen definiert werden? Kann man z.B. die gesamte zu lesende Datei als Block definieren und dann nach und nach (so wie das nächste Byte gebraucht wird) einlesen? ...HanneS...
habe nun zum ersten mal fehlerfrei 512 byte gelöscht, geschrieben und gelesen... leider ist das ganze SAU-LANGSAM... 512 byte in ca. 1 minute...
Frage: ist irgendwie entscheidend, welche PINS man für das SPI verwendet. Ich hab grad PB0, PB2, PB3 und PB4 in Gebrauch (funzt allerdings momentan nicht, weiß au net wieso) vorher hatte ich PB0,PB1,PB2 und PB3 in Betrieb und hab jetzt verdachtsweise mal PB1 entlastet, weil dieser auch für die ISP-Programmierschnittstelle in Gerbauch ist und ich dachte, das könnte das Problem sein (das MMC-schreiben-lesen ist nämlich IMMER NOCH wackelempfindlich...)
Hi HanneS, du wolltest doch nähere Infos zu Schreibpausen und Schreib/Lesegeschwindigkeiten bei MMC. Schau mal beim Uli: (Spezif.-DOKU eines MMC) http://www.ulrichradig.de/site/avr_mmcsd/pdf/hitachi_hb28b128mm2.pdf (Timing beim MMC) http://www.ulrichradig.de/site/avr_mmcsd/pdf/MMCSDTimming.pdf Gruß Johannes
Hi Johannes... Danke, aber die habe ich schon durch. Sogar ausgedruckt und kommentiert (macht sich auf dem Bildschirm schlecht). Da wird von kontinuierlich folgenden Takten ausgegangen. Die Timing Diagramme enthalten auch noch einige Widersprüche (8x4=64???). Ich werde mir demnächst in Sande eine kleine SD-Card bestellen, brauche sowiso wieder einige AVRs, dann kann ich etwas experimentieren. Ich will mal hoffen, dass die SD-Card im SPI-Modus ohne FAT keine Probleme macht... Trotzdem viele Dank... Bit- & Bytebruch... ...HanneS... (ohne "Jo"...)
hachje, bei mir tuts immer noch nicht richtig. was ist eigentlich der I2C oder I²C modus, macht der evtl. mehr sinn als der SPI?
Hi... I²C wird von ATMEL TWI genannt, ist auch seriell, aber eben anders als SPI. Um den Unterschied zu sehen wirst du dir schon mal die Impulsdiagramme und Spezifikationen etwas genauer ansehen müssen. Tips zum Umgang mit der MMC-Karte kann ich dir nicht geben, ich habe mir zwar eine SD-Card 32MB bestellt, die ist aber noch nicht da. Außerdem wird das auch seine Zeit dauern, bis ich die ersten Bytes erfolgreich hin und her geschoben habe (wenn es mir überhaupt gelingt). Wobei ich mich auch nicht täglich mit den AVRs beschäftigen kann und will... ...HanneS...
geht mir au so, schließlich gibts draussen vorm labor auch noch eine welt mit bäumen und wiesen und sonne und menschen... ;-)
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.