mikrocontroller.net

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


Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: basti (Gast)
Datum:

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

Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 (?)

Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bedeutet k bei EEproms bit oder byte?

Autor: Peter Dannegger (Gast)
Datum:

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


Peter

Autor: Steffi (Gast)
Datum:

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

mfg
Steffi

Autor: ,,,, (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sind das bei dem 24C512 sind das dann 64kbyte?

Ja.

Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mann bin ich blöd! 64 x 8 = 512

Autor: basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Steffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: basti (Gast)
Datum:

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

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ben Zijlstra (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.