Autor Tema: #USE I2C (... Stream)  (Leído 5320 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
#USE I2C (... Stream)
« en: 18 de Diciembre de 2007, 20:51:52 »
Hola a todos.
Me surge una duda, espero puedan ayudarme.

Libreria para la Eeprom 24LC512
Código: [Seleccionar]
#ifndef EEPROM_SDA

#define EEPROM_SDA  PIN_B1
#define EEPROM_SCL  PIN_B0

#endif

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

#define EEPROM_ADDRESS long int
#define EEPROM_SIZE   65535

void init_ext_eeprom()
{
   output_float(EEPROM_SCL);
   output_float(EEPROM_SDA);

}

void write_ext_eeprom(long int address, BYTE data)
{
   short int status;
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
   i2c_start();
   status=i2c_write(0xa0);
   while(status==1)
   {
      i2c_start();
      status=i2c_write(0xa0);
   }
}

BYTE read_ext_eeprom(long int address) {
   BYTE data;
   i2c_start();
   i2c_write(0xa0);
   i2c_write(address>>8);
   i2c_write(address);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}

Una opcion al configurar el I2C:
Citar
STREAM=id
 Associates a stream identifier with this I2C port.  The identifier may then be used in functions like i2c_read or i2c_write.

Una opcion al usar una funcion del I2C:
Citar
stream - specify the stream defined in #USE I2C

Y bueno mi duda es que en la libreria de la Eeprom, exactamente en la funcion de lectura (read_ext_eeprom), usa una funcion del I2C (i2c_read) que en sus parametros incluye un 0; esto es para el stream, lo se. Pero, ¿porque? En la ultima cita que puse dice que especifica el stream definido en la configuracion del I2C (#USE..) pero en esta libreria no se a especificado nada y pues no entiendo entonces porq pone ese 0 en la funcion de lectura y/o porque no lo hace tambien en la de escritura, inicializacion, etc (yaq en todas las funciones se peude especificar el STREAM) :?  Acaso hay un valor por default al no configurar manualmente el STREAM o algo asi ?

Por profundisar un poco mas, podrian explicarle porfavor para que sirve establer el STREAM en la configuracion inicial del I2C ?


Gracias.
salu2 8)



Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #1 en: 19 de Diciembre de 2007, 01:22:50 »
yo te explico....yo!!!!  :-/

Hola a todos.
Y bueno mi duda es que en la libreria de la Eeprom, exactamente en la funcion de lectura (read_ext_eeprom), usa una funcion del I2C (i2c_read) que en sus parametros incluye un 0; ¿porque?

suce de que si revisas el help del CCS te aparece esto:
Citar
Syntax:
 data = i2c_read();
                              or
data = i2c_read(ack);
 
Parameters:
 ack -Optional, defaults to 1.
 0 indicates do not ack.
 1 indicates to ack.

y si revisas la trama de lectura para una memoria i2c:


entonces cuando realizas una lectura tienes que terminar con un bit "NO ACK" antes de enviar el bit de "STOP". es por eso que la rutina read_i2c(0) lleva un cero.

pd: lo del stream no te entiendo bien  :?

a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #2 en: 19 de Diciembre de 2007, 01:35:32 »
Hola Henry. Tengo el CCS 4.023 y spuestamente tu tb  :-) 
En la ayuda me aparece esto:
Citar
Syntax:
 data = i2c_read();

data = i2c_read(stream);

data = i2c_read(stream, ack);

Ocea q si quisiera usar el parametro ack, tendria que usar 1ro el parametro stream. Bueno almenos es eso lo q yo entiendo al ver eso, por eso mi pregunta iva dirigida al Stream.

Ahora si me equivoco, entonces tu respuesta sobre que la funcion i2c_read() envia un 0 (si se indica) por falta de NOACK, me surgeria otras preguntas... El "ack" significa entonces que esta en espera de un 1? Entonces el i2c_write() aparte de enviar algu dato envia por finalizado un 1 siempre? porq despues del CONTROL BYTE dice (abajito) ACK  :?


