1- ¿Has probado debuggear tu código en el simulador previo a hacer esta aseveración?
R= No no lo he probado, normalmente programo y pruebo fisicamente.
2- ¿Es posible que tu armes mal el int32?
R= El resultado es una frecuencia que viene en un ejemplo del CCS, verifique este dato en rs232 y osciloscopio.
3- ¿Cómo envias el dato desde la PC, ¿en binario? ¿en ascii?
R= en la PC solo recibo datos como referencia uso un printf("Frecuencia: %LU",F);
4- Si es en ascii ¿usas una función propia o algo así como el atoi() ?
5- ¿Cómo garantizas que F no sea modificado durante la comparación? Es decir, chequeas que durante los IF no ocurra nada que haga que por ej, se reciba otro dato desde la usart y se modifique el valor de F? (estoy pensando en que lo hagas por interrupciones).
R= utilizo una funcion para leer frecuencia, de momento en esta computadora no tengo el codigo completo pero mas o menos va así:
#include "tcs230.h" // libreria que yo mismo construi para usar el tcs230
#include "lib.h"
int32 R,V,A;
void main ()
{
output_high(OE);
while (TRUE)
{
filtro_rojo(); // Mueve solamente A0 y A1
R=lee_freq(); // En lib.h parte de un ejemplo y esta 100% probada
filtro_verde();
V=lee_freq();
filtro_azul();
A=lee_freq();
if (R>700000) baja_rojo(1); // Funcion en lib.h que mueve un potenciometro digital de incremento/decremento una posicion hacia arriba.
if (R<700000) sube_rojo(1); // Funcion en lib.h que mueve un potenciometro digital de incremento/decremento una posicion hacia abajo.
if (V>350000) baja_verde(1); //iden
if (V<350000) sube_verde(1); //iden
if (A>350000) baja_azul(1); //iden
if (A<350000) sube_azul(1); //iden
}
}
Basicamente el programa hace eso, despues de cada if puse un printf para que me indicara si entra o no:
if (A<350000)
{
sube_azul(1);
printf ("subiendo azul");
}
pero solo entra en el rojo, tambien uso una interrupcin para que cada 30seg visualize el contenido de todas las variables al momento de los 30 seg. Mañana pongo el codigo completo de mi programa con el contenido de las librerias.
De la PC al PIC solo envio comandos inicialmente coloco mis potenciometros en 8.4KOhms, si envio una 'c' corre el programa que arriba les muestro, si pngo una 'm' coloco manualmente los potenciometros, en esto no tengo problemas ya que si puedo hacer el ajuste manual pero de forma automatica no, los pot deben mantenerse en los 8.4KOhms pero no lo hace.
de dato R,V y A quedan arriba de 850000 y nunca bajan por medio de los if, solo manualmente.
De que trata lo que estoy haciendo:
Tengo 3 pot digitales que controlan la intensidad de 3 LED (rojo, verde y azul), cada movimiento del pot corresponde a una frecuencia leida por el sensor tcs230 directamente de los LEDs, lo que deseo hacer es mantener los LEDs con cierta intensidad, ya medi la frecuencia de dicha intensidad y manualmente la mantengo, la idea es hacer un control digital que mantenga un nivel de luz en cada led sin intervencion humana.