Skocz do zawartości

[Test/recenzja] [Komunikacja] Bluetooth KAmodBTM222


Elvis

Pomocna odpowiedź

UART_TX -> TXD

UART_RX -> RXD

Nie jestem pewien, bo nie chce mi się wczytywać, ale chyba tx procka powinno być połączone z rx br, i analogicznie rx z tx, bo inaczej nasłuchujesz linii nasłuchującej i nadajesz do linii nadającej.

Pozdro, Wesołych świąt!!

Link do komentarza
Share on other sites

Dzięki za tak szybką odpowiedź 🙂 jutro spróbuje podłączyć odwrotnie 😉

[ Dodano: 24-12-2010, 21:19 ]

jednak teraz sprawdziłem i mam podłączoną Atmegę z BTM właśnie w taki sposób:

UART_TX -> RXD

UART_RX -> TXD

Zatem co może być nie tak? Dodam jeszcze że moduł bluetooth jest również widoczny przez telefony i udaje się te urządzenia sparować po podaniu kodu pin, jednak nic mi to nie daje :/

Link do komentarza
Share on other sites

Podłączenie musi być skrosowane, czyli:

UART_TX -> BTM_RX

UART_RX <- BTM_TX

Natomiast jak chodzi o putty, to przy standardowych ustawieniach nie pojawia się tzw. echo. Czyli gdy naciskasz klawisze, ich kody są wysyłane przez port COM, ale znaki nie są wyświetlane na ekranie. Dopiero jeśli po drugiej stronie łącza zostanie wysłany znak, pojawi się on na ekranie.

Więc jeśli program na AVR nie odsyła tego co dostał, nie widać wpisywanych znaków.

Radziłbym na początek napisać program na AVR, który będzie w pętli wysyłał komunikat. Jeśli uda się go przesłać do PC i wyświetlić w ekranie terminala, to już połowa sukcesu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jeśli nie otwiera się okno terminala, to coś jest nie tak z konfiguracją połączenia. Kod pin podałeś poprawnie?

Atmega wysyła dane standardowo, przez UART.

Przy okazji - jeśli używasz modułu BTM222, to zakładam, że pamiętasz o konwersji napięć 5V<->3.3V?

Link do komentarza
Share on other sites

Możesz wykorzystać program BTRobot.zip z artykułu.

W pętli głównej kod wysyłający jest zakomentowany, czyli pętla główna powinna wyglądać tak:

while (1) {
	sprintf(buf, "Hello world! %d\r\n", ++counter);
	KAmodBT_SendBuffer(buf);
	_delay_ms(100);
}
  • Lubię! 1
Link do komentarza
Share on other sites

Jest progress, ale podczas łączenia (tym razem przez program hercules_3-2-3) moduł bluetooth wysyła krzaki.

.

Łączę atmegę z BTM222 w ten sposób:

BTM222 na schemacie:

1. GND

2. UART_RX

3. UART_TX

4. VCC

Przerobiłem program testowy do atmegi8 - wrzuciłem ważniejsze fragmenty do jednego pliku - nie wiem czemu, ale nie chciał kompilowac gdy bylo w kilku plikach.

Jednak nie wiem o co chodzi z definiowana stala BT_USE_nRES która jest na porcie B używaną podczas inicjalizacji KAmod.


#include <avr/io.h>
#include <avr/interrupt.h> 
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>

#define F_CPU 4000000UL  

//MODUŁ BT.c////////////

#define BT_UART_DELAY 15
#define USART_BAUD 19200ul
#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4))-1)


///////kamod.h//////////////
#define BT_ERR			0
#define BT_OK			1

#undef BT_USE_nRES

#ifdef BT_USE_nRES
#define BT_nRES_DIR		DDRB
#define BT_nRES_PORT 	PORTB
#define BT_nRES_PIN		PB2
#endif // BT_USE_nRES

int KAmodBT_Initialize();
int KAmodBT_SetName(char * Name);
int KAmodBT_EnterATMode();
int KAmodBT_GetName(char * Name);
int KAmodBT_GetPin(char * Name);

////////////kamod.h end//////

//*******************************
// USART functions

void USART_vInit(void)

{
UBRRH = (uint8_t)(USART_UBBR_VALUE>>8);
UBRRL = (uint8_t)USART_UBBR_VALUE;

UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

UCSRB = (1<<RXEN)|(1<<TXEN);
}


void USART_vSendByte(uint8_t u8Data)

{
while((UCSRA&(1<<UDRE)) == 0);
UDR = u8Data;
}


uint8_t USART_vReceiveByte()

{
while((UCSRA&(1<<RXC)) == 0);
return UDR;
}



// USART_vSendBuffer sends string with delays of del ms between characters
void USART_vSendBuffer(char * buffer, int del)
{
int i = 0;
while(buffer[i]!=0) { USART_vSendByte(buffer[i]); _delay_ms(del); i++; }
}

