IIC EEPROM

Tanfolyamok, oktatások és kapcsolódó házi feladatok...
Avatar
Bagameri
DrótVégénSzéndarab
Hozzászólások: 37
Csatlakozott: 2013. március 15. péntek, 14:21

IIC EEPROM

HozzászólásSzerző: Bagameri » 2013. március 20. szerda, 15:01

EEPROM Nem tudom miért nem megy a program, mindég hibát jelez.
( AVR-Dunio /R3) a készűlék.

Kód: Egész kijelölése

/*IIC EEPROM byte alapu kezelése
Arduino-0022 */
//IIC buszt használunk
#include "Wire.h"
//24LC256 chip cime
 #define disk1 0x50
 
 void setup(void)
 {//sorosport megnyitása es IIC inicializalas
 Serial.begin(9600);
 Wire.begin();
 }
 void.loop(){
   //melyik cimre irjunk?
   unsigned int address = 0;
   //ird be a..., a....cimre,a 123-as szamot
   writeEEPROM(disk1, address, 123);
   // Mi van a cimen a chipben? Ird ki sorosporton
   Serial.println(readEEPROM(disk1, address), DEC);
 }
 void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
 {
   Wire.beginTransmission(deviceaddress);
   //Cim magas helyierteke
   Wire.send((int)(eeaddress >> 8));
   //Cim alacsony helyierteke
   Wire.send((int)(eeaddress & 0xFF));
   //És a beirandó adat
   Wire.send(data);
   Wire.endTransmission();
   delay(5);
 }
  byte readEEPROM(int deviceaddress, unsigned int eeaddress )
  {
    byte rdata = 0xFF;
    Wire.beginTransmission(deviceaddress);
    //Magas helyierték
    Wire.send((int)(eeaddress >>8));
    //Alacsony helyiérték
    Wire.send((int)(eeaddress & 0xFF));
    Wire.endTransmission();
    //Egy byte olvasando
    Wire.requestFrom(deviceaddress,1);
    //Ha sikerült....
    if (Wire.available()){
      rdata = Wire.receive();
    }
    return rdata;
  }]

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. március 20. szerda, 15:38

I2Cdetect feismeri az EEPROM-ot?

Avatar
Bagameri
DrótVégénSzéndarab
Hozzászólások: 37
Csatlakozott: 2013. március 15. péntek, 14:21

Re: IIC EEPROM

HozzászólásSzerző: Bagameri » 2013. március 20. szerda, 21:12

Mikor rá szeretném tölteni akkor mindjárt megáll a void.loop után az első sornál (unsigned int address = 0;)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. március 20. szerda, 21:29

Akkor HW hiba:
Teszteld a scannerrel, hogy bejelentkezik-e a chip:
Arduino vagy Bascom-AVR. Amelyik tetszik...
http://www.tavir.hu/sdlogger-2

Avatar
Bagameri
DrótVégénSzéndarab
Hozzászólások: 37
Csatlakozott: 2013. március 15. péntek, 14:21

Re: IIC EEPROM

HozzászólásSzerző: Bagameri » 2013. március 20. szerda, 23:15

Köszi a segítséget . Szerintem a készülék hibátlanul működik. Mert három címet is talált
Scanning...
I2C device found at address 0x48 !
-----||----- 0x50 !
------||------ 0x51 !
done
majd ezek ismétlődnek.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. március 21. csütörtök, 6:28

Kód: Egész kijelölése

/*  IIC EEPROM byte alapu kezelese
 60 nap alatt arduino tanfolyam
 (c) TavIR http://www.tavir.hu  */

//IIC buszt hasznalunk
#include "Wire.h"     
//24LC256 chip cime
#define disk1 0x50

void setup(void)
{//Sorosport megnyitasa es IIC inicializalas
  Serial.begin(9600);
  Wire.begin(); 
}
 
void loop(){
  //Melyik cimre irjunk?
  unsigned int address = 0;
  //Ird be a ..., a ...cimre, a 123-as szamot
  writeEEPROM(disk1, address, 123);
  //Mi van a .. cimen a chipben? Ird ki sorosporton
  Serial.println(readEEPROM(disk1, address), DEC);
}
 
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
  Wire.beginTransmission(deviceaddress);
  //Cim magas helyierteke
  Wire.send((int)(eeaddress >> 8));
  //Cim alacsony helyierteke
  Wire.send((int)(eeaddress & 0xFF));
  //Es a beirando adat
  Wire.send(data);
  Wire.endTransmission();
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  //Magas helyiertek
  Wire.send((int)(eeaddress >> 8));
  //Alacsony helyiertek
  Wire.send((int)(eeaddress & 0xFF));
  Wire.endTransmission();
  //Egy byte olvasando
  Wire.requestFrom(deviceaddress,1);
  //Ha sikerult...
  if (Wire.available()){
    rdata = Wire.receive();
  }
 
  return rdata;
}

