Hola, este es el primer tema q creo, el tema lo busqué y no encuentre algun tema relacionada (O no lo busqué bien), bueno el trabajo que quiero realizar es enviar las revoluciones desde la pc (100RPM) y q el motor gire a esa velocidad, y tambien cuando este este girando a esa velocidad se envie datos hacia la PC y que me grafique esa velocidad.
Ha estuve haciendo un codigo que cuenta los pulsos del encoder por RB0 en un cierto tiempo, y asi convertirlo a RPM y enviarlo a la PC para que sea graficado(VB6.0). Lo armé y si funciona hasta frecuencias 1k-1.5Khz.
Este es el codigo que envia los RPM hacia la PC (De seguro q no sea muy bueno)
BUeno el problema es que he intentado recibir(en el pic) los RPM, pero no logro visualizar si realmente ha llegado, como haria esto......... y estoy pensando luego de obtener los rpm, usar PWM
Ha estuve haciendo un codigo que cuenta los pulsos del encoder por RB0 en un cierto tiempo, y asi convertirlo a RPM y enviarlo a la PC para que sea graficado(VB6.0). Lo armé y si funciona hasta frecuencias 1k-1.5Khz.
Este es el codigo que envia los RPM hacia la PC (De seguro q no sea muy bueno)
BUeno el problema es que he intentado recibir(en el pic) los RPM, pero no logro visualizar si realmente ha llegado, como haria esto......... y estoy pensando luego de obtener los rpm, usar PWM
PHP:
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#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=20000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>
long contador,pulsos;
Int valor,desborde;
float rpm;
#INT_EXT
ext_isr()
{
Contador=contador+1;
}
#INT_TIMER0
void timer0_isr(void)
{
desborde=desborde+1;
}
void main()
{
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(int_timer0);
setup_counters(rtcc_internal,rtcc_div_128);
set_timer0(0);
ext_int_edge(h_to_l);
lcd_init();
contador=0;
desborde=0;
while (1)
{
if(contador==1)
{
set_timer0(0);
}
if (desborde<15) //38
{
pulsos=contador;
delay_ms(200);
set_timer0(0);
contador=0;
desborde=0;
}
rpm=pulsos/2.33333;//2.8944; //2.345 ultimo dividir por 3.1034
//putc(rpm);
printf("%3.2f\n\r ",rpm); //\n\r
lcd_gotoxy(1,1);
printf(lcd_putc,"c=%lu",pulsos);
delay_ms(100);
lcd_putc("\f"); //aumentado
lcd_gotoxy(1,2);
printf(lcd_putc,"vel=%frpm",rpm);
delay_ms(100);
}
}
Última edición por un moderador: