Página principal
ATMEGA88-Ensamblador
Frecuencímetro
xsetaseta@gmail.com
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
|
Oscilador para la pruebas
|