Więcej niż 1 I2C na jednej linii

A

Analyzer

Guest
Hi there,

Potrzebuję więcej niż 100 kB pamięci dla mojej application.I "m stosujących CCS kompilator C, 16F877, 24LC256 i Proteus dla desing.Can mogę używać więcej niż jednej pamięci I2C z tej samej szpilki?Chcę używać 4 24LC256 w jednej linii (takie same szpilki, 877) Czy to możliwe?Jeśli tak, to jak mogę z niej korzystać?Wszelkie Proteus plików dsn do tego?Lub krótkiej będzie dobrze dla mnie

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />Dzięki

Analyzer.

 
Zwykle, chip I2C posiada trzy dodatkowe szpilki: A2-A0.Te szpilki stanowią część urządzeń I2C adres i jest podłączony do 0 lub 1 mogą być wykorzystywane do przypisać różne adresy do różnych układów.Tak, że można rozwiązać te chipy indywidualnie.Sprawdź 24LC256 arkusz, jeśli potrzebujesz więcej informacji.

Ace-X.

 
zwykle co i2c urządzenia wyposażone są w adresie.i2c urządzenia są także przed rodziną-fix bitowego adresu, a następnie wybierz bitowy adres.24Cxxx pamięci przykład eerom będzie nieco adres 1010 i zmian w stanie bitowy chip select A2 A1 A2, możesz ustawić ten bit by móc te PIN lub karty pamięci IC do logiki niski lub hi (GND lub VCC) i po co do dostępu do tych chip po prostu poprosić o dobry adres.W przypadku innych urządzeń takich jak port itp. Expander.Kod rodzina będzie go zmienić, więc produkcja nie mieszać go z pamięci urządzenia.Myślę, że mamy możliwość korzystania z więcej niż 10 urządzeń na jednej linii.Jedno trzeba becare pełnego korzystania z wielu urządzeń w jednej linii jest pull up resister wartość SDA i SCL.W przypadku korzystania z wielu urządzeń z daleka może zaistnieć potrzeba dobrej podciągnąć resister obliczeń lub części obwodu pomóc transfer danych linii i zegar prawidłowo.I zostały wybudowane loger z 4 24lc256 i one działają bez zarzutu ...

 
Jako, że urządzenie posiada 3 adres szpilki będziesz ok for upto 8 urządzeń I2C.
Podobnie jak myśl, czy nie uważa Serial Flash - dużo większych rozmiarów pamięci są dostępne (> 1Mb).

Pozdrowienia
SJO

 
Więc,

Czy mogę podłączyć urządzenia takie jak ten?:

By i tak nie może zalogować się jako "Analyzer":

I zmienić na jpg i dodał vterm.
Przepraszamy, ale musisz się zalogować, aby wyświetlić ten załącznik

 
[quote = "Ergen"]
Czy mogę podłączyć urządzenia takie jak ten?
Tak, to jest prawo.Teraz twój EEPROM mają adresy: 1010000 i 1010001.Ace-X.
 
Hmm,

I'm very confused do korzystania z tych addresses.I "m stosujących CCS C Compiler 3,168 i Proteus 6 testowałem ten schemat ten kod:

# include "c: \ ..... \ I2C_Mem.h"
# include <24128.c>
# use rs232 (baud = 19200, xmit = PIN_C6, gi = PIN_C7)

void main () (

int16 C, I, S;

init_ext_eeprom ();

c = 1 i = 50;

s = 32000;

printf ( "write \ n \ r");

while (c <100) (WRITE_EXT_EEPROM (c e, i), c i if (i> 100) i = 50;)

c = 1 i = 50;

printf ( "READ \ n \ r");
while (c <100) (printf ( "% c", READ_EXT_EEPROM (c e)), C i if (i> 100) (printf i = 50; ( "\ n \ r ");}}

printf ( "\ n \ rFinished");
)

I missed something z adresami i myśleć, nie mam pojęcia, jak rozmawiać z pierwszego i drugiego pamięci ..Ten kod działa, jeśli 0 <s <32676 Tak, myślę, że nie może uzyskać dostępu do drugiego pamięci.Jestem blisko, aby zakończyć

Analyzer.

 
Analyzer napisał:

I'm very confused korzystać z tych adresów.
 
470k dla pull up jest zbyt niska dla i2c mabee 470 ohm lub 4.7k ale nie 470 k!

 
# include <24128.c>
# ifndef EEPROM_SDA

# define EEPROM_SDA PIN_B1
# define EEPROM_SCL PIN_B0

# endif

# define HI (x) (* (& x 1))

# use i2c (master, sda = EEPROM_SDA, SCL = EEPROM_SCL)

# define EEPROM_ADDRESS long int
# define EEPROM_SIZE 16384

void init_ext_eeprom ()
(
int i;

output_float (EEPROM_SCL);
output_float (EEPROM_SDA);
delay_us (4);
for (i = 0; i <3; i ) (
i2c_start ();
i2c_write (0XA0);
i2c_write (0xff);
i2c_write (0xff);
if (i == 2)
i2c_write (0x2);
w przeciwnym razie
i2c_write (0x2 i);
i2c_stop ();
)
)void write_ext_eeprom (long int adres, bajt danych)
(
i2c_start ();
i2c_write (((0XA0) | (hi (adres)>> 5)) i 0xfe);
i2c_write (hi (adres) & 0x3f);
i2c_write (adres);
i2c_write (dane);
i2c_stop ();
delay_ms (10);
)Read_ext_eeprom BYTE (long int address) (
BYTE danych;

i2c_start ();
i2c_write (((0XA0) | (hi (adres)>> 5)) i 0xfe);
i2c_write (hi (adres) & 0x3f);
i2c_write (adres);
i2c_start ();
i2c_write ((0xa1) | (hi (adres)>> 5));
data = i2c_read (0);
i2c_stop ();
return (data);
)

To jest nagłówek i plik sterownika jestem using.Here jest i2cwrite prototyp:

i2c_start () / / warunek Start
i2c_write (0XA0) / / Adres urządzenia
i2c_write (cmd); / / byte Low dowodzenia
i2c_write (cmd>> 8); / / bajtem dowodzenia
i2c_stop () / / stan zatrzymania

Muszę najpierw zmienić i2write wybrać rigth i address.Am prawda?:

void write_ext_eeprom (long int adres, bajt danych)
(
i2c_start ();
i2c_write (((0XA0) | (hi (adres)>> 5)) i 0xfe) / / Ta linia ma być zmieniony
i2c_write (hi (adres) & 0x3f);
i2c_write (adres);
i2c_write (dane);
i2c_stop ();
delay_ms (10);
)

Muszę napisać (...) write_ext_eeprom i read_ext_eeprom (...).Jak należy zmienić plik nagłówkowy?

Analyzer

 

Welcome to EDABoard.com

Sponsor

Back
Top