fbpx

Expresate

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

Problemilla con un ...
 
Avisos
Vaciar todo

Problemilla con un programa Simple en C

9 Respuestas
3 Usuarios
0 Reactions
3,505 Visitas
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Total despues de haber intentado programar en PicBasic Pro y de terner algunos problemillas que no fui capaz de solucionar me he pasado al C, y por tanto no tengo practicamente ni idea, asi que he trincado los manuales y ejemplillos y lo he hecho andar, con cosas simples como encender un led de forma intermitente, sacar por el puerto una serie de valores, etc, ahora me pongo ha hacer algo mas "complicado", (con cuatro condicionales) y no soy capaz de hacerlo andar, seguro que porque no se programar en C, ¿alguien me sabe decir porque cuando pongo el siguiente codigo en lugar de hacer lo que deberia me pone a 1 los pines 0,1,2 y 7 del puerto B?

#include <16F84A>
#fuses XT,WDT
#use delay (clock=20000000)

#use fast_io(a)
#use fast_io(b)
#byte PORTA=0x05
#byte PORTB=0x06

void main(void)
{

disable_interrupts(GLOBAL);
set_tris_a(0xff);
set_tris_b(0x0);

do
{
if(PORTA |= 0)
{
PORTB=1;

}

if(PIN_A4 == 1)
{
PORTB=0;
}

}WHILE(TRUE);
}

Seguro que son errores de programacion, este codigo es asi porque es la modificacion de uno mas complejo pero para descartar problemas fui simplificando para ver si entraba en los bucles y tal y pascual, ya se que hay formas mas simples de hacer esto pero no es el objetivo, el objetico es saber por que razon con este programa que pienso deberia de funcionar no lo hace.

Responder
8 respuestas
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

lo del XT lo tengo asi porque es un Crital, de todas formas con estos Fuses otros programas si me funcionan bien.GRACIAS
Claro no tiene que estar del todo bien para que las cosas funcionen. En el datasheet del fabricante indica que para un Cristal de más de 4MHz el fuse es HS. Pero bueno, que ese no es el problema.

El problema es que PORTA y PORTB toman un valor desconocido tras el reset. Como además tienes las entradas del puerto A inicialmente a 0 (a que sí?) no se cumple ninguna de tus dos condiciones (ningún pin del puerto A está a 1 y el pin A4 no está a 1) y en consecuencia no tocas el puerto B para nada y se queda con el valor "raro".

Por otro lado cuando haces:
if(PIN_A4 == 1)
Me imagino que quieres evaluar el valor del pin 4 del puerto A. No se si has compilado con CCS, o directamente con CCS en proteus. Pues esta línea da un warning. Dice el compilador que nunca se cumplirá esta condición. El problema es que PIN_A4 vale 44 y efectivamente, es una constante que nunca será 1. Todas las constantes del tipo PIN_XX son para que se utilicen con las funciones de CCS como indica en, por ejemplo, 16f84.h . Por lo tanto fíjate cómo queda más o menos tu mismo código pero funcionando:
#include <16F84A>
#fuses HS,NOWDT
#use delay (clock=20000000)

#use fast_io(A)
#use fast_io(B)
#byte PORTA=0x05
#byte PORTB=0x06

void main(void)
{
disable_interrupts(GLOBAL);
set_tris_a(0xff);
set_tris_b(0x00);
PORTB=0;
do
{
if(PORTA |= 0)
{
PORTB=1;
}
if(INPUT(PIN_A4))
{
PORTB=0;
}
}WHILE(TRUE);
}

Todavía le podemos dar alguna vuelta más al programa porque cuando A4 está a '1' la salida oscila continuamente. Cosa que en un led no veríamos, en otra aplicación puede que no sea el efecto deseado y en proteus al ser simulación se nota "mogollón".
Podría quedar así:
do
{
if(INPUT(PIN_A4))
PORTB=0;
else if(PORTA |= 0)
PORTB=1;
}WHILE(TRUE);

Y ya para terminar, como A0...A3 parece que no importan podría ser:
do
{
PORTB=!INPUT(PIN_A4);
}WHILE(TRUE);

Que aunque en proteus puede que parpadee en modo continuo, si lo haces paso a paso se ve que no. Por lo que fuera de simulación no lo hará.

Ya todo depende de lo que vayas buscando.

Espero que te sirva, un saludo
gONzAO

PD: Adjunto programas y archivos para proteus: prueba.rar (por si las moscas :P)

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

Joer sois unos mostruos (de buenos) y yo muy torpe,

Furri, pues ahora que lo dices, tengo que probar a tostar sin el Wdog activo, porque los problemas los tube hace muuucho tiempo (en una galaxia lejana) y es posible que el problema que tube con el PBP tambien fuera deribado del Wdog (Pensé que el compilador lo trataba de forma automatica). Desde entonces me acostumbre a meterlo todo con el Wdog activo.

gONzAO, cambiare lo del cristal pues bien es cierto que es la forma correcta y aunque no sea el problema las cosas bien hechas bien parecen, en cuanto los programas, he estado probando las modificaciones y todas funcionan correctas, efectivamente uno de los principales errores eran en la forma del código como por ejemplo la condicion de la condicional (PIN_A4==1). GRACIAS

Por otro lado aprovecho para ver si alguno tiene un manual de como enlazar el CCS al Proteus, hasta ahora lo que estoy haciendo es correr directamente el HEX en el proteus y programo directamente desde el CCS, pero claro de esta forma no se puede hacer debug, he estado buscando por los foros y aparecen varios hilos donde dan link pero los link han sido borrados, ¿podeis ayudarme tambien con esto?, es decir me gustaria poder correr paso a paso el programa y ver donde estoy fallando.

Tambien tengo unos video tutoriales de proteus y resulta que en el capitulo 11 que es donde podria venir la ayuda que necesito tampoco funcionaba la descarga (y me falta ese, ley de Morphy)

Gracias por la ayuda

Responder
gonzao
Respuestas: 218
(@gonzao)
Estimable Member
Registrado: hace 19 años

Adjunto como CCS_PROTEUS.rar un par de manuales para hacer lo que dices.

En cuanto al videotutorial, me imagino que te refieres a los de illasaron.
Registrate en http://www.illasaron.com/ y lo descargas.

Si no puedes, ya veremos qué podemos hacer.

Un saludo
gONzAO

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

Muchas Gracias gONzAO, has dado en el clavo en ambas cosas.

Al final he tenido un fin de Semana super comprometido (Por cierto estube en tu pueblo porque me equivoque llendo para Leganes :p) y no he tenido tiempo para ponerme a probar sobre el pic, a ver si puedo y luego pruebo.

Responder
Página 2 / 2
Compartir: