top of page
Search
  • Writer's pictureJose Munoz

Micro Controladores PIC. Modulación PWM. Control Remoto de Motor

Updated: Oct 4, 2018

Para controlar el Motor de manera remota pueden descargar la aplicaron  RC Bluetooth Control desde:

Google PLay:

Amazon:

Para realizar el control del motor mediante comando de voz pueden descargar  la aplicación RC Bluetooth PRO desde :

Google Play:

Amazon:

Pueden Descargar el código para programar el PIC :


//#include <16f877A.h> #include <18F4550.h> #device ADC=8 //#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen

// CONFIGURACIÓN DE LOS FUSES PAR EL ROGAMADO Y VELOCIDAD DEL CRISRTAL #fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN //#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

// CONFIGURACIÒN VELOCIDAD DL RELOJ DEL MICROCONTROLADO #use delay (clock = 20M ) #use fast_io(c) // CONFIGURACIÓN VELOCIDAD DE TRANSMISIÓN SRAL Y OS PINESD TXXXY RX #use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)

// PRIORIDAD A LAS INTERRUPCIONES #priority rda,timer1,ad // BIBLOTECA MODIFCADA DE LCD.H PARA QUE TRABAJE CONEL PUERTO D #include <LCD4x16_2016.c> //#include <LCD4x16_877A.c>

// CONFIGURACION DE LOS PUERTOS #byte PUERTO_A=0xf80 #byte PUERTO_B=0xf81 #byte PUERTO_C=0xf82 #byte PUERTO_D=0xf83 #byte PUERTO_E=0xf84

// VARIABLE QUE CAPTURA EL CARACTER QUE SE ENVÍA POR TRANSMISION SERIAL DESDE EL TELEFONO O TABLET char valor='$'; // VARIABLE QUE INDICA SI SE RECIBIO UN CARACTER SW=1 Y SI NO SE RECIBIO CARACTERES SW=0 int sw=0; // STRING DEL MENSAJE DEL PIC char dato[30]="PIC Rx="; // STRING DEL MENSAJE DEL PIC QUE SE TRANSMITEPOR EL PUERTO SERIAL char mensajeTx [12]; // VARIABLE PARA LA VELOCIDAD DEL MOTOR INT velMotor=255; // VARIABLES SENTIDO DEL GIRO int izqMotor=0,derMotor=0;

//INTERRUPCION SI SE RECIBE POR EL PUERTO SERIAL

#INT_RDA //RS232 receive data available void  recibido() { // CAPTURA EL CARATCTER QUE SE RECIBE POR TRANSMISION SERIAL while ( kbhit()) { valor=getc();//recibe el dato del pc y lo guarda en valor sw=1;

} }

void main ()

{ int i;   Setup_adc_ports(NO_ANALOGS);   lcd_init();   set_tris_a(0b00000000);   set_tris_b(0b00000000);   set_tris_c(0b10000000);   set_tris_d(0b00000000);   output_low(PIN_C2); //CCP1   setup_ccp1(CCP_PWM);   setup_ccp2(CCP_PWM);   setup_timer_2(T2_DIV_BY_1, 255, 1);   lcd_init();  lcd_gotoxy(1,1);  printf(lcd_putc,"Modulacion PWM");  output_a(0xFF);  enable_interrupts(GLOBAL);   enable_interrupts(INT_RDA);   // Apago los LED conevatados al Puerto A   output_a (255); while(true) {

switch(valor) { //SELECCIONAMOS LA VELOCIDAD DE GIRO DEL MOTOR

           case '9': velMotor=255;            break;            case '8': velMotor=226;            break;            case '7': velMotor=199;            break;            case '6': velMotor=170;            break;            case '5': velMotor=142;            break;            case '4': velMotor=114;            break;            case '3': velMotor=85;            break;            case '2': velMotor=57;            break;            case '1': velMotor=28;            break;            case '0': velMotor=0;            break;            // SELECCIONAMOS EL SENTIDO DE GIRO case 'R': izqMotor=0;          derMotor=velMotor;          output_bit(PIN_A1,0);          output_bit(PIN_A2,255);          output_bit(PIN_A3,255);            break;

case 'L': izqMotor=velMotor;          derMotor=0;          output_bit(PIN_A1,255);          output_bit(PIN_A2,0);          output_bit(PIN_A3,255);            break;            // SELECCIONAMOS APAGAR EL MOTOR case 'X': izqMotor=0;          derMotor=0;          output_bit(PIN_A1,255);          output_bit(PIN_A2,255);          output_bit(PIN_A3,0);            break; case 'x': izqMotor=0;          derMotor=0;          output_bit(PIN_A1,255);          output_bit(PIN_A2,255);          output_bit(PIN_A3,0);            break; }

//EL MOTOE GIRA EN FUNCION DEL CARACTER RECIBIDO     set_pwm2_duty(izqMotor); set_pwm1_duty(derMotor);

// SE IMPRIME EL CARACTER RECIBIDO EN PANTALLA Y SE TRANSMITE UN MENSAJE POR EL PUERTO SERIAL

if (sw==1) { lcd_gotoxy(1,2); printf(lcd_putc,"%S %c","Recibido=",valor); sprintf(mensajeTX,"%s %c",dato,valor); puts(mensajeTx); sw=0; //valor='$'; }

 // SE INICIALIZA LA VARIABLE RECIBIDA    

}

}


12 views0 comments

Recent Posts

See All

Interview in the Site App of The Day

Electronic Communication - Interview with the developer of a fantastic app : https://appoftheday.downloadastro.com/app/electronic-communication/ Did you have any prior development or coding experience

bottom of page