TUTORIAL TACOMETRO EN LCD CON ATMEGA8 Por Óscar Razo Navarrete INSTITUTO TECNOLÓGICO DE ESTUDIOS SUPERIORES DE ZAMORA DPTO. DE INGENIERIA ELECTRÓNICA. Este es el primer tutorial que realizo para COMUNIDAD ATMEL, y espero seguir aportando conocimientos. Básicamente se trata de un tacómetro que valga la redundancia, nos servirá para medir las vueltas que da la flecha de un pequeño motor de 5 volts durante un minuto, el valor de las RPM será desplegado en una pantalla de LCD de 16x2, aunque también se pueden desplegar los datos en displays si así lo quisiéramos, pero yo escogí la pantalla porque es mas fácil, se ahorran pines, y puse un texto en la línea de debajo de la pantalla el cual dice: ’’COMUNIDAD ATMEL’’. FUNCIONAMIENTO La forma que determina el funcionamiento de este programa es sencillo. Utilizaremos el Timer0 del ATMEGA8, el cual tiene una función que nos permite contar los pulsos externos generados por un motor que tiene un disco (hecho con un pedazo de cartón) con 8 agujeros, el cual esta en medio de un emisor y un receptor infrarrojos, y es el receptor el que el que enviará los pulsos a el pin numero6 (que corresponde al bit 4 del puerto D) cada vez q el rayo es interrumpido. Una vez que son los 100ms se lee el valor que existe en el TMR0, lo multiplica por 75 esto debido al tiempo por minuto y el producto entre los agujeros 8, nos da como resultado 75.(O sea como estamos muestreando cada 100ms, entonces en un segundo caben 10 veces 100 ms de acuerdo? Esto quiere decir que a un minuto le caben 600 veces 100ms (espero haberme explicado) y es por esto que 600/8=75 (8 es el numero de agujeros). Por lo tanto el numero menor de revoluciones que podremos medir serán 75, ya que el numero menor de pulsos que se pueden medir en 100ms es 1 y entonces 1x75=75.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
TUTORIAL TACOMETRO EN LCD CON ATMEGA8
Por Óscar Razo Navarrete
INSTITUTO TECNOLÓGICO DE ESTUDIOS SUPERIORES DE ZAMORA
DPTO. DE INGENIERIA ELECTRÓNICA.
Este es el primer tutorial que realizo para COMUNIDAD ATMEL, y espero seguir aportando
conocimientos.
Básicamente se trata de un tacómetro que valga la redundancia, nos servirá para medir las vueltas
que da la flecha de un pequeño motor de 5 volts durante un minuto, el valor de las RPM será
desplegado en
una pantalla de LCD de 16x2, aunque también se pueden desplegar los datos en displays si así lo
quisiéramos, pero yo escogí la pantalla porque es mas fácil, se ahorran pines, y puse un texto en la
línea de debajo de la pantalla el cual dice: ’’COMUNIDAD ATMEL’’.
FUNCIONAMIENTO
La forma que determina el funcionamiento de este programa es sencillo. Utilizaremos el Timer0
del ATMEGA8, el cual tiene una función que nos permite contar los pulsos externos generados por
un motor que tiene un disco (hecho con un pedazo de cartón) con 8 agujeros, el cual esta en
medio de un emisor y un receptor infrarrojos, y es el receptor el que el que enviará los pulsos a el
pin numero6 (que corresponde al bit 4 del puerto D) cada vez q el rayo es interrumpido. Una vez
que son los 100ms se lee el valor que existe en el TMR0, lo multiplica por 75 esto debido al tiempo
por minuto y el producto entre los agujeros 8, nos da como resultado 75.(O sea como estamos
muestreando cada 100ms, entonces en un segundo caben 10 veces 100 ms de acuerdo? Esto
quiere decir que a un minuto le caben 600 veces 100ms (espero haberme explicado) y es por esto
que 600/8=75 (8 es el numero de agujeros).
Por lo tanto el numero menor de revoluciones que podremos medir serán 75, ya que el numero
menor de pulsos que se pueden medir en 100ms es 1 y entonces 1x75=75.
Diferentes vistas del motor DC de 5 volts con un disco hecho de cartón el cual tiene 8 agujeros.
NOTA: Si se desea obtener una mayor resolución, será necesario hacer mas agujeros en el disco,
por ejemplo si el disco tiene 60 agujeros, entonces haremos: 600/60=10 y para este caso el
numero menor que se puede medir será de 10 RPM, pero para efectos de este tutorial se utilizará
el disco con 8 perforaciones.
Emisor y receptor infrarrojos.
aquí estará el disco girando para interrumpir el rayo infrarrojo y contar los pulsos
Diagrama esquematico
De aquí tomaremos laseñal para conectar
Al bit 4 del puerto D, o lo que es lo mismo el pin numero 6 del ATMEGA8.
Como se dijo anteriormente, los pulsos se cuentan de tal manera que en un lapso de 100ms
capturamos el numero de pulsos
que se generaron en el pin(es decir estamos haciendo un muestreo del contador del timer0 cada
100ms) y luego este valor(TCNT0), se multiplica por 75 para obtener el resultado, posteriormente
este
resultado se compara con el numero 9999 (esto debido a que solamente utilizé 4 digitos y el valor
máximo que se puede desplegar en 4 digitos es 9999) y si es menor a 9999, se divide entre 1000
para obtener el numero de los millares, el residuo se divide entre 100 para obtener las centenas,
el residuo de las centenas se divide entre 10 para obtener las decenas, y el residuo de las decenas
simplemente lo colocamos en las unidades.
IMPORTANTE: Es necesario estar refrescando el TCNT0, para que cada muestreo nos de el numero
de pulsos correspondiente, y por eso al principio de la ejecución del programa borramos el TCNT0
(ya que si no lo borramos, el valor del TCNT0 se acumularía para el siguiente muestreo y nos daría
una lectura errónea del valor real de los pulsos obtenidos en ese siguiente muestreo)
CODE WIZARD
Haremos un nuevo proyecto en el code wizard en el cual escogeremos el ATMEGA8 (ojo no es el
ATMEGA 48, aunque también es posible realizar el programa, pero los timers son un poco distintos
asi que debemos tener cuidado a la hora de seleccionar nuestro microcontrolador, y checar su
respectiva hoja de datos) con una
frecuencia interna de 1 MHZ, es importante señalar que el code wizard no nos da la opción de
dividir la frecuencia para el atmega8, como en el atmega48, solo escogeremos 1MHZ y listo.
Tambien seleccionaremos la pantalla de 16X2 para ser utilizada en el puerto B.
En la pestaña de ‘’timers’’ vamos a dar click en ‘’Timer0’’ y luego en ‘’clock source’’ vamos a
seleccionar la opción de ‘’T0 pin Falling Edge’’ porque los pulsos se contarán cuando haya un ‘’0’’
lógico.
En la pestaña de ‘’ports’’ vamos a seleccionar el ‘’pull up’’ del bit 4 del puerto D, ya que es por este
pin por donde vamos a contar los pulsos, y si no le ponemos el ‘’pull up’’ podrían filtrarse señales
no deseadas por este pin.
Aquí seleccionamos ATMEGA8 a 1MHZ
Seleccionar pantalla LCD en el puerto B
Aquí seleccionamos el timer0 en la opción ‘’T0 pin Falling Edge’’
Y por ultimo habilitar ‘’pull up’’ del bit 4 del puerto D
El siguiente es el código generado por el code wizard y lo que está en color azul es lo que se debe