Hola a todos, tengo un problema para mi materia de microcontroladores que es el siguiente:
Elaborar un programa que mida la frecuencia de una señal externa, ademas que genera una señal del doble de la frecuencia de entrada, utilizando el pin P1.6
La información se debe desplegar por medio de comunicación serial, a una velocidad de 1200bps (8N1). El cristal a utilizar será de 11.059MHz.
Además se debe encender un LED de color de acuerdo a lo siguiente:
Si la frecuencia medida es menor o igual a 100Hz, se enciende el LED VERDE
Si la frecuencia medida es mayor o igual a 300Hz, se enciende el LED
ROJO
De lo contrario, se enciende el LED AMARILLO.
Ejemplo:
Si la señal externa posee una frecuencia de 60Hz, en la Terminal Virtual se mostrará lo siguiente:
Frecuencia = 60Hz
Además se encenderá el LED VERDE y saldrá una onda cuadrada de 120Hz por el pin P1.6
NOTA:
No olvide configurar la velocidad en la terminal virtual a 1200bps.
Conecte la señal externa a alguna entrada del microcontrolador AT89C2051.
El osciloscopio sirve para ver la señal de entrada, si lo desean, lo pueden eliminar.
Los frecuencímetros se los utiliza para medir la frecuencia de entrada y de salida.
Para que aparezca un texto debajo de otro, utilice lo siguiente en el mensaje a enviar
mensaje: DB 'hola mundo',10,13,0
(10,13 son los códigos de Linefeed y Return), el 0 indica el fin de la cadena
Si este circuito se lo fuera a implementar, se debe conectar un cristal y un par de condensadores de 22pF.
Se que parte de la logica seria la siguiente:
if(pin>=100 && pin<=300)
{
if(pin==120)
{
//enciende led verde
//onda cuadrada de 120hz
}
//enciende led amarillo
}
else
{
if(pin<100)
{
//enciende led verde
}
else
{
//enciende led rojo
}
}
Pero obviamente no tengo los conocimientos para hacer la transformacion de c++ hasta assembler ademas de las interrupciones necesarias para lograr que enciendan los led's.
El trabajo debo entregarlo para mañana a medio dia de modo que cualquier tipo de ayuda que me puedan brindar seria bastante genial.