Pièce jointe « capitulo1e.sgml »

Téléchargement

        <sect1 id="i2c" xreflabel="i2c">
                <title>M&oacute;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&oacute;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&oacute;dulo I2C Maestro Interno de los PIC.
                </para>
                <para>
                        Antes de usar este m&oacute;dulos se debe definir la frecuencia usada con el comando.
                </para>

                <para>
                <screen>
        #define FOSC_HZ 4000000
        #include &lt;i2c.h&gt;
                </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&oacute;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&eacute; 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&oacute;n del circuito I2C, escribir el registro de las segundas, 
                </para>
                <para>
                        Devolver una trama (restart), escribir la direcci&oacute;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 &gt;=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&oacute;n del pulso de reconocimiento</para>
                <screen>
        unsigned char i2c_ack_read (void);
                </screen>
                <para>"0" buena recepci&oacute;n</para>
                <para>"1" mala recepci&oacute;n</para>
                </sect2>

                <sect2 id="i2cackwrite" xreflabel="i2c_ack_write">
                <title>i2c_ack_write</title>
                <para>emisi&oacute;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&oacute;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&oacute;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.
 Tous les fichiers | Fichiers sélectionnés supprimer déplacer vers la page copier vers la page

Vous n'êtes pas autorisé à joindre un fichier à cette page.

Site hébergé sur un Cloud Public IKOULA Ikoula