El programa consiste en enviar por teclado el duty del PWM ( desde 0 a 60, que seria el maximo) y a la vez cada vez que se envia esto, se hace una conversion A/D, y se manda por el puerto serie!!!
Tengo problemas, me sale el PWM, pero luego al hacer la conversion me envia por el puerto serie el .00, por que??tengi un potenciometro en la entrada, y la Vref es de 5 voltios, y el fondo de escala es de 5voltios tb; y el nº de bits es de 10!!
AQUI OS PONGO EL CODIGO gracias, y si me pudoerais ayudar mucho mejor!!!!
*****************************************************
#include <16f876.h>
#device adc=10
#include <stdlib.h>
#fuses XT, NOPROTECT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
main()
{
float const resolucion=5.0/1024.0;
char value;
char string[10]; //9 caracteres (0-255) más el caracter de RETURN, admite flotantes, pero los redondea
int duty;
float dutyreal;
float velocidad;
int i;
float dato;
long value2;
setup_ccp1(CCP_PWM); //Se habilita el pwm
setup_timer_2(T2_DIV_BY_16, 61, 1); //Se establece el valor de la frecuencia
duty = 0;
set_pwm1_duty(duty);
setup_adc_ports( ALL_ANALOG ); //todo el puerto analogico
setup_adc( ADC_CLOCK_INTERNAL ); //convertidor con clock interno
set_adc_channel( 0 ); //el canal 0
while (1)
{
while(!kbhit()); //Espera la recepcion de un caracter
value=getc();
if (value=="s")
{
output_high(PIN_A0); //Avisa llegada de la s
while(!kbhit());
output_low(PIN_A0);
output_high(PIN_A1); //Avisa llegada del Duty
gets(string); //Guarda el Duty (0-255) en la variable string
//y espera un RETURN (Ctrl 13)
duty=atoi(string); //Usa la función ATOI para pasarlo a entero
//dutyreal=(duty*60)/100;
//dutyreal=duty*0.6;
set_pwm1_duty(duty); //El caracter ascii recibido pasado a entero
//establecido como ciclo de trabajo
output_low(PIN_A1);
//velocidad=duty*80; //deseo saber cual es la velocidad del motor segun sus caracteristicas
//puts("La velocidad del motor es: "
;
//puts(velocidad);
//convertidores A/D
delay_ms(5); //delay de 5ms, frecuencia de adquisicion 200Hz como mucho
value2 = read_adc();
dato = value2*resolucion;
printf("%1.2f voltios",dato);
}
}
}
PD: Gracias otra vez y saludos, por favor necesito ayuda!!