mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C externer Speicher


Autor: Subbl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo wer kann mir helfen?

ich will an nen ATmega16 per Software I2C nen externen Speicher
(AT24C64) anschließen.
Ich hab des jetzt auch schon gelötet und wollte fragen ob schon
irgendjemand nen fertigen C-code hat mit dem ich den Speicher ansteuern
kann.
Ich will dort einfach Daten speichern und später wieder abrufen.

Danke im Vorraus
Subbl

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ich würde mal die seite www.google.de ansehen!!! ;-)

da gibt es meine ich mind. 1 mio anbindungen zwischen nen atmel und nem
24c64!!!

hast du auch die adress-pins richtig verbunden? nicht einfach nur
vcc,gnd,sda,scl verbunden?

^^ ist halt ein allewelts bausstein!
btw:
ich mach in ein paar min das selbe, nur mit einem anderem uc

Autor: Subbl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das ist mein Problem, dass man bei google 1Mio Anbindungen gibt.
Mir reicht nämlich eine!

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
patsch, da ist sie wieder, die hand an der strin...

dann nehm doch irgend eine!

ansonsten...
... erst einmal i2c zum laufen bekommen und dann das datenblatt lesen!
... daraus dann adressen, comandos,.. ermitteln.
... und dann noch testen ;-)

so, jetzt such ich mir erstmal das datenblatt.

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, erster blick ins datenblatt:

byteweise schreiben:

adressierung des bausteins:
---------------------------
readaddr:  10100001
writeaddr: 10100000

adressierung des speichers:
---------------------------
highbyte: 000xxxxx
lowbyte:  xxxxxxxx

daten zum schreiben:
--------------------
data: xxxxxxxx

also sieht ein schreiben so aus, das du
1. write adresse übermitteln.
2. adressing high byte senden.
3. adressing low byte senden.
4. datenbyte senden

und so das lesen
1. read adresse übermitteln.
2. adressing high byte senden.
3. adressing low byte senden.
4. datenbyte lesen

Autor: Subbl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Aber kannst du mir das in C-Code geben, weil ich bin noch nich so fit
mit µC!

Subbl

Autor: KoF (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
um i2c must du dich selber kümmern! ( ich hab keine ahnung von atmel!)

das habe ich jetzt gerade in 2 min geschrieben!!
es solte  reichen um äußerst primitiv auf den 24c64 zuzugreifen!
es ist jedoch noch nicht getestet!
für verbesserungsvorschläge bin ich offen!

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Subb1

Schreib mir eine mail und du bekommst kommentierten Code samt
Beschreibung für avr-gcc.

Alex

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, er geht nicht!
ich muß jetzt erst mal suchen, ob bei meinen adressen & co was falsch
ist.

Autor: Zotteljedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex:

Dein Code ist so wertvoll, daß Du ihn nicht jedem zur Verfügung stellen
willst? Dann mach Dich mal drauf gefasst, daß Du auch in Monaten noch
ständig Mails bekommst, mit Leuten die ein ähnliches Problem haben.

Autor: Dirk Wiebel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

hier ein einfaches Byte-Les/Schreib-Beispiel, quick and dirty, aus
einem alten Projekt. Nutzt die Software-I2C-Lib von Peter Fleury.

Gruß, Dirk

#define device0  0xA6
#define device1  0xA2

void eeprom_WriteByte (unsigned int device, unsigned long address,
unsigned char
 data)
{
        i2c_start_wait(device+I2C_WRITE);
        i2c_write((address >> 8 ));
        i2c_write(address);
        i2c_write(data);
        i2c_stop();
}

unsigned char eeprom_ReadByte (unsigned int device, unsigned long
address)
{
   unsigned char temp;
        i2c_start_wait(device+I2C_WRITE);
        i2c_write((address >> 8));
        i2c_write(address);
        i2c_rep_start(device+I2C_READ);
        temp = i2c_readNak();
        i2c_stop();
        return temp;
}

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ist es nicht, im Rahmen meines nächsten Homepage-Updates werde ich
ihn dort veröffentlichen. Der Upload gestaltet sich nur per Modem immer
sehr langwierig ...

Alex

Autor: Zotteljedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich wusste ja nicht wie viele MB Dein Quellcode hat... ;-))

