informe del proyecto de microcontroladores
TRANSCRIPT
Universidad Nacional del Callao Ingeniería Electrónica
UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERÍA ELECTRICA Y ELECTRÓNICA
“Informe del Proyecto”
Asignatura: Microcontroladores
Profesor: Ing. Zenón Cucho Mendoza
Alumnos: Cesar Guzmán Alvitrez 090609k Pamela Alvarado Churano 100704k
Microcontroladores ~ 1 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
Informe del Proyecto de Microcontroladores
(Carrito Salvavidas)
1. Objetivo
Obtener una base del atmega8 para obtener proyectos aplicativos hacia la rama de control y automatización de la electrónica en complicidad con la robotica.
Usar la comunicación serial USART del atmega8 para comunicarnos inalámbricamente con el modulo bluetooh esclavo en lugar de usar un max232.
Usar el PWM del atmega8 para controlar la velocidad de los motores y asi poder ahorrar energía en el transporte.
Usar un LCD de 16x2 para escribir mensajes de texto hacia un lugar donde no llega señal telefónica y enviarlo por bluetooh desde una tablet hacia el LCD 16x2.
2. Descripción del Proyecto:
El proyecto está dividida en 2 partes:
a) Control de un carrito
En el control del carrito usamos la comunicación serial USART para comunicarnos con el exterior mediante el modulo bluetooh esclavo HC-06.
Configuramos el USART a 9600bps, 8 bits de datos, 1 bit de parada, paridad ninguno.
Usamos el reloj interno del atmega8 y lo configuramos su frecuencia de trabajo a 8MHz.
También usamos el PWM para controlar la velocidad a la que va el carrito y así no malgastar la batería.
Usamos también las interrupciones del atmega8 para habilitar la comunicación serial mediante caracteres ASCCI y asi facilitar la comunicación serial entre el atmega8 y la tablet.
Microcontroladores ~ 2 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
El vector de las interrupciones que usamos para este proyecto es el “USART_RXC_vect”.
Aca usaremos los botones de la aplicación “Bluetooh Serial Controller”.
A continuación la foto de la aplicación y sus botones:
b) Comunicación de un lcd
Configuramos el USART a 9600bps, 8 bits de datos, 1 bit de parada, paridad ninguno.
Usamos el reloj interno del atmega8 y lo configuramos su frecuencia de trabajo a 8MHz.
En la comunicación de un LCD usaremos las librerías para inicializar el LCD y configurar el LCD como comunicación serial.
Mediante una aplicación llamada “Bluetooth Serial Controller” configuraremos los botones que usaremos en el proyecto pero a la vez también tiene un hyperterminal que nos ayudaran mandar códigos ASCCI y asi comunicarnos con el LCD.
Al mandar un 1 como código ASCCI en el hyperterminal mandaremos al carrito velocidad 1 pero a la vez también mandara el modo 1 del lcd, eso
Microcontroladores ~ 3 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
quiere decir que al poner modo 1 al lcd significa que se cumplirá lo siguiente:
Si pones la letra “a” en el hyperterminal saldrá en la pantalla LCD la palabra “avanzar”.
Si pones la letra “r” en el hyperterminal saldrá en la pantalla LCD la palabra “retroceder”.
Si pones la letra “i” en el hyperterminal saldrá en la pantalla LCD la palabra “izquierda”.
Si pones la letra “d” en el hyperterminal saldrá en la pantalla LCD la palabra “derecha”.
Pero eso no es todo lo que puedes hacer en el LCD ya que aparte de que relaciona el carrito con el LCD también puedes mandar mensajes escribiendo en el hyperterminal, es decir lo que escribas en la pantalla del hyperterminal de la aplicación en android también saldrá en el LCD.
En la grafica mostramos el lugar de la aplicación en donde escribimos los mensajes:
(En el anexo dejaremos el link donde se descarga la aplicación)
3. Circuito Esquemático:
Microcontroladores ~ 4 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
Parte 1:
Circuito esquemático del carrito controlado mediante una tablet con sistema operativo android.
Código comentado en C:
#include <avr/io.h> //Declaramos nuestras librerias#include <avr/interrupt.h>//a usar
void configPuertos(void);void stop(void);void avanzar(void);void retroceder(void);void gHorario(void);void gAntihorario(void);void configPWM(void);void configUSART(void);
volatile char datoEnvio;// declaramos variablevolatile char saveDatos[8];//del tipo charvolatile char saveVel[8];
int main(void){
configPuertos();//configuramos puertos
Microcontroladores ~ 5 ~ Ing. Zenón Cucho Mendoza
PB0/ICP114
PB1/OC1A15
PB2/SS/OC1B16
PB3/MOSI/OC217
PB4/MISO18
PB5/SCK19
PB6/TOSC1/XTAL19
PB7/TOSC2/XTAL210
PC6/RESET1
PD0/RXD2
PD1/TXD3
PD2/INT04
PD3/INT15
PD4/T0/XCK6
PD5/T111
PD6/AIN012
PD7/AIN113
PC0/ADC023
PC1/ADC124
PC2/ADC225
PC3/ADC326
PC4/ADC4/SDA27
PC5/ADC5/SCL28
AREF21
AVCC20
U1
ATMEGA8
IN12
OUT13
OUT26
OUT311
OUT414
IN27
IN310
IN415
EN11
EN29
VS
8
VSS
16
GND GND
U2
L293D
+5v +9v
ERROR
TXD3
RXD2
CTS8
RTS7
DSR6
DTR4
DCD1
RI9
P1
COMPIM
(+)
Universidad Nacional del Callao Ingeniería Electrónica
configUSART();//configuramos el USARTconfigPWM();//configuramos el PWMsei();//habilitacion de las interrupcioneswhile(1){};//bucle infinito
}
void configPuertos(void){DDRC=0xFF;//configuramos a todo el puerto c como salidaDDRB|=(1<<DDB1|1<<DDB2|1<<DDB3|1<<DDB4|1<<DDB5|
1<<DDB6);
DDRD|=(1<<DDD2|1<<DDD3|1<<DDD4|1<<DDD5|1<<DDD6);//CONFIGURAMOS COMO SALIDA AL DD2,DD3,DD4
//configuramos a los puertoss 1,2,3,4,5,6 como salidaPORTB&=~(1<<PB3);//configuramos a pb3 como 0PORTB&=~(1<<PB4);//configuramos a pb4 como 0
PORTB&=~(1<<PB5);//configuramos a pb5 como 0PORTB&=~(1<<PB6);//configuramos a pb6 como 0PORTC=0x3f;//configuramos al puerto c inicialmente para que
//nos muestre incialmente el cero
}void stop(void){
PORTB&=~(1<<PB3);//cuando inicie pb3=0PORTB&=~(1<<PB4);//cuando inicie pb4=0
PORTB&=~(1<<PB5);//cuando inicie pb5=0PORTB&=~(1<<PB6);//cuando inicie pb6=0
}void avanzar(void){// todo este codigopara avanzar
PORTB|=(1<<PB3); //pb3 como 1PORTB&=~(1<<PB4);//pb4 como 0
PORTB|=(1<<PB5);// pb5 como 1PORTB&=~(1<<PB6);//pb6 como 0
PORTD|=(1<<PD3);}void retroceder(void){// todo este codigo para retroceder
PORTB|=(1<<PB4);// pb4 como 1
Microcontroladores ~ 6 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
PORTB&=~(1<<PB3);//pb3 como 0
PORTB|=(1<<PB6);//pb6 como 1PORTB&=~(1<<PB5);//pb5 como 0
PORTD|=(1<<PD4);}void gHorario(void){//para hacer un giro horario
PORTB|=(1<<PB3);// pb3 como 1PORTB&=~(1<<PB4);//pb4 como 0
PORTB|=(1<<PB6);// pb6 como 1PORTB&=~(1<<PB5);//pb5 como 0
PORTD|=(1<<PD5);}void gAntihorario(void){// para hacer un giro horario
PORTB|=(1<<PB4);// pb4 como 1PORTB&=~(1<<PB3);//pb3 como 0
PORTB|=(1<<PB5);// pb5 como 1PORTB&=~(1<<PB6);//pb6 como 0
PORTD|=(1<<PD6);}void configPWM(void){//configuramos al pwm en modo
//no invertido modo 14//wgm13,wgm12,wgm11,wgm10...1110//salida en OC1A, OC1B entonces COM1A1, COM1B1 = 11//preescalador 8 CS12,CS11,CSS10 =...010TCCR1A|=(1<<COM1A1|1<<COM1B1|1<<WGM11);TCCR1B|=(1<<WGM13|1<<WGM12|1<<CS11);ICR1=49;//para una frecuencia de 20khz ICR1=(T*f/prescalador)-1OCR1A=35;OCR1B=35;PORTC=0X4F;PORTD=4;
}
void configUSART(void){UCSRB|=(1<<RXCIE|1<<TXCIE|1<<RXEN|1<<TXEN);
Microcontroladores ~ 7 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
UCSRC|=(1<<URSEL|1<<UCSZ1|1<<UCSZ0);UBRRH|=(0<<URSEL);UBRRL=51;//9600 BAUDIOS PARA 8MHz
}
ISR(USART_RXC_vect){datoEnvio=UDR;
switch(datoEnvio){case '1':{
PORTC=6;PORTD=0<<DDD2;OCR1A=21;//dutty de 45%OCR1B=21;//dutty de 45%
};break;case '2':{
PORTC=0X5B;PORTD=4;OCR1A=28;//dutty de 59%OCR1B=28;//dutty de 59%
};break;case '3':{
PORTC=0X4F;PORTD=4;OCR1A=35;//dutty de 73%OCR1B=35;//dutty de 73%
};break;case '4':{
PORTC=0X66;PORTD=4;OCR1A=42;//dutty de 87%OCR1B=42;//dutty de 87%
};break;case '5':{ PORTC=0X6D;
PORTD=4;OCR1A=48;//dutty de 100%OCR1B=48;//dutty de 100%
Microcontroladores ~ 8 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
};break;case 'a':{
avanzar();
};break;case 'r':{ retroceder();
};break;case 'i':{ gHorario();
};break;case 'd':{ gAntihorario();
};break;//**********************************
//**********************************case 'P':{ };break;//*************************************
case 'S':{ stop();}break; //APAGADOS
default :{ }break; //APAGADOS}
}
Lista de Componentes con sus precios:
2 Motores DC 18v 15 soles c/u1 Modulo Bluetooh HC-06 esclavo 32 solesCables para protoboard 2 solesEspadines machos 5 soles1 L293D 3.50 soles2 Baterias 9v 5 soles c/u3 Pilas AA 3.50 soles1 Atmega8 8 soles1 protoboard 10 soles2 Llantas 3 solesPlaca de Vidrio 5 solesPegamento 2 soles1 Rueda Loca 1.50 soles
Microcontroladores ~ 9 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
4 tuercas con soporte c/u 1 sol Parte 2:
Control del LCD mediante el modulo bluetooh/android tab 2
Circuito Esquematico del control del LCD con comunicación serial.
Microcontroladores ~ 10 ~ Ing. Zenón Cucho Mendoza
PB0/ICP114
PB1/OC1A15
PB2/SS/OC1B16
PB3/MOSI/OC217
PB4/MISO18
PB5/SCK19
PB6/TOSC1/XTAL19
PB7/TOSC2/XTAL210
PC6/RESET1
PD0/RXD2
PD1/TXD3
PD2/INT04
PD3/INT15
PD4/T0/XCK6
PD5/T111
PD6/AIN012
PD7/AIN113
PC0/ADC023
PC1/ADC124
PC2/ADC225
PC3/ADC326
PC4/ADC4/SDA27
PC5/ADC5/SCL28
AREF21
AVCC20
U1
ATMEGA8
D7
14D
613
D5
12D
411
D3
10D
29
D1
8D
07
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD1LM016L
0.00
RXD
RTS
TXD
CTS
Universidad Nacional del Callao Ingeniería Electrónica
Código comentado en C:
#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <stdbool.h>#include "lcdnear.h"
void conPuerto();//configurando puertovoid conUsart();//configura comunicacion serialvoid initLCD();//configura lcd
volatile char b[]={};volatile char dato;uint8_t i=0,l=0,j=0;volatile uint8_t modo = 0;
int main(void)
{conPuerto();conUsart();initLCD();sei();
while(1) { //TODO:: Please write your application code }
}void conPuerto(){
DDRB|=(1<<DDB0|1<<DDB1|1<<DDB2|1<<DDB3|1<<DDB4|1<<DDB5|1<<DDB6|1<<DDB7);//SALIDA;}
void conUsart(){UCSRB|=(1<<RXCIE|0<<TXCIE|1<<RXEN|1<<TXEN);
Microcontroladores ~ 11 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
UCSRC|=(1<<URSEL|1<<UCSZ1|1<<UCSZ0);UBRRL=51;//9600 BAUDIOS PARA 8MHz
}void enviarUSART(char dat){
while(bit_is_clear(UCSRA, UDRE));UDR = dat;
}
void initLCD(){
lcd_init(LCD_DISP_ON);lcd_clrscr();lcd_gotoxy(0,0);//(x,y) empieca arriba ([0,0)-(15,0)]-[(1,0)-
(1,15)]------------->en ee x: (x,0);en ee y: (1,y);lcd_puts("INGRESE DATOS:");
//lcd_puts(" ");}ISR(USART_RXC_vect){
dato=UDR;enviarUSART(dato);if(dato == '1'){ modo = 1; }else if(dato == '0'){ modo = 0; i=0; j=0; }
if(modo == 0){
if ( (j==0)&&(i == 0) ){
lcd_clrscr();}if( (dato != '0') && (dato != '1') ){
lcd_gotoxy(i++,j); // UBICACION DE LA COORDENADA DE LA LCD
lcd_putc(dato); // ENVIA CARACTERES DATO
Microcontroladores ~ 12 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
}if(i == 15){ i = 0;
j++;if(j == 2){ j = 0; }
}}else if(modo == 1){
if(dato == 'a'){
lcd_clrscr();lcd_gotoxy(0,0);lcd_puts("avanzar");
}if(dato == 'r'){
lcd_clrscr();lcd_gotoxy(0,0);lcd_puts("retroceder");
}if(dato == 'i'){
lcd_clrscr();lcd_gotoxy(0,0);lcd_puts("izquierda");
}if(dato == 'd'){
lcd_clrscr();lcd_gotoxy(0,0);lcd_puts("derecha");
}}
}
Microcontroladores ~ 13 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
Lista de Componentes con sus precios:
1 LCD de 16x2 bits 15 solesCables para protoboard 2 soles1 Atmega8 8 soles1 protoboard 10 soles
4. Diagrama de Flujo:
Parte 1: (la del carrito manejado por bluetooh)
RSI de interrupción interna
Microcontroladores ~ 14 ~ Ing. Zenón Cucho Mendoza
INICIO
Configuracion de los puertos
Configuración de USART
Configuracion del PWM
Habilitamos interrupciones
FIN
Interrupciones
Dato =puntero
Dato envio
Fin
Universidad Nacional del Callao Ingeniería Electrónica
Parte 2: (La del LCD manejado por bluetooh)
Microcontroladores ~ 15 ~ Ing. Zenón Cucho Mendoza
inicio
Configuracion de LCD
Mostramos en LCD
FIN
inicio
Dato=(puntero)
Incremento puntero
dato
Envía dato
Modo=
Control del motor
Dato=puntero
A=avanzarR=retrocederI=izquierdaD=derecha
Enviando dato
no
si
Universidad Nacional del Callao Ingeniería Electrónica
5. Observaciones:
Uno de los problemas que tuvimos al momento de hacer el proyecto fue la configuración del reloj interno del atmega8 de 1Mhz que viene ya configurado en el atmega8 a 8Mhz.
Lo solucionamos usando el software del quemador de atmega8 llamado USBfast que nos permite configurar los fuses low del CLK interno del atmega8 de una manera fácil y rápida en comparación a otros quemadores de atmega8 que conocemos.
Otro de los problemas que tuvimos fue la configuración del módulo bluetooh esclavo para sincronizar la tablet con el módulo bluetooh esclavo HC-06.
Lo solucionamos usando el panel de control de la PC usando los siguientes pasos:
1. Alimentamos el módulo bluetooh con 5v.2. Entramos a Panel de Control
Microcontroladores ~ 16 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
3. Hacemos click en Agregar Dispositivos
4. Hacemos click en buscar
5. Luego de que encuentre la PC al dispositivo bluetooh esclavo hacemos click en el icono siguiente:
Microcontroladores ~ 17 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
En este caso ya lo configure con el nombre CESAR ya que al comienzo estuvo con el nombre HC-06
6. Luego de hacer click en el icono nos saldrá la siguiente ventana.
7. Luego hacemos click en la opción hardware y después a propiedades para configurar el módulo bluetooh.
Microcontroladores ~ 18 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
8. Luego hacemos click en configuración de puerto y ahí configuramos la velocidad del USART, los bits de datos, los bits de parada, paridad, control de flujo.
Microcontroladores ~ 19 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
6. Conclusiones:
Parte 1: La primera parte del proyecto le toco a “Guzmán Alvitrez Cesar Augusto” , desde la implementación del proyecto y compras de todos los componentes hasta la programación del carrito y de la aplicación en android.
En esta parte del proyecto hemos solucionado todos los problemas de la configuración del bluetooh y configuración de la aplicación en android.
En esta parte del proyecto también hemos descubierto que al conectar el modulo bluetooh con el atmega8 tiene que ir de la siguiente manera:
TX del atmega8 con el RX del modulo bluetoohRX del atmega8 con el TX del modulo bluetooh
Pero en el caso de la simulación en Proteus es de la siguiente manera:
RX del atmega8 con el RX del modulo bluetoohTX del atmega8 con el TX del modulo bluetooh
Parte 2:La segunda parte del proyecto le toco a “Alvarado Churano Pamela”, desde la implementación del proyecto hasta la programación del LCD.
En esta parte del proyecto hemos modificado algunas librerías para poder aplicarlo al proyecto de manera que nos ayude a programar mas fácilmente el LCD.
7. Anexos:
https://play.google.com/store/apps/details?id=mBluetoothSerialController.nomalhttp://blog.make-a-tronik.com/tutorial-modulo-bluetooth-hc-06-parte-1/http://curiosidadesford.blogspot.mx/2011/01/modulo-bluetooth-bluetooth-module.htmlhttps://github.com/AlfredoPrades/Arduino/blob/master/BluetoothServo/BluetoothServo.ino#L166
Microcontroladores ~ 20 ~ Ing. Zenón Cucho Mendoza
Universidad Nacional del Callao Ingeniería Electrónica
http://www.youtube.com/watch?v=CHr0w_R9tzwhttp://electgpl.blogspot.com.ar/2013/01/modulo-bluetooth-hc-06.htmlhttp://robots-argentina.com.ar/Comunicacion_InterfazRS232.htmhttp://murlidharshenoy.wordpress.com/2011/10/26/adding-bluetooth-to-your-microcontroller-projects/
Microcontroladores ~ 21 ~ Ing. Zenón Cucho Mendoza