- Componentes requeridos:
- Diagrama de circuito:
- Usando el TEMPORIZADOR de 8051 para medir la frecuencia:
- Temporizador 555 como fuente de frecuencia:
- Explicación de trabajo y código:
La frecuencia se define como el número de ciclos por segundo. También se puede definir como recíproco del tiempo total 'T'. En este proyecto vamos a contar el número de pulsos que ingresan al puerto 3.5 del microcontrolador 8051 y lo mostraremos en una pantalla LCD de 16 * 2. Básicamente, tenemos midiendo la frecuencia de la señal en el puerto 3.5 de 8051. Aquí hemos usado el chip AT89S52 8051, y se usa un 555 IC en modo Astable para generar el pulso de muestra para la demostración. Anteriormente hemos construido un contador de frecuencia usando Arduino.
Componentes requeridos:
- Microcontrolador 8051 (AT89S52)
- Pantalla LCD 16 * 2
- Fuente de frecuencia (temporizador 555)
- Potenciómetro
- Cables de conexión
Diagrama de circuito:
Usando el TEMPORIZADOR de 8051 para medir la frecuencia:
El microcontrolador 8051 es un microcontrolador de 8 bits que tiene 128 bytes de RAM en el chip, 4K bytes de ROM en el chip, dos temporizadores, un puerto serie y cuatro puertos de 8 bits. El microcontrolador 8052 es una extensión del microcontrolador. Para configurar el puerto 3.5 como contador, los valores de registro TMOD se establecen en 0x51. La figura siguiente muestra el registro TMOD.
PORTÓN | C / T | M1 | M0 | PORTÓN | C / T | M1 | M2 |
TEMPORIZADOR 1 | TEMPORIZADOR 0 |
GATE: cuando GATE está configurado, el temporizador o contador se habilita solo cuando el pin INTx está ALTO y el pin de control TRx está configurado. Cuando se borra GATE, el temporizador se habilita siempre que el bit de control TRx se establece.
C / T - cuando C / T = 0, actúa como temporizador. Cuando C / T = 1, actúa como Contador.
M1 y M0 indican el modo de funcionamiento.
Para TMOD = 0x51, el timer1 actúa como contador y opera en mode1 (16bit).
La pantalla LCD 16 * 2 se utiliza para mostrar la frecuencia de la señal en hercios (Hz). Si es nuevo en 16x2 LCD, consulte más sobre los pines de 16x2 LCD y sus comandos aquí. Compruebe también cómo conectar la pantalla LCD con el 8051.
Temporizador 555 como fuente de frecuencia:
La fuente de frecuencia debe producir ondas cuadradas y la amplitud máxima está limitada a 5 V, porque los puertos del microcontrolador 8051 no pueden manejar un voltaje superior a 5 V. La frecuencia máxima que puede medir es 655,35 KHz debido a la limitación de memoria de los registros TH1 y TL1 (8 bits cada uno). En 100 milisegundos, TH1 y TL1 pueden contener hasta 65535 cuentas. Por tanto, la frecuencia máxima que se puede medir es 65535 * 10 = 655,35 KHz.
En este proyecto del medidor de frecuencia 8051, estoy usando el temporizador 555 en modo astable para producir ondas cuadradas de frecuencia variable. La frecuencia de la señal generada por 555 IC se puede variar ajustando el potenciómetro como se demuestra en el video que se presenta al final de este proyecto.
En este proyecto, el Timer1 (T1) cuenta el número de pulsos que ingresan al puerto 3.5 de los microcontroladores 8051 durante 100 milisegundos. Los valores de recuento se almacenarán en los registros TH1 y TL1 respectivamente. Para combinar los valores de los registros TH1 y TL1, se utiliza la siguiente fórmula.
Pulsos = TH1 * (0x100) + TL1
Ahora el 'pulso' tendrá un número de ciclos en 100 milisegundos. Pero la frecuencia de la señal se define como el número de ciclos por segundo. Para convertirlo en frecuencia, se utiliza la siguiente fórmula.
Pulsos = Pulsos * 10
Explicación de trabajo y código:
El programa C completo para este medidor de frecuencia se proporciona al final de este proyecto. El código se divide en pequeños fragmentos significativos y se explica a continuación.
Para la interfaz de 16 * 2 LCD con el microcontrolador 8051, tenemos que definir los pines en los que 16 * 2 lcd se conecta al microcontrolador 8051. El pin RS de 16 * 2 lcd está conectado a P2.7, el pin RW de 16 * 2 lcd está conectado a P2.6 y el pin E de 16 * 2 lcd está conectado a P2.5. Los pines de datos están conectados al puerto 0 del microcontrolador 8051.
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
A continuación, tenemos que definir algunas funciones que se utilizan en el programa. La función de retardo se utiliza para crear un retardo de tiempo especificado. La función Cmdwrt se utiliza para enviar comandos a una pantalla lcd de 16 * 2. La función datawrt se utiliza para enviar datos a una pantalla lcd de 16 * 2.
demora nula (unsigned int); void cmdwrt (carácter sin firmar); void datawrt (carácter sin firmar);
En esta parte del código, estamos enviando comandos a 16 * 2 lcd. Los comandos tales como borrar pantalla, incrementar el cursor, forzar el cursor al comienzo de la 1ª línea se envían a la pantalla lcd de 16 * 2 uno por uno después de un tiempo de retraso especificado.
para (i = 0; i <5; i ++) {cmdwrt (cmd); retraso (1); }
En esta parte del código, el temporizador1 se configura como contador y el modo de operación se establece en el modo 1.
El temporizador 0 se configura como temporizador y el modo de funcionamiento se establece en el modo 1. El temporizador 1 se utiliza para contar el número de pulsos y el temporizador 0 se utiliza para generar un retardo de tiempo. Los valores TH1 y TL1 se establecen en 0 para garantizar que el conteo comience desde 0.
TMOD = 0x51; TL1 = 0; TH1 = 0;
En esta parte del código, el temporizador está diseñado para funcionar durante 100 milisegundos. Se generan 100 milisegundos de retraso utilizando la función de retraso. TR1 = 1 es para iniciar el temporizador y TR1 = 0 es para detener el temporizador después de 100 milisegundos.
TR1 = 1; retraso (100); TR1 = 0;
En esta parte del código, los valores de conteo presentes en los registros TH1 y TL1 se combinan y luego se multiplican por 10 para obtener el número total de ciclos en 1 segundo.
Pulsos = TH1 * (0x100) + TL1; Pulsos = pulsos * 10;
En esta parte del código, el valor de frecuencia se convierte en bytes individuales para facilitar su visualización en una pantalla lcd de 16 * 2.
d1 = pulsos% 10; s1 = pulsos% 100; s2 = pulsos% 1000; s3 = pulsos% 10000; s4 = pulsos% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; d6 = (pulsos-s4) / 100000;
En esta parte del código, los dígitos individuales del valor de frecuencia se convierten al formato ASCII y se muestran en una pantalla lcd de 16 * 2.
If (pulsos> = 100000) datawrt (0x30 + d6); if (pulsos> = 10000) datawrt (0x30 + d5); if (pulsos> = 1000) datawrt (0x30 + d4); if (pulsos> = 100) datawrt (0x30 + d3); if (pulsos> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
En esta parte del código, enviamos comandos a una pantalla lcd de 16 * 2. El comando se copia al puerto 0 del microcontrolador 8051. RS se hace bajo para la escritura de comandos. RW se hace bajo para la operación de escritura. El pulso de alto a bajo se aplica en el pin de habilitación (E) para iniciar la operación de escritura del comando.
cmdwrt vacío (carácter sin firmar x) {P0 = x; rs = 0; rw = 0; en = 1; retraso (1); en = 0; }
En esta parte del código, enviamos datos a una pantalla lcd de 16 * 2. Los datos se copian en el puerto 0 del microcontrolador 8051. RS se hace alto para la escritura de comandos. RW se hace bajo para la operación de escritura. El pulso de alto a bajo se aplica en el pin de habilitación (E) para iniciar la operación de escritura de datos.
void datawrt (carácter sin signo y) {P0 = y; rs = 1; rw = 0; en = 1; retraso (1); en = 0; }
Así es como podemos medir la frecuencia de cualquier señal usando el Microcontrolador 8051. Consulte el código completo y el video de demostración a continuación.