Okazało się, że kupiłem rzeczywiście HC-06 M . Dziękuję za rady. Kupiłem HC-05, która fabrycznie ustawiona jest jako Slave i teraz moduł jest wykrywany i robi echo.
Napotkałem jednak na inny ciekawy problem związany z HC-05, z którym nie umiem sobie poradzić.
Zainicjowałem połączenie UART z komputerem (8n1, 4800, 1Mhz) po kablu za pomocą przejściówki WSH PL2303 UART Board (type A). Komunikacja była poprawna, żadnych krzaków.
Po czym dokładnie z tym samym programem na ATmedze i dokładnie tym samym ustawieniem terminala spróbowałem zainicjować połączenie przez HC-05 (z którym wcześniej nawiązałem udane połączenie i zrobiłem echo) i otrzymałem bzdury.
Zrobiłem echo wewnątrz programu (jak w kodzie na dole w przerwaniu) i po niektórych klawiszy wyświetla się nic, przy innych wyświetla się krzak, przy innych zdarzają się nawet chińskie symbole.
W przypadku klawiszy po naciśnięciu których nie wyświetla się nic z zachowania diody w porcie PC4, wnioskuję, że w ogóle mikrokontroler nie uznaje, że coś do niego doszło.
Kod:
void USART_Init()
{
/*Set baud rate */
UBRRH = (uint8_t)(__UBRR>>8);
UBRRL = (uint8_t)__UBRR;
/*Enable receiver and transmitter and resive interrupts*/
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
/* Set frame format: 8data, 2stop bit */
//UCSRC = (1<<URSEL)|(3<<UCSZ0);
UCSRC = (1<<URSEL)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(0<<UCSZ2);
}
void USART_Transmit( uint8_t data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
volatile char Dana_odebrana,odebrano,nr_ramki=0;
char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
Dana_odebrana = UDR;
odebrano = UDR;
nr_ramki++;
/* Get and return received data from buffer */
return UDR;
}
SIGNAL(USART_RXC_vect)
{
USART_Receive();
switch(Dana_odebrana)
{
case 'w':
if(wypL<250)
wypL+=2;
if(wypR<250)
wypR+=2;
break;
case 's':
if(wypL>0)
wypL-=2;
if(wypR>0)
wypR-=2;
break;
case 'a':
if(wypR<250)
wypR+=2;
if(wypL>0)
wypL-=2;
break;
case 'd':
if(wypR>0)
wypR-=2;
if(wypR<250)
wypL+=2;
break;
case ' ':
wypR=0;
wypL=0;
break;
}
if(wypR>=248)
USART_Transmit('X');
USART_Transmit(Dana_odebrana);
PORTB ^= 1<<PB4;
}
W terminalu ustawiłem local echo na auto i Flow control na None.
Wszystko wygląda tak jakby HC-05 nie umiało rozmawiać z Atmegą8a.
Czy wiecie może, jak naprostować tę sytuację?