fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Problemas con 16F84...
 
Avisos
Vaciar todo

Problemas con 16F84, PBP y Proteus

9 Respuestas
4 Usuarios
0 Reactions
11.2 K Visitas
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Buenas tardes de Nuevo a Tod@s

Pues he aquí mi segundo Post y este si es de consulta, así que si alguien tiene un ratillo y ganas a ver si me puede ayudar.

Hasta hace menos de una semana he estado programando PIC a pelo con el ASM y el MPLAB, después de haber invertido horas y horas en hacer programillas tan complejos como pudiera ser sacar por un puerto B de un 16F84A lo que entra por un A me he dado cuenta que salvo que seas muy bueno con ASM y sepas lo que te haces no merece la pena seguir trabajando en ASM, así que me decidí a probar algún ensamblador, al final opte por usar un ensamblador de BASIC debido a cuestiones practicas ya que en mi trabajo uso una serie de tarjetas de Motion Control que se programan en un Pseudo Basic. lo cual facilita bastante las cosas a un pseudo autodidacta como yo (al mas estilo Juan Palomo yo me lo guiso yo me lo como) y como la mayoría de los que frecuentaran este foro.

El material de que disponía era un 16F84A y un 16F877A, una placa que prepare para el 16F84 que consiste en un cristal de 20 MHZ (lo máximo que permite el micro) con pulsadores conectados al puerto A y led al puerto B, algo muy sencillo pero útil para comenzar a probar el compilador de Basic. Tras hacer los primero pinitos y aprender lo básico para hacer andar el compilador y comenzar a programar algo Basic (con PicBasic Pro que no lo había dicho todavía) encontré lo primero que no me convencía, con PicBasic Pro tienes que escribir el código en un editor de texto, salvarlo con extensión .Pas y luego bajo línea de MsDos escribir algo como:

C: PBP -16f84 prueba1.pas

Esto te genera entre otros el archivo .Hex que te lo llevas al IcProg y lo quemas en el PIC para probar. Me puse a Buscar y por supuesto había algo mas sencillo que era usar como editor de texto el programa MicroCode Studio que una vez enlazado con el ProBasic Pro (PBP de ahora en adelante) facilitaba mucho las cosas pues desde el propio programas puedes escribir el código, este te "corrige", te ordena variables y Loops, te permite elegir micro y dando solo al botón de Compilar te ahorra ir al MsDos.

Bueno pues primer "inconveniente" solventado, pero claro poco después surgió un nuevo "inconveniente", resulta que el hecho de poder compilar un programa en Basic que efectivamente no tiene errores de estructura no quiere decir que este vaya hacer lo que tu querías que hicieras, y tras hartarme de sacar le PIC de la placa y meterlo en el TE20 y de vuelta a la placa y que no hiciera exactamente lo que debiera me puse a buscar una salida mejor, al final fui a dar con Proteus, bastante conocido (supongo), que consiste en un Software estilo Orcad (salvando las distancias) que incluye una herramienta llamada ISIS que permite dibujar un esquema incluyendo pulsadores y led animados e incluir en el esquema Micros a los que se les puede cargar el HEX y simular su comportamiento.

Tras las pruebas de rigor y sus consiguientes meteduras de pata conseguí finalmente dibujar un "simulador" que incluye el 16F84 con led y pulsadores en sus puertos, comencé a simular todos los programas que había hecho y estaban probado en el PIC físico y todos fueron emulados a la perfección, a partir de ahí seguí usando este método, programar en MicroCode Studio y simular en el Proteus, cuando todo era simulado en Proteus OK lo tostaba al PIC y como era de esperar el comportamiento era el mismo.

PERO, tiene que haber un pero porque si no vosotros (que a estas alturas estáis comenzando a preguntaros si voy a contar toda mi vida, obra y milagros en verso) no estaríais leyendo esto, Resulta que he hecho un programa chorra sin mas finalidad que me capture determinados valores que pongo a la entrada del Puerto A los almacene cada uno de ellos en una variable que tiene asignada y cuando yo de pulsos a una patilla del puerto B me los vaya sacando por dicho puerto (cada pulso sacara un valor hasta no tener mas valores almacenados), Pues resulta que lo programo, lo compilo, todo correcto, cargo en el Proteus el Hex, lo simulo y todo correcto y cuando lo tuesto en el PIC NO FUNCIONA.

