TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Alejandro793 en 28 de Octubre de 2020, 04:19:23
-
Hola soy nuevo en el foro y buscaba ayuda con un ejercicio del LIBRO COMPILADORES C CCS y simulador PROTEUS para Microcontroladores el ejercicio consiste en introducir los datos a través del teclado, y modular la velocidad de un motor de corriente continua y medir las revoluciones por minuto del motor para esto configure el motor para que diera un pulso por cada revolución
#include <16f876.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOPUT
#use delay(clock = 4000000)
#define use_portb_kbd TRUE
#include <kbd.C>
#include <lcd.c>
#use standard_io(a)
int16 counter = 0;
//*************** INT TIMER1 *******************
#int_TIMER1
void TIMER1_isr(void)
{
counter = get_timer0(); //Lectura del contador TMR0
counter = counter*2*120; //Conversión a rpm
printf(lcd_putc,"%6lu rpm",counter);
lcd_gotoxy(1,1);
set_timer0(0);
set_timer1(3036);
}
//**********************************************
void main()
{
char k,kant = '0';
char PWMH = 0 , PWML = 0;
lcd_init();
kbd_init();
PORT_B_PULLUPS(TRUE);
setup_timer_0(RTCC_EXT_L_TO_H | RTCC_DIV_2); //Configuración del TIMER0
setup_timer_1(T1_internal | T1_DIV_BY_8); //Configuración del TIMER1
set_timer0(0); //Borrado de Contador
set_timer1(3036); //Carga de 0.5 s
enable_interrupts(int_TIMER1);
enable_interrupts(global); //Habilitación de Interrupción
while(TRUE) //Bucle infinito siempre consulta teclado
{
k=kbd_getc(); // Lee en ASCII el valor de la tecla que se pulsa
if(k == '\0' ) k=kant; // Si no se pulsa tecla \0 leemos el valor anterior
if((k == '*') || (k == '#')) k = '0' ; // Si se pulsa * o # k valdra 0
kant = k; // Se guarda la tecla pulsada
k = k-48; // Se convierte ASCII a valor numerico
PWMH = k*28; // Proporción entere la tecla y el valor del semiperiodo alto
PWML = 255-PWMH; // Semiperiodod bajo
for(PWMH;PWMH>0;PWMH--) // Obtención de la salida a nivel alto
{
Output_high(PIN_A0);
}
for(PWML;PWML>0;PWML--) // Obtención a la salida nivel bajo
{
Output_low(PIN_A0);
}
}
}
-
Mi problema es que el valor visto en el LCD no corresponde con las revoluciones por minuto del motor
-
¿Qué parámetros tiene el motor en la simulación?
Por defecto Proteus te lo pone con carga al 50%, que te lo hace girar a menor velocidad.