miércoles, 24 de febrero de 2016

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

Control de Velocidad  y de Giro de un Motor de manera remota mediante el uso de un Micro controlador PIC  haciendo uso de la modulación PWM



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    

     
     

}


}

jueves, 18 de febrero de 2016

Osciloscopio Digital con Micro Controladores PIC

Diseño de un Osciloscopio Digital Bluetooth mediante el uso de Micro Controladores PIC y el uso de dispositivos móviles Teléfonos y Tabletas como un osciloscopio Digital remoto que nos permite visualizar los procesos que realizamos con nuestro sistemas de micro controladores. Mediante este diseño transformamos nuestro teléfono y tableta electrónica en un osciloscopio digital.



El programa que requerimos instalar en nuestros dispositivos móviles es gratuito y lo podemos descargar desde:

OSCILOSCOPIO BLUETOOTH  GOOGLE PLAY:



OSCILOSCOPIO BLUETOOTH AMAZON:


Pueden descargar el cogido fuente para programar el PIC :


//#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock = 20M )
#use fast_io(c)
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)
#priority rda,timer1,ad
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84


char valor,car1='$',car2='#';
int sw=0;
char dato[30]="";
char mensajeTx [12];
float conversion,conv=0.00;
#int_rda
recibir()
{
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}
}

#INT_AD
ver()
{


}



void main ()

{

  //Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000001);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);

  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"Osciloscopio BTH");
 output_a(0xFF);
 setup_adc_ports(AN0_ANALOG);
 setup_adc(ADC_CLOCK_DIV_8);
 enable_interrupts(INT_AD);
 enable_interrupts(int_rda);
 enable_interrupts(global);
while(true)
{

set_adc_channel (0);
delay_us (10);
conversion=read_ADC();
conversion=conversion*0.0196;
delay_us (10);
sprintf(dato,"%c%1.2f%1.2f%c",car1,conversion,conv,car2);
puts(dato);
lcd_gotoxy(0,2);
 printf(lcd_putc,dato);
 delay_us(100);
 strcpy(dato,"");
}


}


sábado, 6 de febrero de 2016

Microcontroladores PIC Comunicación Bluetooth Bi direcional

Vídeo que nos enseña como realizar comunicaciones inalambricas  con los microcontroladores PIC mediante el uso de la tecnología  Bluetooth. En el vídeo se enseña el control del microcontroldor mediante el uso de dispositivos móviles .teléfonos y tabletas electrónicas.

Para el control del microconttolador deben descargar las aplicaciones:

RC Bluetooth Control desde Google PLay:



Desde Amazon:


Deben descargar la aplicación Chat Bluetooth:

Desde Google Play:


Desde Amazon:


En el siguiente  vídeo se explica como realizar la programación del microcontrolador PIC:



 El código para programar el PIC es el siguiente:


 //#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock = 20M )
#use fast_io(c)
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)
#priority rda,timer1,ad
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84


char valor;
int sw=0;
char dato[30]="PIC Rx=";
char mensajeTx [12];


void main ()

{

  Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000000);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);
 
  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"TX/RX Bluetooth");
 output_a(0xFF);
while(true)
{
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}

switch (valor)
{

case 'R':output_bit(PIN_A0,0);
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);

break;
case 'U':output_bit(PIN_A0,1);
output_bit(PIN_A1,0);
output_bit(PIN_A2,1);
break;
case 'L':output_bit(PIN_A0,1);
output_bit(PIN_A1,1);
output_bit(PIN_A2,0);
break;
case 'X':output_bit(PIN_A0,1);
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);
break;


}

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


}


}