robo_tom_24
18.05.2012, 23:01
Hallo
Ich hab jetzt mein BCA8-BTM mit BTM222 Modul endlich bekommen, nur schaff ich es nicht eine Verbindung zwischen dem BT Modul und dem AVR aufzubauen. Zwischen BTM222 und USB-BT Adapter am PC schaff ich es, erkenntlich am helleren Leuchten einer LED.
Der Code:
#define BAUD 19200 // Baudrate
#define F_CPU 8000000
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate groesser 1% und damit zu hoch!
#endif
//-------------- INCLUDES
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void USART_Init( void )
{
/* Set baud rate */
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 1stop bit */
//UCSRC = (1<<URSEL)|(3<<UCSZ0);
UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01); // 1 Stopp Bit
UCSR0C &= ~(1<<UMSEL00)&(1<<UMSEL01);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}
int main(void)
{
DDRD |= 1<<PIND0;
PORTD |= 1<<PIND0;
USART_Init(); // USART einstellen
_delay_ms(250);
PORTD &= ~(1<<PIND0); //LED aus
USART_Transmit('O');
USART_Transmit('N');
_delay_ms(1000);
PORTD |= 1<<PIND0; //LED ein
while(1)
{
USART_Transmit('x');
}
}//end main
Hardware:
-) ATmega328P
-) BTM222
-) Belkin USB-BT-Adapter
Kann es sein dass ich "zu schnell" Zeichen versende? Oder gibt es für das Modul eine Art Initialisierung (AT Befehl senden o.ä.)?
Ich hab jetzt mein BCA8-BTM mit BTM222 Modul endlich bekommen, nur schaff ich es nicht eine Verbindung zwischen dem BT Modul und dem AVR aufzubauen. Zwischen BTM222 und USB-BT Adapter am PC schaff ich es, erkenntlich am helleren Leuchten einer LED.
Der Code:
#define BAUD 19200 // Baudrate
#define F_CPU 8000000
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate groesser 1% und damit zu hoch!
#endif
//-------------- INCLUDES
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void USART_Init( void )
{
/* Set baud rate */
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 1stop bit */
//UCSRC = (1<<URSEL)|(3<<UCSZ0);
UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01); // 1 Stopp Bit
UCSR0C &= ~(1<<UMSEL00)&(1<<UMSEL01);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}
int main(void)
{
DDRD |= 1<<PIND0;
PORTD |= 1<<PIND0;
USART_Init(); // USART einstellen
_delay_ms(250);
PORTD &= ~(1<<PIND0); //LED aus
USART_Transmit('O');
USART_Transmit('N');
_delay_ms(1000);
PORTD |= 1<<PIND0; //LED ein
while(1)
{
USART_Transmit('x');
}
}//end main
Hardware:
-) ATmega328P
-) BTM222
-) Belkin USB-BT-Adapter
Kann es sein dass ich "zu schnell" Zeichen versende? Oder gibt es für das Modul eine Art Initialisierung (AT Befehl senden o.ä.)?