Più di 1 I2C su

A

Analyzer

Guest
Hi there,

Ho bisogno di più di 100 Kb di memoria per il mio application.I 'm utilizzando CCS compilatore C, 16F877, 24LC256 e Proteus per i desing.Can usare più di una memoria con la stessa I2C pin?Vorrei utilizzare 4 24LC256 sulla stessa linea (stesso pin del 877) E 'possibile?In caso affermativo, come si usa?Qualsiasi proteo DSN per questo file?Oppure qualche breve andrà bene per me

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sorriso" border="0" />Grazie

Analyzer.

 
Di solito, I2C chip ha tre pin: A2-A0.Questi rappresentano la parte pin I2C dispositivi di indirizzo e di essere connessi a 0 o 1 può essere utilizzato per assegnare indirizzi diversi per diversi chip.Quindi, che si possono affrontare questi chip individualmente.Check 24LC256 scheda se hai bisogno di maggiori informazioni.

Ace-X.

 
di solito ogni i2c dispositivo ci sono proprio indirizzo.i2c dispositivo famiglia sono anche pre-fix indirizzo bit e selezionare l'indirizzo bit.esempio 24CXXX eerom memoria avrà indirizzo po 'di 1010 e il cambiamento in grado bit per chip selezionare A2 A1 A2, si può impostare questo bit da collegare questi pin o memoria logica ic a bassa o alta (Gnd o Vcc) e quando ciò che l'accesso al questi chip basta chiedere per indirizzo giusto.Per altri dispositivi, come porta di espansione, ecc.il codice di famiglia che cambierà la fabbricazione in modo da non confondere con il dispositivo di memoria.Penso che possiamo possibile utilizzare più di 10 dispositivi su una sola riga.Una cosa è necessario becare piena di usare un sacco di dispositivo su una sola riga è il pull-up resister valore di sda e SCL.Se si utilizza un lotto di un dispositivo con una lunga distanza, potrebbe essere necessario tirare bene fino resister calcolo o qualche circuito linea per aiutare il trasferimento di dati e di clock correttamente.Sono stato loger costruire con 4 24lc256 e si sta lavorando bene ...

 
Poiché tale dispositivo è dotato di 3 pin indirizzo verrà ok fino a 8 dispositivi per il bus I2C.
Proprio come un pensiero, non si sono considerati di serie flash - molto più grande di memoria sono disponibili dimensioni (> 1Mb).

Saluti
SJO

 
Così,

In caso di collegare i dispositivi di questo tipo?:

Con il modo in cui i non può accedere come "Analyzer":

I cambiamenti di jpg e aggiunto un vterm.
Siamo spiacenti, ma è necessario il login per visualizzare questo attaccamento

 
[quote = "ergen"]
In caso di collegare i dispositivi di questo tipo?
Sì, è giusto_Ora il tuo EEPROM sono indirizzi: 1010000 e 1010001.Ace-X.
 
Hmm,

Sono molto confuso di utilizzare tali addresses.I 'm utilizzando tecnologie CCS C Compiler 3,168 Proteus 6 e ho provato questo schema con questo codice:

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

void main () (

int16 c, i, s;

init_ext_eeprom ();

c = 1; i = 50;

s = 32000;

printf ( "Scrivi \ n \ r");

while (c <100) (WRITE_EXT_EEPROM (c s, 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 s)), c ; i ; if (i> 100) (i = 50; printf ( "\ n \ r ");}}

printf ( "\ n \ rFinished");
)

Ho perso qualcosa con indirizzi credo, e non ho idea di come parlare con il primo e il secondo di memoria ..Questo codice funziona se 0 <s <32676 Quindi, penso di poter accedere alla seconda memoria.Sono vicino alla fine

Analyzer.

 
L'analizzatore ha scritto:

Sono molto confuso di utilizzare tali indirizzi.
 
470k per tirare su è troppo bassa per i2c mabee 470 ohm o 4.7k, ma non 470 k!

 
# include <24128.c>
# ifndef EEPROM_SDA

# define EEPROM_SDA PIN_B1
# define EEPROM_SCL PIN_B0

# endif

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

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

# define EEPROM_ADDRESS lungo 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);
altro
i2c_write (0x2 i);
i2c_stop ();
)
)void write_ext_eeprom (long int address,
byte di dati)
(
i2c_start ();
i2c_write (((0XA0) | (hi (indirizzo)>> 5)) & 0xFE);
i2c_write (hi (indirizzo) & 0x3f);
i2c_write (indirizzo);
i2c_write (dati);
i2c_stop ();
delay_ms (10);
)BYTE read_ext_eeprom (long int address) (
BYTE dati;

i2c_start ();
i2c_write (((0XA0) | (hi (indirizzo)>> 5)) & 0xFE);
i2c_write (hi (indirizzo) & 0x3f);
i2c_write (indirizzo);
i2c_start ();
i2c_write ((0xa1) | (hi (indirizzo)>> 5));
dati = i2c_read (0);
i2c_stop ();
andata e ritorno (dati);
)

Questo è l'header file del driver i am using.Here è i2cwrite prototipo:

i2c_start (); / / Start condizione
i2c_write (0XA0); / / Dispositivo indirizzo
i2c_write (cmd); / / Low byte di comando
i2c_write (cmd>> 8); / / Alto byte di comando
i2c_stop (); / / Stop condizione

Ho bisogno di cambiare prima di scegliere i2write destra address.Am i diritti?:

void write_ext_eeprom (long int address,
byte di dati)
(
i2c_start ();
i2c_write (((0XA0) | (hi (indirizzo)>> 5)) & 0xFE); / / Questa riga deve essere cambiato
i2c_write (hi (indirizzo) & 0x3f);
i2c_write (indirizzo);
i2c_write (dati);
i2c_stop ();
delay_ms (10);
)

Ho bisogno di riscrivere write_ext_eeprom e read_ext_eeprom (...). (...)Come devo modificare il mio file?

Analyzer

 

Welcome to EDABoard.com

Sponsor

Back
Top