No logro hacer funcionar PIC16f88

Buenas noches. En la escuela estamos trabajando en un robot Sumo el cual cuenta con dos motores DC y 3 sensores de proximidad infrarrojos.
Logramos que estos desprecien el negro de la pista pudiendo así darle limites al robot.

En PICBasic hice un programa básico y uno complejo con un sensor de ultrasonido.
El problema surgió cuando grabé el PIC, aparentemente con éxito, pero cuando lo pongo en la placa y conecto todas las entradas de los sensores y las salidas al puente H que controla los motores; ésta no funcionaba, no hacia nada.

Decidí montarlo de vuelta en un protoboard y nada, no responde, o a veces si y queda prendido solo una salida y no se apaga nunca.

Utilicé un cristal de 10mhz, con dos capacitores cerámicos de 22pf, una resistencia de 10k para el reset y un capacitor 0.1mf entre la alimentación.


Aquí les dejo el programa, por si le ven algún error.
Código:
AllDigital

TRISB = %00000000
TRISA = %11111111




Symbol onn = PORTA.0
Symbol lif2 = PORTA.1
Symbol lif3 = PORTA.2
Symbol lif4 = PORTA.3
Symbol mia = PORTB.0
Symbol mi = PORTB.1
Symbol mda = PORTB.2
Symbol md = PORTB.3
ddd:
If onn = 0 Then Goto ddd
If onn = 1 Then WaitUs 3000
asd:
If PORTA = %00001110 Then
mi = 1
If PORTA = %00001110 Then
md = 1
WaitUs 100

If PORTA = %00001110 Then Goto asd
Else
Goto inicio
Endif
inicio:
'pregunta infrarrojo superior derecho

If lif2 = 0 Then mi = 1
If lif2 = 0 Then md = 1
If lif2 = 0 Then WaitUs 1000
mi = 0
md = 0
If lif2 = 0 Then Goto inicio

'pregunta infrarrojo inferior izquierdo

If lif3 = 0 Then mia = 1
If lif3 = 0 Then mda = 1
If lif3 = 0 Then WaitUs 1000
mia = 0
mda = 0
If lif3 = 0 Then Goto inicio

'pregunta infrarrojo inferior derecho

If lif4 = 0 Then mia = 1
If lif4 = 0 Then mda = 1
If lif4 = 0 Then WaitUs 1000
mia = 0
mda = 0
If lif4 = 0 Then Goto inicio


Endif

Goto asd
End
Espero puedan ayudarme.
Desde ya, muchas gracias.
 
Última edición por un moderador:
En PICBasic hice un programa básico y uno complejo con un sensor de ultrasonido.
El problema surgió cuando grabé el PIC, aparentemente con éxito, pero cuando lo pongo en la placa y conecto todas las entradas de los sensores y las salidas al puente H que controla los motores; ésta no funcionaba, no hacia nada.

Decidí montarlo de vuelta en un protoboard y nada, no responde, o a veces si y queda prendido solo una salida y no se apaga nunca.

Utilicé un cristal de 10mhz, con dos capacitores cerámicos de 22pf, una resistencia de 10k para el reset y un capacitor 0.1mf entre la alimentación.
No mencionas que compilador estás usando para lenguaje Basic, pero por ese AllDigital, quiero suponer que se trata del PIC Simulator IDE.

Mencionas que estás usando un cristal de 10MHz. (Los capacitores de 22pF. están bien)
También mencionas que estás utilizando el pin de reset, pero en tu código no tienes la palabra de configuración, y tampoco estás definiendo la frecuencia de operación.

Esto sería lo que te hace falta declarar en la cabecera de tu código si usas PIC Simulator IDE.
Define CONF_WORD = 0x2F22
Define CONF_WORD_2 = 0x3FFC
Define CLOCK_FREQUENCY = 10


Los fuses seleccionados para esas dos palabras de configuración del PIC16F88 serían estos:
Fuses 16F88 HS_OSC.jpg

Si no estableces éstos parámetros, el compilador usará el oscilador interno y a 4MHz.

Espero que con esto resuelvas tu problema.

Suerte.
 
Última edición:
Muchas gracias, voy a probarlo el lunes a ver si funciona, pasa que los profesores nos dieron a elegir que tecnología usar y el único que utilizo pic fui yo, los demas motorola, entonces no me dieron mucha bola y quede casi solo aprendiendo en Pic Basic.

Gracias de vuelta
 
Muchas gracias. Voy a probarlo el lunes a ver si funciona.
Pasa que los profesores nos dieron a elegir que tecnología usar y el único que utilizó pic, fui yo, los demás motorola, entonces no me dieron mucha bola y quedé casi sólo aprendiendo en Pic Basic.
OK. Cómo comentario adicional...
En tu código tienes comparaciones sobre el puerto a usando los 8 bits.
Recuerda que los bits 6 y 7 corresponden al oscilador, y si usas un cristal esos pines no tendrán un estado lógico definido y tendrás problemas al hacer las comparaciones.
Para evitar eso, puedes usar el oscilador interno a 8MHz. o cambiando la forma de realizar la comparación.
 
Hola, yo igual construi robots minisumo en mi epoca de colegial (hace 1 año) e igual como tu utilice microcontroladores PIC (todos los demás usaban arduino). Por experiencia, primero probaba la circuiteria, sensores, drivers, transistores, etc, y despues iva con el PIC.

Hardware del PIC16F88.

1) Los PIC trabajan con los siguientes valores de crystal: RC (este lo calculas tu), 4MHz, 8MHz, 16Mhz y 20 MHz. Las Hojas de Datos jamás mencionan crystales de 10MHz.

2) El crystal puede ser Interno o Externo. La ventaja del interno es que puedes utilizar las terminales destinadas para el crystal externo como I/O. La desventaja es que no es muy confiable (bueno, jamás lo utilice). Las ventajas del crystal externo son que los tiempos del PIC son más precisos y es más estable (y si le pones sus capacitores más). La desventaja son los 2 pines que utiliza.

3) Toda entrada digital configurada en los PIC debe tener su resistencia puesta a tierra (yo utilizaba de 10Komhs). Y siempre conectar la terminal destinada a reset con una resistencia de 10K.

Software del PIC

1) Determinar si utilizas un crystal interno o externo (revisa hoja de datos)

2) Configura las I/O (comando TRISX) y las que utilices como entrada digital ponlas a 0 (PORTX = 0) esto para que cuando el PIC arranque no tenga fallas ni se te aloque.

Siempre que utilices un PIC debes tener su Hoja de datos a la mano. Saludos
 
Muchas gracias che! Lo de las pull down en las entradas no se me había ocurrido y tiene mucho sentido. Mañana estaré probando el programa y les mostrare los resultados...

Y si alguno tiene algún consejo para el sensor de ultrasonido, espero lo comente,por ahora probare la programación básica, pero ya me tengo que poner a trabajar con el sensor de ultrasonido
 
Atrás
Arriba