Witam!
Mam problem. Podłączyłem atmege32 z BTM222 i na komputerze używał programu Realterm do obsługi portu szeregowego.
Komputer się ładnie podłączył do BTM-a, to znaczy nawiązał połaczenie wpisałem kod 1234 i w programie Realterm jest napisane że się połączył. Chyba jest problem dalej, to znacyz z USART-em. Gdy wysyłam coś z komputera to uC tego nie odbiera i na odwrót, Ale nie wiem co jest źle:(
Ustawiłem, Usarta tak jak jest w dokumentacji BTM-a:
Baud rate: 19200 bps
z Data bit: 8
z Parity: none
z Stop bit: 1
Tu przedstawiam mój program:
Dodałem do portu PIO(6) (w BTM-ie) diode (zobaczyłem ją w jakimś schemacie na necie, nie wiem co ona dokładnie oznacza:() i ona cały czas świeci, aż program Realterm się z nią nie połączy potem gaśnie. Nie wiem czy ma to coś wspólnego z problemem, ale mówię o takim fakcie.
Proszę o w miarę szybką pomoc. Przede wszystkim chciałbym znaleźć jakiś sposób by się dowiedzieć czy dobrze ustawiłem połączenie USART.
Z góry dziękuję za pomoc!!!
Mam problem. Podłączyłem atmege32 z BTM222 i na komputerze używał programu Realterm do obsługi portu szeregowego.
Komputer się ładnie podłączył do BTM-a, to znaczy nawiązał połaczenie wpisałem kod 1234 i w programie Realterm jest napisane że się połączył. Chyba jest problem dalej, to znacyz z USART-em. Gdy wysyłam coś z komputera to uC tego nie odbiera i na odwrót, Ale nie wiem co jest źle:(
Ustawiłem, Usarta tak jak jest w dokumentacji BTM-a:
Baud rate: 19200 bps
z Data bit: 8
z Parity: none
z Stop bit: 1
Tu przedstawiam mój program:
#include <avr/io.h>
#include <util/delay.h>
#define BAUD 19200
#define MYUBRR F_CPU/16/BAUD-1
/* Usypianie */
void delay_ms(int ms)
{
volatile long unsigned int i;
for(i=0;i<ms;i++)
_delay_ms(1);
}
/* Inicjalizacja bloku USART */
void USART_Init( unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>8); // Ustawienie predkosci
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN); // Wlaczenie nadajnika i odbiornika
UCSRC = (1<<URSEL)|(3<<UCSZ0); // Ustawienie ramki 8bit, 1bit stopu, brak bitu parzytosciu
}
/* Transmisja przez bluetooth */
void USART_Transmit( uint8_t data )
{
while ( !( UCSRA & (1<<UDRE)) ) // Czekanie na wolny bufor zapisu
;
UDR = data; // Przeslanie danych
}
/* Odczyt przez bluetooth */
uint8_t USART_Receive( void )
{
while ( !(UCSRA & (1<<RXC)) ) // Czekanie na dane do odczytu
;
return UDR; // Zwrot odczytanych danych
}
/* Inicjalizacja BTM-222 przez komendy AT */
void BTM_Init()
{
USART_Transmit('A'); // Przywrocenie wartosci domyslnych
delay_ms(25);
USART_Transmit('T');
delay_ms(25);
USART_Transmit('P');
delay_ms(25);
USART_Transmit('0');
delay_ms(25);
USART_Transmit(0x0D);
delay_ms(25);
USART_Transmit('A'); // Wylaczenie echa
delay_ms(25);
USART_Transmit('T');
delay_ms(25);
USART_Transmit('E');
delay_ms(25);
USART_Transmit('0');
delay_ms(25);
USART_Transmit(0x0D);
delay_ms(25);
USART_Transmit('A'); // Wylaczenie kontroli przeplywu
delay_ms(5);
USART_Transmit('T');
delay_ms(5);
USART_Transmit('C');
delay_ms(5);
USART_Transmit('0');
delay_ms(5);
USART_Transmit(0x0D);
delay_ms(25);
USART_Transmit('A'); // Wylaczenie kodow wynikowych
delay_ms(5);
USART_Transmit('T');
delay_ms(5);
USART_Transmit('Q');
delay_ms(5);
USART_Transmit('1');
delay_ms(5);
USART_Transmit(0x0D);
delay_ms(25);
}
int main(void)
{
USART_Init(MYUBRR); // Inicjalizacja USART
BTM_Init(); // Inicjalizacja BTM
DDRB|=_BV(PB2); //wyjście dioda zielona
DDRB|=_BV(PB1); //wyjście dioda żółta
PORTB |= _BV(PORTB1); //zgaszenie diody żółtej
PORTB &= ~_BV(PORTB2); //zapalenie diody zielonej
DDRC &= ~_BV(PC0); //wejście przycisk S3
PORTC|=_BV(PC0); //podciągnięcie wejścia do góry
while(1)
{
//PORTB |= _BV(PORTB1); //zgaszenie diody żółtej
if(USART_Receive() == 'B') {
PORTB &= ~_BV(PORTB1); //zapalenie diody żółtej
}
//USART_Transmit('B');
delay_ms(25);
//TODO:: Please write your application code
}
}Dodałem do portu PIO(6) (w BTM-ie) diode (zobaczyłem ją w jakimś schemacie na necie, nie wiem co ona dokładnie oznacza:() i ona cały czas świeci, aż program Realterm się z nią nie połączy potem gaśnie. Nie wiem czy ma to coś wspólnego z problemem, ale mówię o takim fakcie.
Proszę o w miarę szybką pomoc. Przede wszystkim chciałbym znaleźć jakiś sposób by się dowiedzieć czy dobrze ustawiłem połączenie USART.
Z góry dziękuję za pomoc!!!
