Hola, yo soy realmente nuevo en esto de los pic's y estoy bastante confundido.
Tengo que hacer un programa en el cual controle un motor dc de 12V que tiene como max 3200 RPM, como el pic solo saca 5 V es obvio que voy a tener que hacer un amplificador de voltaje y de corriente.
Estoy usando el modulo PWM para el control de la velocidad.
La cosa es que por RA0 entra un voltaje y usando el adc obtengo el valor del duty que usa el PWM. Ahora este valor debo enviarlo a la computadora por la hiperteminal y a un lcd.
Ahora bien tengo varios problemas:
1) Tengo que mostrar el valor de las revoluciones por minuto y no del ADC, como lo hago? Además suponiendo que por RA0 entre 5V (q es el maximo) cuanto me devuelve el ADC? me devuelve 255? porque en el lcd me sale 127.....
2)Como hago para enviar por rs232 y como se hace con la hiperterminal?
Este es mi programa:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B0,rcv=PIN_B1,bits=8)
#include <lcd.c>
int valor;
int aux=0;
void main()
{
lcd_init();
port_b_pullups(TRUE);
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// Inicio
lcd_putc("\f Micros...");
delay_ms(500);
lcd_putc("\f");
for(;;){
// Adquisicion del dato del ADC RA0
set_adc_channel(0);
delay_us(100);
valor=read_adc();
delay_ms(10);
if(aux!=valor){
//Configuración del PWM
set_pwm1_duty(valor);
//Envio al lcd
lcd_putc("\f");
lcd_putc("Valor=");
printf(lcd_putc,"%d",valor);
//Envio al PC
delay_ms(20);
}
aux=valor; //Esto hago para que no se borre el lcd siempre sino solo cuando hay nuevos valores...
}
}
Ayuda por favor!!!!!!!!!!!!!!!!!!