// USART_vReceiveBuffer gets string with delays of del ms between characters
void USART_vReceiveBuffer(char * buffer, int del)
{
int i = 0;
while (1)
{
	buffer[i] = USART_vReceiveByte();
	if ((buffer[i]=='\r') | (buffer[i]=='\n')) 
	{
		buffer[i]=0;
		return;
	}
	_delay_ms(del);
	i++;
}
}

//************************************



//************************************
// Functions for KAmodBTM222
//************************************

// Initialization of communication interface (UART + module's reset)
int KAmodBT_Initialize()
{
#ifdef BT_USE_nRES
// Configure nRES 
BT_nRES_DIR = BT_nRES_DIR | (1 << BT_nRES_PIN);
BT_nRES_PORT |= (1 << BT_nRES_PIN);
#endif // BT_USE_nRES

// Initialize USART
USART_vInit();

return BT_OK;	
}


// Function for enabling module's AT mode and some more
int KAmodBT_EnterATMode()
{
char buf[32];

// Send +++ for AT mode enabling
USART_vSendBuffer("+++\r", 50);
USART_vReceiveBuffer(buf, BT_UART_DELAY);


//Disable echo, it speeds up communication, because, you don't have to wait for echo
USART_vSendBuffer("ATE0\r", 50);
USART_vReceiveBuffer(buf, BT_UART_DELAY);

if (strcmp(buf, "OK")==0) return BT_OK; else return BT_ERR;
}

/*
void KAmodBT_RestoreDefaults()
{
USART_vSendBuffer("ATZ0\r", BT_UART_DELAY);
}
*/

/*
void KAmodBT_ExitATMode()
{
USART_vSendBuffer("ATE1\r", BT_UART_DELAY);
}
*/


// KAmodBT_SetName sets module's name
int KAmodBT_SetName(char * Name)
{
char buf[32];

sprintf(buf, "ATN=%s\r", Name);
USART_vSendBuffer(buf, BT_UART_DELAY);
USART_vReceiveBuffer(buf, BT_UART_DELAY);

if (strcmp(buf, "OK")==0) return BT_OK; else return BT_ERR;
}


// KAmodBT_GetName reads module's name
int KAmodBT_GetName(char * Name)
{
char resBuffer[16];
USART_vSendBuffer("ATN?\r", BT_UART_DELAY);
USART_vReceiveBuffer(Name, 0);
USART_vReceiveBuffer(Name, 0);
USART_vReceiveBuffer(resBuffer, 0);
return BT_OK;
}


// KAmodBT_GetPin reads PIN (that you need to connect module to another device)
int KAmodBT_GetPin(char * Name)
{
char resBuffer[16];
USART_vSendBuffer("ATP?\r", BT_UART_DELAY);
USART_vReceiveBuffer(Name, 0);
USART_vReceiveBuffer(Name, 0);
USART_vReceiveBuffer(resBuffer, 0);
return BT_OK;
}


// Reset module function
void KAmodBT_Reset()
{
#ifdef BT_USE_nRES
BT_nRES_PORT &= !(1 << BT_nRES_PIN);
_delay_ms(50);
BT_nRES_PORT |= (1 << BT_nRES_PIN);
_delay_ms(50);
#endif // BT_USE_nRES
}


// Sends string to module
void KAmodBT_SendBuffer(char * buffer)
{
//USART_vSendBuffer(buffer, BT_UART_DELAY);
USART_vSendBuffer(buffer, 0);
}

/////////kamod.c end//////////////



//DIODY//
void leds_set(){
zapal1();
zapal2();
}

void leds_clr(){
zgas1();
zgas2();
}


void zapal1(){ PORTB = 0x01;} 		//dioda LED1 swieci PB0 = 1 
void zapal2() {PORTD = 0x80;}		//dioda LED2 świeci PD7 = 1 
void zgas1() {PORTB = 0x0;};
void zgas2() {PORTD = 0;};



int main()
{
int i;
uint8_t byte;
uint16_t counter = 0;
char buf[32];



for (i=0;i<3;i++) {
	leds_set();
	_delay_ms(250);
	leds_clr();
	_delay_ms(250);
}


// Initialize communication
if (KAmodBT_Initialize()!=BT_OK)
{
	zapal1();
	while(1);
}


while (1) {
	sprintf(buf, "Hello world! %d\r\n", ++counter);
	KAmodBT_SendBuffer(buf);
	for (i=0;i<10;i++) {
		if (UCSRA&(1<<RXC)) {
			byte = USART_vReceiveByte();

			switch (byte) {
			case '0':
				leds_clr();
				break;
			case '1':
				leds_clr();
				zapal1();
				break;
			case '2':
				leds_clr();
				zapal2();
				break;
			}
		}
	}
	_delay_ms(100);
}
}

Ma ktoś pomysł co może być nie tak?

Link do komentarza
Share on other sites

Poinstruuje mnie jak to zrobić bo niestety na 3pkt. tutorial już nie działa :/ mam programator USBasp, którego nie ma na liście i niestety nie wykrywa urządzenia :/ poza tym w dokumentacji do atmegi8a-pu nie ma zakładki System Clock and Clock Options :|

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.