Skocz do zawartości

[C] Bluetooth HC-05 - brak kontaktu z procesorem.


faker4537

Pomocna odpowiedź

Witam. Przymierzam się do budowy robota sterowanego przez Bluetooth. Jako procesor wybrałem ATmegę 8 taktowaną wewnętrznym zegarem 1MHz, a jako moduł łączności HC-05. Przy połączeniu tablet/komputer <-> HC-05, na jego pinie STATE pojawia się stan wysoki, a czerwona dioda mruga z mniejszą częstotliwością, lecz procesor nie wysyła znaku "a" do czego został zaprogramowany. Proszę o wyrozumiałość, gdyż dopiero od tygodnia uczę się C. Poniżej zamieszczam kod programu:

#include <avr/io.h>

volatile unsigned char data = 97;

//////////////////////////////////////////
//	USART_Init - inicjalizacja USARTU	//
//////////////////////////////////////////

void USART_Init(void) 
{
/*
	USART w trybie asynchronicznym;
	1 bit stopu; 8 bitow danych; double-speed;
	baudrate - 9600;
*/
DDRD |= (1<<DDD1);
UBRRH = 0;
UBRRL = 12;
UCSRA = (1<<U2X);
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
UCSRC = (1<<UCSZ0) | (1<<UCSZ1);
}

//////////////////////////////////////////////////////
//	USART_Transmit - transmisja danych przez USART	//
//////////////////////////////////////////////////////

void USART_Transmit(data)
{
while (!( UCSRA & (1<<UDRE)));
UDR = data;
}

//////////////////////////////////////////////////////
//	USART_Receive - odbieranie danych przez USART	//
//////////////////////////////////////////////////////

unsigned char USART_Receive(void)
{
while (!(UCSRA & (1<<RXC)));
return UDR;
}

int main(void){
USART_Init();
while(1){
	USART_Transmit(98);
}
}
Link do komentarza
Share on other sites

Z twojego opisu do końca nie rozumiem co chcesz zrobić, masz zamiar sterować robotem poprzez moduł bluetooth. Zatem będziesz chciał wysyłać odpowiednie ciągi znaków, ze swojego telefonu do modułu Bluetooth, który następnie przekaże je odpowiednio do procesora poprzez USART'a, twój aktualny program docelowo ma przesłać jakiś ciąg znaków do modułu zatem w jaki sposób chcesz sprawdzić by to działało poprawnie?

Jeśli dioda na HC-05 miga z mniejszą częstotliwością oznacza to, że urządzenie jest połączone z telefonem o ile dobrze pamiętam, bo chyba tak było gdy bawiłem się tym modułem.

W jaki sposób podłączyłeś moduł do procka?

Jesteś pewien że ustawiłeś właściwą prędkość transmisji?

U mnie to wyglądało np tak:

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

część funkcji:
UBRRH = (BAUD_PRESCALE>>8);
UBRRL = BAUD_PRESCALE;

Druga sprawa, skoro korzystasz ze zmiennej globalnej do pobrania wartości do wysłania,
zrobił bym to w ten sposób:

USART_Transmit(98); zmień na
USART_Transmit(); 

void USART_Transmit(data) możesz zmienić na:
void USART_Transmit() 

Moja rada, stwórz prostą aplikację dzięki której połączysz się z modułem poprzez telefon, i ustaw by była wysyłana np wartość 1, w programie procka zrób, że jeśli odbierzesz wartość 1 to zaświeci ci się jakaś dioda, dzięki temu będziesz pewien, ze transmisja działa poprawnie.

Moje rady mogą być nie najlepsze ponieważ sam nie jestem w tej dziedzinie ekspertem,
jak czegoś nie zrozumiałeś pytaj.

Pozdrawiam

Link do komentarza
Share on other sites

Na początku chcę opanować wysyłanie, a potem odbieranie danych.Zmieniłem kod zgodnie z Twoimi wskazówkami i nie zauważyłem żadnej zmiany. Jeśli chodzi o połączenia to wygląda to tak:

Atmega RX HC05 TX

Atmega TX HC05 RX

Moduł Bluetooth zasilany jest napięciem 5v (na płytce widnieje napis informujący o zakresie 3.3v-6v ). Testowałem kilka programów, jedyny poprawnie wysyłającym dane (lecz ich nie odbierający) znajduje się na tej stronie

EDIT: zły adres linku

Link do komentarza
Share on other sites

No dobra chcesz opanować wysyłanie, ale żeby sprawdzić czy wysyłanie działa musisz te dane gdzieś odbierać by sprawdzić czy wszystko jest zrobione poprawnie. Pytanie czy chcesz zrobić wysyłanie z procesora na zewnątrz, czy z zewnątrz do procesora.

Jeśli chcesz wysyłać dane z procesora poprzez moduł, to musisz je gdzieś odebrać np w telefonie, inaczej nie wiem w jaki sposób chcesz sprawdzić działanie układu.

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

"he frequency range depends on the sound card, but 20-20000Hz should be possible with all modern cards."

20 kHz to dość bardzo mało, ja i tak polecam 24MHz Saleae.

Co prawda tylko 1/0 ale niezastąpione do analizy zasadniczo czegokolwiek cyfrowego (no może oscyloskop byłby czasem lepszy).

Link do komentarza
Share on other sites

Mam 4 te moduły zakupione z różnych źródeł w różnym czasie i u mnie w każdym po połączeniu dioda świeci na stałe.

Proponuję jednaj jak radzą koledzy robić odwrotnie. Ściągnij dowolną aplikację lub napisz własną która będzie wysyłać znaki a w procku znaki odbieraj.

A jeszcze lepiej na początek to moduł podłącz przez dowolnego coma do kompa i na min patrz co się dzieje i czy dane idą.

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.