TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: lu6vg en 23 de Marzo de 2003, 13:30:00
-
Hola
Estoy haciendo mis primeras armas programando pics con PWC y me surgen dudas basicas. Mi idea es adaptar un programa que estaba en un 16F84 aun 16F877 para agregar entradas A/D al proyecto y ponerle algunos sensores que se comuniquen via protocolo I2C.
La primera duda que me surge es es con la asignacion de los pines a los que se les asigna la funcion de SLC y SDA. Cuando defino el programa al principio me asigna esos dos a los pines C3 y C4 respectivamente. ¿Eso es por convencion (y por ende los puedo cambiar) u obedece a alguna razon de hard del micro.
La segunda duda que me surge es para definir cuales puertos son entrada o salida. Al querer usar la sentencia set_tris_c para definir el puerto nos se que valores asignare a los pines C3 y C4. ¿Que se pone ahi? o no importa el valor que se le asigne ya que eso se define por la sentencia #USE I2C.
Lei por algun lado que cuando dejo un puerto sin usar lo tengo que poner en OUT (Valor logico 0) para que no entre por ahi basura que haga funcionar mal el PIC. ¿Es esto cierto?
Al pasar de un F84 a un F877, tuve que cambiar asignaciones de puertos para usar los entradas analogicas por lo que pines que tenia asignado al puerto A los puse en el C.
Asignacion original
// RA4 RA3 RA2 RA1 RA0
// In Out Out Out Out
// Sin So PTT Val CD
// 0 0 0 1 0 0 0 0 = 0x10
//
// RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
// In In In In Out Out Out Out
// SW2 SW1 PTT Ain R1K R2K R4K R8K
// 1 1 1 1 0 0 0 0 = 0xF0
Mi asignacion
// RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
// In In In In Out Out Out Out
// ICSP ICSP PTT_IN Ain R1K R2K R4K R8K
// 1 1 1 1 0 0 0 0 = 0xF0
//
//
// RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
// In Out Out In In Out Out Out
// sin sout S/U SDA SLC CD VALID PTT_OUT
// 1 0 0 1 1 0 0 0 = 0x98
//
//
// RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
// In In Out Out Out In Out In
// SW2 SW1 S/U SONIDO FOTO CAMARA CORTE CORTE
// 1 1 0 0 0 1 0 1 = 0xC5
//
//
// RE2 RE1 RE0
// Out Out Out
// S/U S/U S/U
// 0 0 0 = 0x00
Leyendo el codigo veo que tiene las siguientes instrucciones que no alcanzo a comprender bien
#byte porta = 5
#byte portb = 6
luego en el programa se usa de la siguiente manera
if(!bit_test(porta, 4)) goto testhang;
¿Que es lo que hace eso?
Saludos
Luis
-
un par de cosas:
lo de la definicion de las patitas del I2C puedes poner las que quieras, a menos que quieras usarlo hardware, que si tienes que poner C3 y C4 y forzar el uso de hardware.
lo de #byte porta = 5 y #byte portb = 6 es la direccion de los puertos A y B. creo que esto esta ya definido en el fichero de definicion del micro y no es necesario ponerlo, a menos que definas una estructura y la quieras redireccionar a u puerto, mira el fichero lcd.c y veras un ejemplo de esto.
if(!bit_test(porta, 4)) goto testhang;
si pa patita A.4 esta a 0 ( la admiracion indica negacion), salta a la etiqueta testhang...seguro que en programa encuentras esto testhang:.......pues aqui es donde salta.
espero que se ayude
-
Gracias!!!!!!!!!!!!!!
-
Las I/O digitales que no vayas a usar debes configurarlas como salidas, esto es debido a la tecnologia cmos, si las dejas como entradas debes de forzarlas a un nivel definido de lo contrario el micro puede hacer cosas raritas.
Este mismo fenomeno ocurre con cualquier dispositivo cmos, como puede ser un 4093 (puertas nand), si no defines las entradas el dispositivo empieza a hacer cosas raras en las salidas.
Mi recomendacion es que las patillas que no uses la coloques como salidas, o sino con una resistencia de 10K define el nivel.
De lo demas no puedo ayudarte nada, en eso el monstruo es el amigo felix.
-
Iran entonces como salidas todas las no usadas.
...cha gracias