Avatar
Bagameri
DrótVégénSzéndarab
Hozzászólások: 37
Csatlakozott: 2013. március 15. péntek, 14:21

Re: IIC EEPROM

HozzászólásSzerző: Bagameri » 2013. március 21. csütörtök, 21:33

Végre megtaláltam a hiba okát, a (send helyett write) és a (receive helyett read )kell a programba írni .
Soros monitoron a 123 jelenik meg. Ez a 123 a nemfelejtő memóriába van benne ? És lehet e rövid mp3 zenei fájl-t rögzíteni-rá majd
azt vissza játszani ? Vagy sokkal egyszerűbb egy külső mp3-at rá csatlakoztatni .

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. március 21. csütörtök, 21:36

Arduino-0023 és Arduino-1.x közti különbség. Lásd minden 3. beírásomat :P .

http://www.tavir.hu/wiring

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. március 21. csütörtök, 21:43

MP3: csak dekóderIC-vel lejátszható. AVR kicsi hozzá...
http://avr.tavir.hu/modules.php?name=Co ... ge&pid=123

MP3 dekóderchipes kártyám is van, vasárnap remélem kész a dokumentációm hozzá....

dlaszlo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. április 20. szombat, 6:38

Re: IIC EEPROM

HozzászólásSzerző: dlaszlo » 2013. augusztus 31. szombat, 9:43

Sziasztok!

Csak egy (számomra) érdekes dolgot akarok megosztani

Egy 24LC256 eepromot és egy PCF8583 óra modult használtam, és csak a program írás közben jöttem rá,
amikor a 24lc256 adatlapját néztem meg, hogy a címe ütközik az óra címével (ahogy én használtam).

Az óra mégis jól működött (az eepromot most akartam felhasználni).
Ez lehetséges, vagy valamit elnézek, nem kellett volna itt ütközéseknek/kifagyásnak lenni?

A 24LC256 címe az adatlapja szerint:

1 0 1 0 a0 a1 a2 r/w

Az óra címe az adatlapja szerint:

1 0 1 0 a0 a1 a2 r/w

Az a0 a1 a2-t mindkét esetben a GND-re (0) forrasztottam eredetileg, most a 24lc256-nál áttettem +5V-ra (1-re),
próbálkozom tovább, remélem működni fog.

Meg sem fordult a fejemben, hogy kifogok két ugyanolyan című eszközt, mi alapján kapja egy-egy eszköz a gyári címét?
Minden gyártó amit akar, vagy azért van itt valamiféle megfontolás?

Avatar
csabeszq
Bitfaragó
Hozzászólások: 654
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: IIC EEPROM

HozzászólásSzerző: csabeszq » 2013. augusztus 31. szombat, 10:20

Hát, a világon nemcsak 16-féle eszközt gyártanak. USB-nél 65536 eladónak külön-külön 65536 terméke lehet, ott minden terméknek más egyedi azonosítója van.

Az I2C nem ez a világ. Itt a felhasználó választ 8-at a gyártó meg 16-ot. Bizonyos gyártók több típust árulnak ugyanabból az IC-ből, csak más kóddal.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. augusztus 31. szombat, 17:40

Az óra IC 2 címen jelentkezhet be, a EEPROM I2C 8 db címet ismer.
Az I2C buszon _te_ mondod meg a címet.

USB esetén meg gyártót és típust azonosít.

Hülyén nézne ki, hogyha a Philips 24LC256 és a Microchip v. Atmel 24LC256 nem lenne csereberélhető....

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9738
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: IIC EEPROM

HozzászólásSzerző: Robert » 2013. augusztus 31. szombat, 19:26

Mellékeltem a címtárat (1999-es doku).
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.

dlaszlo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2013. április 20. szombat, 6:38

Re: IIC EEPROM

HozzászólásSzerző: dlaszlo » 2013. augusztus 31. szombat, 20:24

Köszönöm :)

Most látom amúgy, hogy rosszul is másoltam be, a PCF8583 címe: 1 0 1 0 0 0 A0 RW


Vissza: “Oktatás”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég