viernes, 26 de febrero de 2016
jueves, 25 de febrero de 2016
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
}
}
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
}
}
martes, 23 de febrero de 2016
lunes, 22 de febrero de 2016
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,"");
}
}
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;
}
}
}
Para el control del microconttolador deben descargar las aplicaciones:
RC Bluetooth Control desde Google PLay:
Desde Amazon:
Desde Google Play:
En el siguiente vídeo se explica como realizar la programación del microcontrolador 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;
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;
}
}
}
Suscribirse a:
Entradas (Atom)