Forum: Mikrocontroller und Digitale Elektronik EEPROM 24C256 / 24C512 nicht erreichbar


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas O. (Gast)


Lesenswert?

Ich versuche mit codevision auf die 24Cxx (xx= 512 oder 256) zu
zugreifen aber ohne Erfolg. Ich werde für jede Hilfe dankbar. Wie gehe
ich vor:
24Cxx (xx= 512 oder 256)<--- ->  uC(AT90S8515)
SCL(Pin 6) ------------------->  PORTB.4
SDA(Pin 5) ------------------->  PORTB.5
PINs A0, A1 --> GND
WP -----------> GND
 --------------------
Program:
#include <90s8515.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>


// I2C Bus functions
#asm
   .equ __i2c_port=0x18 ;PORTB
   .equ __scl_bit=4
   .equ __sda_bit=5
#endasm
#include <i2c.h>
/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned int address) {
   unsigned char data;

   i2c_start();
   i2c_write(EEPROM_BUS_ADDRESS);
   i2c_write(0x00FF & (address>>8));//(0x1F & (addr>>8))
   i2c_write(0x00FF & address);//(0xFF & addr);

   i2c_start();
   i2c_write(EEPROM_BUS_ADDRESS | 1);
   data=i2c_read(0);
   i2c_stop();

return data;
}

/* write a byte to the EEPROM */
void eeprom_write(unsigned int address, unsigned char data) {

   i2c_start();
   i2c_write(EEPROM_BUS_ADDRESS);

   i2c_write(0x00FF & (address>>8));
   i2c_write(0x00FF & address);
   i2c_write(data);
   i2c_stop();

    delay_ms(5);
}

void main(void)
{
// Declare your local variables here
   unsigned char device;
   unsigned char i, eepVar;
   int temp = 0;

   PORTA=0x07;
   DDRA=0x07;


// UART initialization
   UCR=0x18;
   UBRR=0x19;

// I2C Bus initialization
   i2c_init();

   eeprom_write(0x00aa,0x55); //0x55

   eepVar = eeprom_read(0x00aa);
   if(eepVar){
      printf("EEprom:  %-X", eepVar);
      putchar(eepVar);
      printf("\n\t");
   }
   else
      printf("\n\tEEPROM ERROR !");
//   }
   while (1){
      eeprom_write(0x0011,0x0A); //0x55
      printf("EEPROM: %-X\n", eeprom_read(0x0011));
   }
}

Was ist hier falsch mit den write und read programme?
Danke

von Dominik (Gast)


Lesenswert?

Was ist mit dem Pin A2 vom EEPROM? Hast du Pullups für SDA und SCL?

von KoF (Gast)


Lesenswert?

und sind die adressen auch richtig?

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]
  • [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.