El PIC debe de estar bien, porque he probado de nuevo a cargar los primero programas y parece que funciona correctamente, y el código debería de estar bien porque si el simulador corre el HEX de forma correcta, si hubiera usado el archivo pas para el simular se podría entender algún funcionamiento distinto pero es que es el propio Hex (que no tiene nada que ver de que ensamblador venga), en fin el código que uso es el siguiente :

TRISA=1
TRISB=%10000000
DEFINE OSC 20

TEM VAR BYTE
ENTRADA VAR BYTE
PISOB VAR BYTE
PISO1 VAR BYTE
PISO3 VAR BYTE
PISO7 VAR BYTE
PISO15 VAR BYTE
PISO31 VAR BYTE
ENTRADA=0
PISOB=0
PISO1=0
PISO3=0
PISO7=0
PISO15=0
PISO31=0
PORTB=0

LAZO:

ENTRADA=PORTA
IF ENTRADA <> 0 THEN
IF ENTRADA=1 THEN
PISOB=ENTRADA
ENDIF
IF ENTRADA=2 THEN
PISO1=ENTRADA
ENDIF
IF ENTRADA=4 THEN
PISO3=ENTRADA
ENDIF
IF ENTRADA=8 THEN
PISO7=ENTRADA
ENDIF
IF ENTRADA=16 THEN
PISO15=ENTRADA
ENDIF
IF ENTRADA=32 THEN
PISO31=ENTRADA
ENDIF
ENDIF

IF PORTB.7=1 THEN
IF PISOB<>0 THEN
PORTB=PISOB
PISOB=0
pause 500
LAZO1:
IF PORTB.7=1 THEN
GOTO LAZO1
ENDIF
LAZO2:
if PORTB.7=0 THEN
GOTO LAZO2
ENDIF
ENDIF

IF PISO1<>0 THEN
PORTB=PISO1
PISO1=0
pause 500
LAZO3:
IF PORTB.7=1 THEN
GOTO LAZO3
ENDIF
LAZO4:
IF PORTB.7=0 THEN
GOTO LAZO4
ENDIF
ENDIF

IF PISO3<>0 THEN
PORTB=PISO3
PISO3=0
pause 500
LAZO5:
IF PORTB.7=1 THEN
GOTO LAZO5
ENDIF
LAZO6:
IF PORTB.7=0 THEN
GOTO LAZO6
ENDIF
ENDIF

IF PISO7<>0 THEN
PORTB=PISO7
PISO7=0
pause 500
LAZO7:
IF PORTB.7=1 THEN
GOTO LAZO7
ENDIF
LAZO8:
if PORTB.7=0 THEN
GOTO LAZO8
ENDIF
ENDIF

IF PISO15<>0 THEN
PORTB=PISO15
PISO15=0
pause 500
LAZO9:
IF PORTB.7=1 THEN
GOTO LAZO9
ENDIF
LAZO10:
if PORTB.7=0 THEN
GOTO LAZO10
ENDIF
ENDIF

IF PISO31<>0 THEN
PORTB=PISO31
PISO31=0
pause 500
LAZO11:
IF PORTB.7=1 THEN
GOTO LAZO11
ENDIF
LAZO12:
if PORTB.7=0 THEN
GOTO LAZO12
ENDIF
ENDIF
PORTB=0
ENDIF
GOTO LAZO

Se que es un poco demasiado extenso y que se podría haber simplificado pero es el resultado de muchas modificaciones para conseguir que fuera lo mas PASO A PASO posible.

¿El comportamiento del PIC? pues en OCASIONES si activo la patilla 0 del puerto A y luego llamo al valor almacenado con la patilla 7 del Puerto B lo saca bien, ahora si hago lo mismo para la patilla 1 ya no funciona (casi nunca) además para el resto de patillas funciona a veces pero lo que es peor es que cuando el PIC hace "algo" no se parece ni por asomo a lo que debería, por ejemplo cuando "funciona" si activo la patilla cero de A y luego la 7 de B saca por B el valor almacenado correctamente pero si activo la patilla 0 de A y luego activo la Patilla 2 al darle una vez al 7 de B debería activar la patilla 0 de B y al siguiente pulso que ponga en la patilla 7 de B debería de activar la patilla 2 de B, pues bueno en los casos en los que el PIC hace algo (uno de cada 10) solo activa al primer flanco de la patilla 7 de B la patilla 2 de B, es decir es como si solo almacenara el ultimo valor (en los casos remotos e improbables en los que funciona)

