De fabrica, la dirección para la comunicación de un sensor térmico TPA81 por el bus I2C, es por defecto la 0xD0. Cuando con un mismo PIC se debe comunicar con dos o más sensores TPA81 por el mismo bus, esa dirección debe cambiarse en alguno de ellos. De esta forma el PIC podrá comunicarse con cada uno de los sensores de forma independiente.
Para cambiar la dirección de uno de los sensores, se debe ejecutar una secuencia de comandos por el bus I2C y debe estar conectado como único módulo en el bus.
En este artículo se propone un programa para el cambio de dirección de la 0xD0 a la 0xD2. Para ello se debe escribir en el registro 0 del TPA81 cuya dirección es 0xD0 los siguientes comandos en el orden indicado: 0xA0, 0xAA, 0xA5 y 0xD2 donde 0xD2 es la nueva dirección asignada.
El programa ejecuta la secuencia de cambio de dirección con un bucle repetitivo. Si en la primera ejecución del bucle no se hiciera efectivo el cambio por cualquier motivo se realizaría en cualquiera de las siguientes. Basta con dejar que se ejecute el programa unos segundos.
Es conveniente anotar la nueva dirección asignada en el propio sensor puesto que una vez cambiada no es posible identificarla sino es probando una a una las 8 direcciones posibles.
En el siguiente enlace se pueden descargar los archivos del proyecto.
El proyecto contenido en el artículo ha sido diseñado utilizando la versión v4.084 de CCS PIC C COMPILER
TUTORIAL BÁSICO PIC C COMPILER
Los operadores
Aritméticos
+ Suma // a = b + c;
- resta // a = b – c;
* Multiplicación // a = b * c;
/ División // a = b / c;
% Resto de división // a = b % c;
++ Incremento // ++a es
lo mismo que a = a +1;
// a=++b; es lo
mismo que a=b+1;
// a=b++; //primero a=b y luego b=b+1
-- Decremento // --a es
lo mismo que a = a – 1
// a= --b; es lo mismo que a=b -1
// a=b--;
primero a=b y luego b=b -1
< Menor que //
if (a<b) (c=1); c=1 si a<b
>
Mayor que // if (a>b)
(c=1); c=1 si a>b
<= Menor o igual que // if (a<=b) (c=1); c=1
si a<b ó a es
igual a b
>= Mayor o igual que // if (a>=b)
(c=1); c=1 si a>b ó a
es igual a b
== Igual a // if (a==b) (c=1); c=1 si a es
igual a b
!= Distinto a // if (a!=b) (c=1); c=1 si a es
distinto de b
? : Expresión
condicional //
(a < 2) ? (b =3) : (b = 5); es
lo mismo que if (a <2)(b = 3);
else (b=5);
! NOT
&& AND //
if ((a&&b)==0) (c=2); si tanto a como b son
cero entonces c=2
|| OR //
if ((a||b)==0) (c=2); si alguno de los dos a,
b son cero entonces c=2
De bits
˜ Complemento a 1
& AND // c =(a&&b); c será el valor obtenido
de
hacer AND de bits entre a y b
^ OR EXCLUSIVA // c =(a^b); c será el valor obtenido de
hacer
OR EXCLUSIVA entre a y b
| OR // c =(a|b); c será el valor obtenido de
hacer
OR de bits entre a y b
>> Desplazamiento a derechas
<< Desplazamiento a izquierdas
+= Asignación de suma // a+=b; es lo mismo que a=a+b;
-= Asignación de resta // a- =b; es lo mismo que a=a-b;
*= Asignación de multiplicación // a* =b; es lo mismo que a=a*b;
/= Asignación de división // a/=b; es lo mismo que a=a/b;
%= Asignación de resto de división // a%=b; es
lo mismo que a=a%b;
<<= Asignación de desplazamiento // a<<=b;
es lo mismo que a=a<<b;
>>= Asignación de desplazamiento //
a>>=b; es lo mismo que a=a>>b;
&= Asignación AND de bits // a&= b; es lo mismo que a=a&b;
| =
Asignación OR de bits // a|= b; es lo mismo que a=a|b;
^= Asignación OR EXCLUSIVA //
a^= b; es lo mismo que a=a^b;
Punteros
& Dirección
* Indirección
-> Puntero a estructura
No hay comentarios:
Publicar un comentario