Página principal

ATMEGA88-Ensamblador

Frecuencímetro

xsetaseta@gmail.com

Esquema
Sigo con mis practicas en ensamblador, esta vez un frecuencímetro.
Otro montaje que tenía hecho con PIC era un frecuencímetro, ahora lo he realizado con el ATMEGA88.
He utilizado el contador1 de 16bits del microcontrolador, y cuando rebasa por ser la frecuencia mayor, dos registros de 8 bits. En total un contador de 32bits, mas que suficiente.
La rutina principal es frecu1 que dado un tiempo prefijado realiza la medida de frecuencia.
Se basa en que la rutina tarda 20 ciclos de reloj, a 20Mhz corresponde  1 uS, si realizamos un 1 millón de bucles, el tiempo de medida resulta ser 1 segundo.
He realizado 4 escalas, 1 segundo, 0.1 segundo, KHz en kiloherzios, y medida en BF (baja frecuencia).
Diréis que la medida en BF sobra, y tendríais razón, pero ahora lo explico.
Si miráis las especificaciones del ATMEGA88 veréis que el contador 1 está sincronizado mediante el reloj del microcontrolador 20MHz.
Each half period of the external clock applied must be longer than one system clock cycle to
ensure correct sampling. The external clock must be guaranteed to have less than half the sys-
tem clock frequency (fExtClk < fclk_I/O/2) given a 50/50% duty cycle. Since the edge detector uses
sampling, the maximum frequency of an external clock it can detect is half the sampling fre-
quency (Nyquist sampling theorem). However, due to variation of the system clock frequency
and duty cycle caused by Oscillator source (crystal, resonator, and capacitors) tolerances, it is
recommended that maximum frequency of an external clock source is less than fclk_I/O/2.5.

Según esto la máxima frecuencia recomendada debe ser 20MHz/2.5=8Mhz.
En otras palabras, que ha frecuencias altas se pierde un numero de ciclos, por lo que en vez de utilizar 1 millón de ciclos he utilizado 1.000.180 . La verdad que esto fue un quebradero de cabeza, y para colmo los cristales tienen un margen de error. Este problema también me surgió con el frecuencímetro mediante el PIC.
La única forma de evitar este problema es utilizar el contador 2 que es asíncrono, pero la entrada de este contador resulta ser donde se coloca el cristal de 20MHz. Hay otra forma, utilizando otro integrado, pero eso es otra historia.

Programa
   miATa3.hex
Circuito
Oscilador Oscilador para la pruebas