www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 24LC08B wird nur bis zum 255 byte beschrieben


Autor: Peter Hartmann (the_ride)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe ein 24LC08B EEprom (1k), ich kann aber nur bis zum 255 (FF) 
Byte schreiben.

Ich kann ja auch anstatt FF 255 schreiben, schreibe ich jetzt 256
compiliert er zwar ohne Fehler, habe aber trotzdem ein Rotes Kreuz vor 
der Zeile.

Und wie bekomme ich die Device Adresse eines EEproms raus wenn die nicht 
im DB steht ?

Ich benutze die lib von Peter Fleury
und diesen Code
Danke schon mal :)
cya The_ride
Peter
#include "i2cmaster.h"
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>

 #define Dev24C02  0xA8      // device address of EEPROM 24C02, see datasheet



 int main(void)
 {
     unsigned char ret;

     i2c_init();                         // initialize I2C library

//     for (i=0, i<255; i++;);


     // write 0x75 to EEPROM address 5 (Byte Write)
     i2c_start_wait(Dev24C02+I2C_WRITE);    
     i2c_write(0xFF);                        
     i2c_write(0x41);                        
     i2c_stop();                            

//   {
//        _delay_ms(100);
//     }


     // read previously written value back from EEPROM address 5
     i2c_start_wait(Dev24C02+I2C_WRITE);     
     i2c_write(0x05);                        
     i2c_rep_start(Dev24C02+I2C_READ);       
     ret = i2c_readNak();                    
     i2c_stop();

     for(;;);

 }

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char kann 256 "Adressen" darstellen: von 0 bis 255

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Hartmann schrieb:
> Ich kann ja auch anstatt FF 255 schreiben, schreibe ich jetzt 256
> compiliert er zwar ohne Fehler, habe aber trotzdem ein Rotes Kreuz vor
> der Zeile.

Der I2C-Bus ist byteorientiert. Daher macht es keinen Sinn den Wert 256 
herauszuschreiben. Um das komplette EEPROM lesen und auch schreiben zu 
können, sollte man zunächst das Datenblatt zu Rate ziehen. Darin steht, 
dass das 24C08 in 4 256 Byte große Blöcke eingeteilt ist. Diese kann man 
über die I2C Adresse erreichen. Der Aufbau der 7-Bit Adresse ist wie 
folgt:

A6  |  A5  |  A4  |  A3  |  A2  |  A1  |  A0
----+------+------+------+------+------+-----    
 1  |   0  |   1  |   0  |   x  |  B1  |  B0


 Block |    Bytes    |  B1  |  B0
-------+-------------+------+------
   0   | 0    - 255  |  0   |  0
   1   | 256  - 511  |  0   |  1
   2   | 512  - 767  |  1   |  0
   3   | 786  - 1023 |  1   |  1



Die I2C-Basisadresse des EEPROMS ist also:

#define EEPROM_BASE_ADDR 0x50


Für einen Zugriff auf die Blöcke 0-3 muss man lediglich die Blocknummer 
auf die Basisadresse addieren.

#define eeprom_block_address(block) (EEPROM_BASE_ADDR+block)
 

Für die Fleury-Lib muss man noch die Blockadresse um eins nach links 
schiften. Für den Block1, also die Bytes 256-511, sieht der Zugriff 
folgendermaßen aus:

i2c_rep_start((eeprom_block_address(1)<<1)+I2C_READ);
...

i2c_rep_start((24c08_block_address(1)<<1)+I2C_WRITE);
...


Gruß Skriptkiddy

Autor: Peter Hartmann (the_ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
@Skriptkiddy
Danke für die ausführliche erklärung werde mich damit beschäftigen 
sollte ich noch fragen haben poste ich die hier :)

cya The_ride
Peter

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OT

Du hättest dir wenigstens die Mühe machen können, diese 2 Zeilen in 
korrekter Rechtschreibung abzuliefern.

Autor: Peter Hartmann (the_ride)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke Skript Kiddy für Deine Hilfe :)

Ich kann jetzt alle Bereiche meiner EEproms beschreiben, :)
und da ich das so gut fand, das Du mir das so ausführlich erklärt hast,
habe ich nicht wirklich auf die Rechtschreibung geachtet ;)

Eine Frage habe ich aber trotzdem noch.
Wenn ich ein Wort wie "Hallo" in mein EEProm schreiben will müßte das 
doch
auch ohne Buchstabe für Buchstabe gehen oder ?

als Anhang das fertige Testprogramm :)

cya The_ride
Peter

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.