Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/06/2016 #1

Avatar de gustavo

Atmega8 + Modulo Bluetooth HC-06
Hola comunidad, espero que esten muy bien! Compre un modulo Bluetooth para realizar algunos proyectos basicos que tengo en mente, y realizo el post para saber si podrian ayudarme. Cree una aplicacion con APP INVENTOR del MIT para probar el modulo mediante una comunicacion con ARDUINO UNO via bluetooth y funciona de maravillas!
Ahora, mi problema de comunicacion es cuando intento utilizar directamente AVR-STUDIO y APP INVENTOR.
Lei por algunos foros que se trataba de un problema de tiempos de comunicacion en el programa realizado en avr c, pero no pude resolverlo por mi cuenta y es por eso que recurro en ayuda de ustedes! Les dejo mi codigo hecho en AVR-STUDIO y espero sus opiniones. Desde ya, saludos y gracias!

Código PHP:
/*
 * Bluetooth.c
 *
 * Created: 16/06/2016
 *  Author: Gustavo
 */ 

/* Librerias */
#include <avr/io.h>
#include <util/delay.h>

/* Variables a Utilizar */
uint8_t dato_serial 0;

/* Función para inicializar USART */
void iniciar_usart(unsigned int baud)
{
    
/* Se establece la tasa de baudios con el valor ingresado a la funcion */
    
UBRRH = (unsigned char)(baud>>8);
    
UBRRL = (unsigned char)baud;
    
/* Se habilita la recepción y la transmisión de datos */
    
UCSRB = (1<<RXEN)|(1<<TXEN);
    
/* Se establece el formato de la trama: 8 bits de datos, 2 bits de parada, sin bits de paridad */
    
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

/* Función para recibir un caracter */
unsigned char recibirbyte_usart(void)
{
    
/* Espera a recibir datos */
    
while (!(UCSRA & (1<<RXC)));
    
/* Devuelve el dato leido */
    
return UDR;
}

int main(void)
{
    
// Inicializacion de USART a 9600 Baudios
    
iniciar_usart(104);
    
// PB5 como salida
    
DDRB = (1<<PB5);
    
// Limpiamos PORTB
    
PORTB 0x00;
    
// Retardo 200ms, para que el modulo bluetooth se inicie correctamente
    
_delay_ms(200);
    
    while(
1)
    {
        
// Almacenamos dato recibido por puerto serial en "dato_serial"
        
dato_serial recibirbyte_usart();
        
        
// Preguntamos si "dato_serial" es igual al caracter "a"
        
if (dato_serial == "a")
        {
            
// Si es correcto, encendemos el led
            
PORTB = (1<<PB5);
        }
        
// Preguntamos si "dato_serial" es igual al caracter "b"
        
if (dato_serial == "b")
        {
            
// Si es correcto, apagamos el led
            
PORTB = (0<<PB5);
        }
    }




EDITO PARA NO REALIZAR OTRO POST: Adjunto aplicacion para android y hex compilado con arduino para que vean que funciona perfectamente. Mi problema es el que planteo arriba.
22/06/2016 #2

Avatar de gustavo

Bueno, he podido solucionarlo! Contaba con dos problemas, uno era la configuracion de los fuses. Los cuales quedaron configurados de este modo:



Y el segundo problema es que el codigo requeria comillas simples(') en la comparacion y no dobles("), quedando de este modo:

Código PHP:
/*
 * Bluetooth.c
 *
 * Created: 16/06/2016
 *  Author: Gustavo
 */ 

/* Librerias */
#include <avr/io.h>
#include <util/delay.h>

/* Variables a Utilizar */
uint8_t dato_serial 0;

/* Función para inicializar USART */
void iniciar_usart(unsigned int baud)
{
    
/* Se establece la tasa de baudios con el valor ingresado a la funcion */
    
UBRRH = (unsigned char)(baud>>8);
    
UBRRL = (unsigned char)baud;
    
/* Se habilita la recepción y la transmisión de datos */
    
UCSRB = (1<<RXEN)|(1<<TXEN);
    
/* Se establece el formato de la trama: 8 bits de datos, 2 bits de parada, sin bits de paridad */
    
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

/* Función para recibir un caracter */
unsigned char recibirbyte_usart(void)
{
    
/* Espera a recibir datos */
    
while (!(UCSRA & (1<<RXC)));
    
/* Devuelve el dato leido */
    
return UDR;
}

int main(void)
{
    
// Inicializacion de USART a 9600 Baudios
    
iniciar_usart(104);
    
// PB5 como salida
    
DDRB = (1<<PB5);
    
// Limpiamos PORTB
    
PORTB 0x00;
    
// Retardo 200ms, para que el modulo bluetooth se inicie correctamente
    
_delay_ms(200);
    
    while(
1)
    {
        
// Almacenamos dato recibido por puerto serial en "dato_serial"
        
dato_serial recibirbyte_usart();
        
        
// Preguntamos si "dato_serial" es igual al caracter "a"
        
if (dato_serial == 'a')
        {
            
// Si es correcto, encendemos el led
            
PORTB = (1<<PB5);
        }
        
// Preguntamos si "dato_serial" es igual al caracter "b"
        
if (dato_serial == 'b')
        {
            
// Si es correcto, apagamos el led
            
PORTB = (0<<PB5);
        }
    }

y funcionando a la perfeccion!
Espero les sirva a ustedes, les mando un saludo grande!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.