hola a todos...
estoy armando un proyecto que mostrata en un lcd o en 4 7-segmentos ya que las rpm max del motor son 3200, hasta ahora he logrado armar este codigo en picc, que se encarga de todo el proceso del calculo de las rpm ( gracias a pocher por sus comentarios en otros temas sobre esto) ahora bien, tengo en una variable llamada velocidad el calculo de las rpm en decimal, no encuentro la forma de mostrar esto en los 4 7-segmentos ya que tengo un int16 y no se me ocurre como hacer la division de los digitos para luego entrar en el proceso de los displays, de todo lo que he leido pude entender que me seria mas facil enviar toooooda la variable a un lcd ( creo que seria mas facil al lcd que a los 7-segmentos) el problema es que no tengo experiencia utilizando lcd.
OJO: este programa estaba originalmente disenado para enviar el valor de "velocidad" por puerto serial a la pc para ser manejado luego por visual basic.
PD: el programa fue realizado por pocher, xa, etc. gracias a ellos...
aqui va:
#include <16F877A.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
int16 pulsos;
int16 interrupcion;
int16 velocidad;
Interrupcion A estoy tratando de elegir entre esta o la interrupcion B
/*#int_RTCC
void RTCC_isr()
{
pulsos=get_timer1();
interrupcion++;
if(interrupcion==100)
{
//pulsos=get_timer1();
velocidad=pulsos*60;
//printf("%lu ",pulsos);
//printf("%lu ",velocidad);
//delay_ms(1000);
interrupcion=0;
set_timer1(0);
set_rtcc(178);
}
else
{
set_rtcc(178);
set_timer1(pulsos);
} */
Interrupcion B
/*
void RTCC_isr()
{
interrupcion++;
if(interrupcion==100)
{
pulsos=get_timer1();
velocidad=pulsos*60;
// printf("%lu ",pulsos);
// printf("%lu ",velocidad);
delay_ms(2000);
interrupcion=0;
set_timer1(0);
set_rtcc(177);
}
*/
}
void main()
{
set_tris_c(0x01);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RTCC);
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_128);
set_rtcc(177); //10ms -> 10000us -> 10000/128=78 -> 255-78=177
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);
set_timer1(0);
interrupcion=0;
while(true)
{
//aqui creo que tendria que empezar la rutina para enviar los datos al lcd o a los 7-segmentos
}
}
hola a todos...
estoy armando un proyecto que mostrata en un lcd o en 4 7-segmentos ya que las rpm max del motor son 3200, hasta ahora he logrado armar este codigo en picc, que se encarga de todo el proceso del calculo de las rpm ( gracias a pocher por sus comentarios en otros temas sobre esto) ahora bien, tengo en una variable llamada velocidad el calculo de las rpm en decimal, no encuentro la forma de mostrar esto en los 4 7-segmentos ya que tengo un int16 y no se me ocurre como hacer la division de los digitos para luego entrar en el proceso de los displays, de todo lo que he leido pude entender que me seria mas facil enviar toooooda la variable a un lcd ( creo que seria mas facil al lcd que a los 7-segmentos) el problema es que no tengo experiencia utilizando lcd.
OJO: este programa estaba originalmente disenado para enviar el valor de "velocidad" por puerto serial a la pc para ser manejado luego por visual basic.
PD: el programa fue realizado por pocher, xa, etc. gracias a ellos...
aqui va:
#include <16F877A.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
int16 pulsos;
int16 interrupcion;
int16 velocidad;
Interrupcion A estoy tratando de elegir entre esta o la interrupcion B
/*#int_RTCC
void RTCC_isr()
{
pulsos=get_timer1();
interrupcion++;
if(interrupcion==100)
{
//pulsos=get_timer1();
velocidad=pulsos*60;
//printf("%lu ",pulsos);
//printf("%lu ",velocidad);
//delay_ms(1000);
interrupcion=0;
set_timer1(0);
set_rtcc(178);
}
else
{
set_rtcc(178);
set_timer1(pulsos);
} */
Interrupcion B
/*
void RTCC_isr()
{
interrupcion++;
if(interrupcion==100)
{
pulsos=get_timer1();
velocidad=pulsos*60;
// printf("%lu ",pulsos);
// printf("%lu ",velocidad);
delay_ms(2000);
interrupcion=0;
set_timer1(0);
set_rtcc(177);
}
*/
}
void main()
{
set_tris_c(0x01);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RTCC);
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_128);
set_rtcc(177); //10ms -> 10000us -> 10000/128=78 -> 255-78=177
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1);
set_timer1(0);
interrupcion=0;
while(true)
{
//aqui creo que tendria que empezar la rutina para enviar los datos al lcd o a los 7-segmentos
}
}
La parte que mencionas no es difícil; lo único que tienes que hacer es extraer el digito de la variable obteniendo la unidad, decena, centena, y asta el infinito y mas allá, lo cual se hace dividiendo en el foro hay varios ejemplos de cómo hacerlo. El único detalle es que si el micro va a controlar los displey tendrás muchos problemas ya que el refresco de los mismos requiere la atención permanente del micro por lo cual te sugiero un controlador externo en maxim ay muchos.
Te recomiendo que optes por los displey de 7seg ya que se aprecian a mayor distancia que el lcd además de ofrecer mayor Angulo de visión ventajas muy buenas para una aplicación industrial
Suerte