Ansonsten wäre es sicher auch nicht so langwierig gewesen, den
Quellcode hier im Forum als Dateianhang zu veröffentlichen.

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
In der Hoffnung, einen zotteligen Jedi glücklich gemacht zu haben ...

Autor: Zotteljedi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauch's ja nicht, aber andere vielleicht. Mich musst Du da nicht
glücklich machen. Allenfalls Dich selbst, daß nicht ständig jemand
nachfragt, ob er es auch haben kann. Aber wenn Du es brauchst:

Oh ja, Alex, Danke! DANKE! Du hast mich sehr glücklich gemacht.

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh ne, nech...

ich such die ganze zeit fehler, wo keine mehr sind!
ok, die routinen waren bugy, ich war halt zu schnell...
aber nachdem ich die fehler beseitigt hatte lief es immer noch nicht
:-(
und, woran lag es?
-> wofür steht wohl das c in 24c64? na? richtig, speed! c = 100 khz.
   und ich, ich habe einen high speed bus ~350khz...
   ich habe den bus jetzt gedrosselt ca 125khz. dann läuft er. was aber
schade
   ist, den meine ad's laufen auf highspeed. ich werde jetzt mal
sehen
   ob ich 24lc64 oder 24aa64 bekommen kann. die laufen auch mit
   highspeed.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Routinen ursprünglich für einen AT24C512 geschrieben. Der
ist bei 5V bis 1MHz spezifiziert.
Kannst du nicht einfach die Busgeschwindigkeit varriieren, wenn du
andere Bausteine ansprechen möchtest?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"wofür steht wohl das c in 24c64? na? richtig, speed! c = 100 khz."


Falsch !

Das C steht für CMOS.
Ein L bedeutet oft "Low Voltage", d.h. <5V.
Ein A bedeutet oft "Advanced", also nichts bestimmtes.


Für genaue Angaben brauchst Du immer die komplette
Herstellerbezeichnung und das Datenblatt.

Der AT24C64A ist z.B. für 400kHz von 1,8-5V spezifiziert.


Peter

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich berufe mich auf das datenblatt von microchip.

aber du hast mit deiner übersicht recht.
trotzdem ist der 24c64 nur für 100khz ausgelegt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"trotzdem ist der 24c64 nur für 100khz ausgelegt."


Warum trotzdem ?

Ich habe nirgends was anderes behauptet.

Ich habe nur suggeriert, daß man das Datenblatt vor dem Einsatz lesen
sollte und besser noch vor dem Einkauf.


Peter

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe nur suggeriert, daß man das Datenblatt vor dem Einsatz lesen
sollte und besser noch vor dem Einkauf.


hast ja recht. außerdem lag der inner grabbelkiste hier rum.
naja, das "kleine" eeprom ist eh klein.darum versuche ich jetzt mal
eine mmc am msp430 zum laufen zu bekommen.
hmm ob ich wohl fat bei 2kb ram hinbekommen werde?
naja erstmal sollte ich sie überhaupt zum laufen bekommen.
kennst du jemand, der das am msp schon hinbekommen hat?

Autor: Bobl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Subbl!

Hast du das mit dem externen EEPROM hinbekommen?
Wenn ja, könntest du mir gegebenenfalls den Code per E-Mail zusenden?

Autor: Bobl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.....

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hängt es denn?

Autor: Bobl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex.

Ich habe im Forum gelesen, dass du eine Ansteuerung für den At24C512
geschrieben hast.
Ich bin kein Experte in C Programmierung. Ich benötige für meine
Datenspeichererweiterung Hilfe.
Könntest du mir die C Routinen per E-Mail senden?

Ich wäre dir dafür sehr dankbar.

lycra_hs@yahoo.de

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es doch hier in diesem Thread veröffentlicht :-)
Musst nur mal ein bischen scrollen, dann wirst du es finden.

Autor: Bobl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Alex.

Ich meine die I2C.C und I2C.H Dateien. In der Datei 24c64.c fehlen die
Low-Level Routinen. Ich habe nämlich da ein Problem.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Will mich ja nicht lustig machen, aber du musst noch weiter runter
scrollen :-)

Die von dir angesprochenen Routinen hat doch der "King of Freaks"
veröffentlicht. Diverse Beiträge später findest du dann meine (*.rar
Archiv).

Alex

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ findest du Informationen jetzt auch hier:
http://mc-project.de
oder direkt:
http://mc-project.de/Pages/mmc.html

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.