#include <16F877A.h>
#device adc = 10
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock = 20MHz)
#define size 8
#define T1 300
#define T2 200
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_E PIN_D0
#define LCD_RS PIN_D1
#include <lcd.c>
#byte PIR1 = 0x0C
unsigned int cont = 0, speed;
int1 nuevopulso = 0, cambio;
int16 TFB = 0, TFS, TF = 0;
float AP = 0.0, frequencia;
#INT_EXT
void EXT_isr(void) {
cont++;
if(cont >= 4){
cont = 0;
}
}
#int_ccp1
void ccp1_int(){
if (cambio == 0 ){
TFS = CCP_1;
setup_ccp1(CCP_CAPTURE_RE);
cambio = 1;
}else{
TFB = CCP_1;
setup_ccp1(CCP_CAPTURE_RE);
cambio = 0;
if (nuevopulso == 0){
nuevopulso = 1;
}
}
}
void main(){
setup_timer_1(T1_INTERNAL);
setup_ccp1(CCP_CAPTURE_RE);
cambio = 0;
enable_interrupts(int_ccp1);
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
setup_adc(ADC_CLOCK_DIV_32); // Set ASC conversion time to 32 Tosc
setup_adc_ports(AN0); // Configure AN0 as analog
set_adc_channel(0);
delay_ms(100);
lcd_init();
while(true){
printf(lcd_putc,"\f\t\tMOTOR OFF !");
delay_ms(15);
while(cont == 1){
speed = read_adc();
if (speed < 2){
speed = 2;
}
output_low(PIN_B7);
output_low(PIN_B5);
output_low(PIN_B4);
output_high(PIN_B6);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B7);
output_low(PIN_B5);
output_low(PIN_B4);
output_high(PIN_B6);
output_high(PIN_B5);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B7);
output_low(PIN_B6);
output_low(PIN_B4);
output_high(PIN_B5);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B7);
output_low(PIN_B6);
output_high(PIN_B5);
output_high(PIN_B4);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B7);
output_low(PIN_B6);
output_low(PIN_B5);
output_high(PIN_B4);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B6);
output_low(PIN_B5);
output_high(PIN_B4);
output_high(PIN_B7);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia); */
delay_ms(speed);
output_low(PIN_B6);
output_low(PIN_B5);
output_low(PIN_B4);
output_high(PIN_B7);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
delay_ms(speed);
output_low(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
lcd_gotoxy(1, 1);
printf(lcd_putc, "\t\tSENTIDO HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia);
lcd_gotoxy(21, 2);
printf(lcd_putc, "W = %0.2f rad/s", frequencia * 2 * 3.15);
delay_ms(speed);
}
while( cont == 3 ){
speed = read_adc();
if (speed < 2){
speed = 2;
}
output_low(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
delay_ms(speed);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
delay_ms(speed);
output_low(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B4);
output_high(PIN_B7);
delay_ms(speed);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
output_high(PIN_B4);
delay_ms(speed);
output_low(PIN_B6);
output_low(PIN_B7);
output_high(PIN_B4);
output_high(PIN_B5);
delay_ms(speed);
output_low(PIN_B4);
output_low(PIN_B6);
output_low(PIN_B7);
output_high(PIN_B5);
delay_ms(speed);
output_low(PIN_B4);
output_low(PIN_B7);
output_high(PIN_B5);
output_high(PIN_B6);
delay_ms(speed);
output_low(PIN_B4);
output_low(PIN_B6);
output_low(PIN_B7);
output_high(PIN_B6);
if (nuevoPulso >= 1){
TF = TFB - TFS ;
AP = TF * 1.0 / 1000.0;
frequencia = 1.0 / (AP / 1000.0);
nuevopulso = 0;
}
lcd_gotoxy(1, 1);
printf(lcd_putc, "SENTIDO ANTI-HORARIO");
lcd_gotoxy(1, 2);
printf(lcd_putc, "Pulso = %f ms", AP);
lcd_gotoxy(21, 1);
printf(lcd_putc, "Freq = %0.2f Hz", frequencia);
lcd_gotoxy(21, 2);
printf(lcd_putc, "W = %0.2f rad/s", frequencia * 2 * 3.15);
delay_ms(speed);
}
}
}
Nenhum comentário:
Postar um comentário