Pièce jointe « capitulo1e.sgml »
Téléchargement <sect1 id="i2c" xreflabel="i2c">
<title>Módulo I2C</title>
<para>Autor : Pierre Launay </para>
<para>per.launay en free.fr</para>
<para>El bus I2C es un bus serie sincrono desarollado por Philips </para>
<para>
Descripción del bus I2C
<ulink url="http://es.wikipedia.org/wiki/I2C">aqui</ulink>
</para>
<para>
Entender el bus I2C
<ulink url="http://robots-argentina.com.ar/Comunicacion_busI2C.htm">aqui</ulink>
</para>
<para>Aqui se muestran las funciones para poder trabajar con el módulo I2C Maestro Interno de los PIC.
</para>
<para>
Antes de usar este módulos se debe definir la frecuencia usada con el comando.
</para>
<para>
<screen>
#define FOSC_HZ 4000000
#include <i2c.h>
</screen>
</para>
<para>Se han realizado algunas definiciones como: </para>
<para>
<screen>
#define I2C_400K i2c_find_frec(400000) //frecuencia de 400Khz
#define I2C_100K i2c_find_frec(100000) //frecuencia de 100Khz
#define I2C_40K i2c_find_frec(40000) //frecuencia de 40Khz
#define I2C_10K i2c_find_frec(10000) //frecuencia de 10Khz
#define I2C_4K i2c_find_frec(4000) //frecuencia de 4Khz
#define I2C_1K i2c_find_frec(1000) //frecuencia de 1Khz
</screen>
</para>
<para>Estas definiciones pueden ser usandas en la función init_i2c</para>
<sect2 id="i2cinit" xreflabel="i2c_init">
<title>i2c_init</title>
<para>Configura el puerto Serie sincrono</para>
<screen>
void i2c_init(unsigned char SPEED_I2C);
</screen>
<para>SPEED_I2C es el registro SSPADD, reloj_I2C=FOSC_HZ/(4*(SSPADD+1))</para>
</sect2>
<sect2 id="i2cwaitforidle" xreflabel="i2c_wait_for_idle">
<title>i2c_wait_for_idle</title>
<para>Espera a que el bus esté libre </para>
<screen>
void i2c_wait_for_idle(void);
</screen>
</sect2>
<sect2 id="i2cstart" xreflabel="i2c_start">
<title>i2c_start</title>
<para>principio de trama, secuencia de inicio</para>
<screen>
void i2c_start(void);
</screen>
</sect2>
<sect2 id="i2crestart" xreflabel="i2c_restart">
<title>i2c_restart</title>
<para>Devolver una trama, fin de trama y principio de trama permite poner dos tramas para leer . Ver i2c_read()
</para>
<para>Ejemplo para leer las segundas en una trama :</para>
<para>
Principio de trama (start), escribir la dirección del circuito I2C, escribir el registro de las segundas,
</para>
<para>
Devolver una trama (restart), escribir la dirección del circuito I2C, leer el registro de las segundas.
</para>
<para>fin de trama (stop)</para>
<screen>
void i2c_restart(void);
</screen>
</sect2>
<sect2 id="i2cstop" xreflabel="i2c_stop">
<title>i2c_stop</title>
<para>fin de trama, secuencia de parada</para>
<screen>
void i2c_stop(void);
</screen>
</sect2>
<sect2 id="i2cdelay" xreflabel="i2c_delay">
<title>i2c_delay</title>
<para>Tiempo de espera entre fin de trama y principio de trama >=4.7 us (Frecuencia Reloj SCL = 100KHz) </para>
<screen>
void i2c_stop(void);
</screen>
</sect2>
<sect2 id="i2cackread" xreflabel="i2c_ack_read">
<title> i2c_ack_read </title>
<para>recepción del pulso de reconocimiento</para>
<screen>
unsigned char i2c_ack_read (void);
</screen>
<para>"0" buena recepción</para>
<para>"1" mala recepción</para>
</sect2>
<sect2 id="i2cackwrite" xreflabel="i2c_ack_write">
<title>i2c_ack_write</title>
<para>emisión. del pulso de reconocimiento</para>
<screen>
void i2c_ack_write(unsigned char ack);
</screen>
<para>"0" la trama puede continuar</para>
<para>"1" la trama se para</para>
</sect2>
<sect2 id="i2cwrite" xreflabel="i2c_write">
<title>i2c_write</title>
<para>
el maestro escribe en el esclavo el caracter c, el caracter c puede ser una dirección, una registro interno, un dato
</para>
<screen>
void i2c_write(unsigned char c);
</screen>
</sect2>
<sect2 id="i2cwritewithack" xreflabel="i2c_write_with_ack">
<title>i2c_write_with_ack</title>
<para>
El maestro escribe el caracter c en el esclavo y remite el reconocimiento (ack).
</para>
<para>Esta rutina junta i2c_write(c) y reception_ack()</para>
<screen>
unsigned char i2c_write_with_ack(unsigned char c) ;
</screen>
</sect2>
<sect2 id="i2cread" xreflabel="i2c_read">
<title>i2c_read</title>
<para>El maestro lee el caracter enviado por el esclavo</para>
<screen>
unsigned char i2c_read(void);
</screen>
</sect2>
<sect2 id="i2creadwithack" xreflabel="i2c_read_with_ack">
<title>i2c_read_with_ack</title>
<para>el maestro lee el caracter enviado por el esclavo y envia el reconocimiento (ack).</para>
<screen>
unsigned char i2c_read_with_ack(unsigned char ack);
</screen>
</sect2>
<sect2 id="ejemploi2c" xreflabel="Ejemplo I2C">
<title>Ejemplo de Módulo I2C</title>
<para> para compilar necesitas los siguientes comandos </para>
<para>
<screen>
Ejemplo de compilacion : ./compila.sh ej_i2c 16f877a
</screen>
</para>
<para> ej_i2c.c </para>
<screen>
int main(void)
{
return 0;
}
</screen>
</sect2>
</sect1>Fichiers joints
Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.Vous n'êtes pas autorisé à joindre un fichier à cette page.

