Получил модули.
Не смотря на то что пишут что Rx Tx вроде как толерантны к 5в. Решил всё таки пустить сигнал через преобразователь уровней.
Вот схема:
Так как в протеусе не нашёл преобразователя 78l33( а как сделать не знаю).
При моделировании использовал входное напряжение 9в вместо 5в и 7805 вместо 78l33.
В девайсе стоит 78l33 и вход соответственно 5в.
При эмуляции в протеусе , всё работает.
Сделал плату фоторезистом одностороннюю(чтобы не на лажать с дорогами ). Детали точно на своих местах 10 раз проверил.
Что имею. Даю напряжение. Диод статуса мигает. Девайс видится компом.
Подключение происходит , при подключении загорается диод связи. При передаче байта, диод статуса помаргивает. Всё Вроде здорово.
Теперь беда.
Подключаю Rx И Tx к мк.
CODE:
void USART_Init(void)
{
memset(usart_buff,0,USART_SIZE);
usart_cnt =0;
UBRRH = 0;
UBRRL = 25;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
sei();
}
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}
void USART_SendString(unsigned char* str )
{
size_t l = strlen( (char*)str );
for (size_t i = 0; i < l; i++ )
USART_SendChar( str[i] );
}
int dbg=0;
ISR( USART_RXC_vect )
{
unsigned char ch = UDR;
LcdGotoXYFont(dbg,1);
dbg++;
LcdChr(FONT_1X,ch);
}
void USART_Init(void)
{
memset(usart_buff,0,USART_SIZE);
usart_cnt =0;
UBRRH = 0;
UBRRL = 25;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
sei();
}
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}
void USART_SendString(unsigned char* str )
{
size_t l = strlen( (char*)str );
for (size_t i = 0; i < l; i++ )
USART_SendChar( str[i] );
}
int dbg=0;
ISR( USART_RXC_vect )
{
unsigned char ch = UDR;
LcdGotoXYFont(dbg,1);
dbg++;
LcdChr(FONT_1X,ch);
}
В общем понятно, всё что получаем в прерывании , выводим на LCD.
Эксперимент 1.
При передаче байта с компа , как я уже говорил, мигает диод. Но на экран выводится почему то 4 байта мусора , причём того что передавали , среди них нет. Соответственно если передать два байта, выводится 8 байт мусора.
Эксперимент 2. Отключаю HC-05 , закорачиваю Rx и Tx контроллера через резистор.
Шлю строку с контроллера USART_SendString("AT/r/n " ) .
Получаю соответствующий вывод на экране, то есть с usart на стороне контроллера всё в порядке.
Эксперимент 3.
Подключаю HC-05
Перевожу HC-05 , в режим AT. Установив ногу контроллера в 1 , к которой подключено управление. На соответствующем выводе HC-05 3,29 вольта(проверил тестером). Светодиод отреагировал равномерным миганием.
Подаю
USART_SendString("AT/r/n" ) .
А в ответ тишина. Нет реакции вообще на AT команды.
В общем не знаю что делать . Корифеи , прорвете пожалуйста , может всё таки со схемой что не так или с кодом.