Gracias por respnder mcadave  :P
salu2 8)
« Última modificación: 19 de Diciembre de 2007, 01:40:48 por jeremylf »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #3 en: 19 de Diciembre de 2007, 01:51:43 »
uyyyyyyy que mala suerte yo tengo el 3.0249  :(
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #4 en: 19 de Diciembre de 2007, 01:56:53 »
Jaja entonces mi primera duda sige en pie  :D Porfa alguien ??

Gracias de todas maneras Hnry!
salu2  8)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #5 en: 19 de Diciembre de 2007, 02:14:01 »
me parece que ese STREAM ID sirve para identificar distintas funciones i2c de lectura o escritura para distintos dispositivos con dicho protocolo. De seguro la gente que tienen dicho compilador te dara más luces al respecto. saludos!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: #USE I2C (... Stream)
« Respuesta #6 en: 19 de Diciembre de 2007, 07:31:15 »
El stream es un identificador de tipo, para diferenciar entre varios dispositivos.

Esto ocurre por ejemplo con la comunicación 232.

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,PC)
#use rs232(baud=9600, xmit=PIN_C4, rcv=PIN_C5,RF)

Donde PC y RF son dos dispositivos distintos conectados en nuestro micro en patillas distintas, además como bien sabes puedes conectar un LCD al micro de forma muy sencilla, imagina que quieres enviar datos al LCD.

printf(lcd_putc,"%s",datos); printf es una función para sacas datos del pic, donde le estamos diciendo que los saque por el stream lcd.

imagina que lo quires hacer por el a través de la UART de PC.

printf(PC,"%s",datos);

o por RF

printf(RF,"%s",datos);

Lo mismo ocurre con el i2c.

Espero que tu duda sobre que es el stream y para que sirve se te haya solucionado.

Un saludete.





Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #7 en: 19 de Diciembre de 2007, 09:17:29 »
era como lo deduci, gracias c4_esp_VR.  :-/

a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #8 en: 19 de Diciembre de 2007, 14:18:47 »
Si!, muchas gracias c4_esp_VR. Pero dime, esos identificadores (PC, RF) son unicos? o solo le has puesto un nombre por poner? Ah y no es: Stream = PC? o es lo mismo ?

Por otro lado, en la libreria del 24LC512 cuando usa: i2c_read(0) el 0 se refiere al stream ? o al ack ?  :?


Muchas gracias.
salu2 8)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #9 en: 19 de Diciembre de 2007, 16:56:49 »
el 0 es al ack jeremy
el stream es una cadena que el usuario puede colocar.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #10 en: 19 de Diciembre de 2007, 17:20:20 »
Pero el orden que me da la ayuda del CCS en los parametros del i2c_read es incorrecto si fuera como dices.  :?
Bueno de todos modos tiene q ser asi verdad? ademas e estado leyendo mas del I2C y es necesario enviar del PIC ese reconocimiento (ACK) antes de dejar el bus libre (stop) 8) jaja

Gracias Henry por tu tiempo. A ti tb c4_esp_VR.
saludts! 8)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: #USE I2C (... Stream)
« Respuesta #11 en: 19 de Diciembre de 2007, 17:24:23 »
fuera incorrecto si lo hubieses definido previamente en la directiva #use i2c(....), pero sino lo has definido entonces el 0 referiria drirectamente a generar el NO_ACK
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #12 en: 19 de Diciembre de 2007, 19:09:05 »
Tienes razon. No lo veia asi, esq el primer lenguaje en C q use no me daba esta facilidad.

Muchas gracias!
salu2 8)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: #USE I2C (... Stream)
« Respuesta #13 en: 19 de Diciembre de 2007, 20:02:24 »
RF y PC son stream de ejemplo como si quieres puedes ponerlo friki y todopic  :D :D :D :D :D

Un saludete.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: #USE I2C (... Stream)
« Respuesta #14 en: 20 de Diciembre de 2007, 15:04:58 »
jaja aora si ya entnedi lo del STREAM.  :P

Gracias!
salu2 8)