Hallo, ich bin zwar in Bascom so recht fit - aber ich hab keine Ahnung wie ich ein externes EEPROM an einen AVR anschließen und ansprechen soll. Das Programm soll 10-15 stellige Zahlen in ein EEPROM schreiben. Und davon ca. 5000. Welches EEPROM soll ich nehmen? I²C? Fragen über Frage und hoffentlich naht Hilfe! Danke im Voraus! Steffi
hallo, das kommt darauf an, wieviel platz bzw pinne du frei hast. ich würde aus platzgründen generell ein I2C eeprom empfehlen... wenn du für jede ziffer ein komplettes byte belegst (das wäre programmiertechnisch die einfachste variante) würdest du bei 5000x15 bytes = 75Kbytes benötigen.. das heisst ein 64k eeprom ist zu klein - du benötigst also 128k. da wirst du mit nem parallelen eeprom nicht glücklich.
Danke Basti, aber erstmal Stopp! Bascom Long ist doch nur 10-stellig oder? Angenommen ich nehm I²C und 256k weil´s dann e schon egal ist, wie geh´ ich da vor. Ich hab in meinem BASCOM-Buch gelesen, dass über I²C nur 16 Kbit!! adressiert werden können. Das stimmt nicht oder? Hat jemand zufällig einen Beispielcode, wie das mit dem Ansprechen geht, für mich auf Lager? Danke und viele Grüße, Steffi
also du hast keinen string den du speichern möchtest sondern eine große nummerische variable.. sehe ich das reichtig?
Hallo Basti, ja das ist richtig. Aber länger als Long geht ja e nicht oder? Und da Long nur 10 Stellen lang ist, habich wahrscheinlich ein Problem. Aber das jetzt nur nebenbei. Angenommen String 15stellig - hast Du da eine Lösung? Danke!
long: 4 bytes. das heißt pro zahl musst du i bytes im eeprom speichern... es gibt bestimmt irgendne funktion mit der du das long zerlegen kannst in seine bytes. aber dafür schaust du mal auf www.roboternetz.de im forum, da gibts direkt n bascom forum. die wissen meist aus erfahrung mehr
Hallo die I2C-Eproms haben nur wenig Speicherplatz, ein paa Kilobit, es gibt aber 8Pin-Flash-Speicher von Atmel AT45... bis 4 MBit,z.B. bei Sander-electronic oder Segor (?)
Also der 24C512 (Reichelt: 4,10) hat 64kB, d.h. Du kannst 16384 Zahlen (long = 4 Byte) drin speichern. Peter
Sind das bei dem 24C512 sind das dann 64kbyte? Hat das BASCOM da irgendwelche Routinen um das Ding anzusprechen? mfg Steffi
ich weiss nicht ob sich ein eeprom evtl als externer sram anschließen lässt?? die funktionsweise (anschluss) ist doch ähnlich, oder? (ich lasse mich gerne eines besseren belehren)
Noch was: Hab jetz gerade gelesen dass sich das 24C256 über i2c ansprechen lässt. Und je mehr ich über sowas finde komme ich zu dem Schluss, dass serielles EEprom = i2c EEprom. Stimmt das?
mmhh habe noch keine anderen seriellen eeproms gesehen, weiss nicht vielleicht gibts auch welche mit spi, das wäre ja dann auch seriell..
Hallo Steffi, hallo Basti, nein, das stimmt nicht ganz. Von Microchip und SGS-Thomson z.B. gibt es die 93Cxx-Serie. Das sind auch serielle EEPROMs, diese haben aber Microwire und nicht I2C-bus. Außerdem gibt/gab es von Altera spezielle EEPROMs für die Konfiguration von FPGAs. Diese hatten für damalige Verhältnisse riesige Speichergrößen. Diese benutzen aber kein bestimmtes Protokoll. Sprich, die takten einfach nur ihre Daten raus - von Anfang bis Ende, kein Anlegen einer Adresse möglich. Die Chips in Telefonkarten sind auch serielle EEPROMs - wieder anderes Protokoll und es gibt sicher noch mehr... Gruß, Markus_8051
Hab den 24c256 mal verbaut, ist ne ganz einfache Geschichte die Serie mit Bascom zu verwenden. Dafür gibts den I2C-Befehlssatz. Zu merken ist aber: Du musst Deine Daten in Bytes zerlegen um sie zu speichern und Byte für Byte rüber schieben. Beim auslesen dann das ganze in die Geggenrichtung. Die Adresse der EEPROM werden über die Pins am 24c... per Aussenbeschaltung eingestellt, Datenblatt beachten. Du kannst bis zu 4 der Teile parallel auf den I2C hängen, mußt nur unterschiedliche Adressen vergeben. Wichtig: Pullup-Widerstände nicht vergessen! Zu den HC24C... Bausteinen gibts unter Bascom Samples ne Anleitung mit Beispielcode, der einfach einzubauen ist.
Code for Bascom to work with a 24LC256 I2c EEPROM '24lc256 Const E_ctlw = &HA0 Const E_ctlr = &HA1 Dim E_ah As Byte Dim E_al As Byte Dim E_addr As Word Dim E_dat As Byte Dim Dat As Byte Declare Sub E_write(byval E_addr As Word , Dat As Byte) Declare Sub E_read(byval E_addr As Word , E_dat As Byte) Declare Sub 24lc256_test call 24lc256_test end ' Routine to test the 24LC256 ' Sub 24lc256_test 'Test read and writes Print "Testing I2C Eeprom" Dat = 0 For E_addr = &H1000 To &H1010 Call E_write(e_addr , Dat) Call E_read(e_addr , E_dat) Print E_dat ; " "; Incr Dat Incr Dat Incr Dat ' +1 +1 +1 Next E_addr Print Print "Here a counter should appear from 0, 3, 6, 9, 12, 15, 18, 21, 24, 27 etc." Print "End of Test" End Sub ' Routine to write the 24LC256 ' Sub E_write(byval E_addr As Word , Dat As Byte) E_ah = High(e_addr) E_al = Low(e_addr) I2cstart I2cwbyte E_ctlw I2cwbyte E_ah I2cwbyte E_al I2cwbyte Dat I2cstop Waitms 10 End Sub ' Routine to read the 24LC256 ' Sub E_read(byval E_addr As Word , E_dat As Byte) E_ah = High(e_addr) E_al = Low(e_addr) I2cstart I2cwbyte E_ctlw I2cwbyte E_ah I2cwbyte E_al I2cstart I2cwbyte E_ctlr I2crbyte E_dat , Nack I2cstop ' End Sub
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.