Después de realizar el
frecuencímetro en la placa
hacerCI
, he decidido reprogramar en C mi frecuencímetro
Frecu32 para montarlo en dicha placa.
Es mas que nada probar la programación en C para un PIC
16f628A y 16f84A utilizando el compilador de C CCS.
La única modificación del circuito es colocar un
pulsador para cambiar la escala. He utilizado 2 resistencias y un
pulsador, es fácil soldarlos por la parte del cobre. De
esta forma permite una precisión en la medición.
El caso es que me ha resultado mas difícil de lo que
pensaba, el C utilizado en CCS es un poco particular, lo mejor es
que cada uno lo averigüe por si mismo.
También me encontré una cosa de lo mas curiosa. La
rutina
frecu3
está hecha en ensamblador y los tiempos deben ser exactos.
Pues bien el compilador se dedica a optimizarlos,
modificándolos para ahorrar unos pocos bytes.
Conclusión no me funcionaba el programa como
debería. Esto lo descubrí revisando el código
ensamblador que devuelve el compilador de C. La solución la
encontré con la orden
#OPT
0 que evita la modificación del
código.
Debemos entender que debido a la sincronización de la
entrada con el reloj del sistema, se pueden perder una serie de
ciclos de reloj, cuanta mas alta la frecuencia mas ciclos se
pierden.
Ahora dejo una cosa
pendiente para los que sean puristas. En la lectura de la
frecuencia no realiza una parada del contador, por lo que puede
ocurrir una medición incorrecta en ocasiones muy
concretas, son raras pero pueden ocurrir. Con solo dos o tres
instrucciones en el ensamblador se corrigen, lo dejo para la
tarea del que quiera montar el circuito.
También
sería una buena opción el autorango, fácil
de hacer.
Bueno, ya tengo hecho lo de autorrango y la parada del contador.
En el esquema del circuito falta una resistencia de 470 entre el
generador y la entrada al PIC. En el montaje eléctrico
viene puesta.
También sobra el pulsador de escala y las dos resistencias
debido al autorrango.
Archivo para 16f628A con autorango y parada
del contador.
Esquema del circuito con un 16f628A
Archivos 16f628A
Montaje del circuito con el 16f628A
Como tengo algún que
otro 16f84A decidí intentar meter el programa en los 1024
bytes.
El caso es que se pasa por poco en memoria, lo cual me ha obligado
a modificar el programa en C, recortando varias parte para al
final entrar.
He tenido que recortar una escala, comentar parte del programa de
manejo del LCD que no se utiliza, y por último quitar la
presentación. Total que ha ocupado el 98% de la memoria del
16f84A.
Esquema del circuito con un 16f84A
Archivos 16f84A
Montaje del circuito con el 16f84A
Saludos.
SETA43