Forum: Mikrocontroller und Digitale Elektronik AVR - Bascom - externes EEPROM


von Steffi (Gast)


Lesenswert?

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

von basti (Gast)


Lesenswert?

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.

von Steffi (Gast)


Lesenswert?

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

von basti (Gast)


Lesenswert?

also du hast keinen string den du speichern möchtest sondern eine große
nummerische variable.. sehe ich das reichtig?

von Steffi (Gast)


Lesenswert?

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!

von basti (Gast)


Lesenswert?

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

von Christoph Kessler (Gast)


Lesenswert?

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 (?)

von Steffi (Gast)


Lesenswert?

Bedeutet k bei EEproms bit oder byte?

von Peter Dannegger (Gast)


Lesenswert?

Also der 24C512 (Reichelt: 4,10€) hat 64kB, d.h. Du kannst 16384 Zahlen
(long = 4 Byte) drin speichern.


Peter

von Steffi (Gast)


Lesenswert?

Sind das bei dem 24C512 sind das dann 64kbyte?
Hat das BASCOM da irgendwelche Routinen um das Ding anzusprechen?

mfg
Steffi

von ,,,, (Gast)


Lesenswert?

> Sind das bei dem 24C512 sind das dann 64kbyte?

Ja.

von Steffi (Gast)


Lesenswert?

Mann bin ich blöd! 64 x 8 = 512

von basti (Gast)


Lesenswert?

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)

von Steffi (Gast)


Lesenswert?

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?

von basti (Gast)


Lesenswert?

mmhh habe noch keine anderen seriellen eeproms gesehen, weiss nicht
vielleicht gibts auch welche mit spi, das wäre ja dann auch seriell..

von Markus_8051 (Gast)


Lesenswert?

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

von Marko (Gast)


Lesenswert?

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.

von Ben Zijlstra (Gast)


Lesenswert?

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