Los Pauses los puse como medida antirebote por si venían de ahí los problemas pero nada de nada

Nada más, que no es Poco, ya el hecho de que alguien haya llegado a leer hasta aquí es motivo para agradecérselo pues he soltado un tostón increíble, a los que me puedan aportar algo y a los que lo hayan leído entero solo puedo más que agradecerlo

GRACIAS

Responder
8 respuestas
boops
Respuestas: 1813
(@boops)
Ardero
Registrado: hace 19 años

Hay un libro que aun no está escrito pero tendria un exito rotundo, Microcontroladores PIC de la teoria a la practica 😛 (Se me ocurrio como titulo alternativo realidad o ficción pero creo que microchip lo censuraria) Basar un sistema en un microcontrolador quita muchos quebraderos de cabeza en la teoria pero de ahi los trasladan a la practica (Deberian postular una verdad universal "Los problemas ni se crean ni se destruyen simplemente se transforman") Por lo que leo no especificas sobre que plataforma fisica lo estas desarrollando pero cuando hablas de mover tocar cambiar imagino que será en una protoboard... seguramente ahi tienes el fallo yo perdi dos dias completos en averiguar por que no me funcionaba el codigo del sistema de posicionado de los tanques del submarino y realmente la solucion paso por crear un pcb todo era correcto solo habria algun mal contacto en la placa (Y eso que uno compra Aristong para evitar problemas) Solo te animo a que pruebes y si crees que no has fallado en nada comparte los esquemas y az un prototipo en placa real. Buena suerte.

Responder
drakerdg
Respuestas: 475
(@drakerdg)
Reputable Member
Registrado: hace 19 años

Heli,
Esto hace que las capacidades parásitas

BoOpS,
imagino que será en una protoboard...

vcs, Si haces tus pruebas en un protoboard, si hay muchas posibilidades de que las capacitancias parasitas esten afectando el funcionamiento de tu cristal y por consiguiete de tu PIC. De ser así te recomiendo (como dice BoOpS) que te fabriques una buena placa, puede ser una de entrenamiento, tu escoges para cuantos pines (18, 40, etc.). En varios hilos de los foros de A.R.D.E. hay ejemplos y/o links de como hacer una.

Placa deasarollo casera para pics

Saludos 😀

Responder
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Hola a Todos.

En primer lugar gracia por las respuestas, lo del cristal lo decia porque el pic que uso tiene de maxima 20 Mhz que es justo el valor del cristal que tengo puesto por eso decia que a lo mejor, pero no creo que sea esto porque con programas mas simples que el que pongo aqui si funciona bien.

En cuanto a la placa no es una protoboard precisamente por lo que exponeis y esque ya he tenido malas esperiencias con ellas, se trata de una placa casera, que esta correcta puesto que la he revisado en varias ocasiones y tampoco tiene mucha perdida, es el pic en una placa con el cristal los condesadores y todas las patas de los puertos van a conectores de punteras (clemas o como las querais llamar), esta placa tambien esta correcta pues he probado continuidades posibles y posibilidad de cortos y nada de nada, y al tratarse de una placa descartado el tema de la estatica (no como en las protoboard que con tanto contacto en paraleto hace de condesandores)

De todas formas ya tengo aparte de los condesadores para colocarlos a los pulsadores y a la alimentacion (aunque no creo que sea el problema) tambien he pillado un par de pic de repuesto por si fuera que el pic esté dañado (que tambien me extraña) aun asi creo que me voy a pasar a programar en C en lugar del Basic a ver que tal (porque me inclino a pensar que el problema es el compilador o la programacion)

Saludos

Responder
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Buenas a todos de nuevo, bueno pues finalmente y tras 2/3 semanas de aprender a dar los primeros pasitos en C (con ayuda de la gente del foro de A.R.D.E) ya he conseguido tener los conocimientos minimos para intentar este programa en C, tas corregir un par de errores de forma, lo he programado y ha funcionado a la perfeccion, la idea a sido la misma en ambos casos solo que lo he "portado" de un sistema a otro, en C todo genial, en PBP conseguí que andara un poco mejor, ademas quite el WDOG que programaba con el activo y sin embargo no lo resteaba pues pensaba que lo trataban los compiladores (de esto me informaron nuevamente aqui en A.R.D.E), pero aun así no iba todo lo bien que era de esperar.

Saludos y gracias por la ayuda, nos vemos por el foro de C 😛

ASIAS

Responder
Página 2 / 2
Compartir: