Страница 1 из 1
ATMega 16 USART
Добавлено: Вс мар 30, 2014 02:47:58
Aviator_93
Доброго времени суток. Необходимо через переходник USB-USART подключить МК к компьютеру. Сам переходник выполнен на схеме FT232RL, и находиться в исправном состояние. Для проверки переходника замыкал RDX и TDX и отправлял по нему данные через терминал, все работает, циферки отправляются и тут же приходят. Подключил выводы схемы к МК, данные от компьютера к МК передаются, но только искажаются. Отправляю циферку 7, а получаю циферку 54. Хотелось бы выяснить в чем причина такого поведения. Инициализирую USART вот таким образом:
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char t = 0;
ISR(USART_RXC_vect)
{
t = UDR;
if(t == 1)
{
t = t + 1;
}
}
int main(void)
{
UBRRH = 0x00;
UBRRL = 0x3D;
UCSRB |= (1 << RXCIE)|(1 << RXEN)|(1 << TXEN);
UCSRC |= (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0);
sei();
while(true)
{
}
}
Ах, да. Частота МК 9,6 МГц и скорость передачи данных 9600. Ну и на всякий случай настройки терминала

Re: ATMega 16 USART
Добавлено: Вс мар 30, 2014 07:20:45
ИС-пытатель
Данные искажаются потому что не совпадают настройки скоростей компа и контроллера. Ты контроллер на какую скорость настроил? ставь такую же на компе. + проверь стоп-биты, количество бит и проверку на четность. Проверь полярность.
Либо еще вариант. Отправляешь пока еще не закончилась предыдущая передача. Поэтому каша.
+ вниметельней читай даташит.
Для выбора регистра при чтении используется временная последовательность. При первом обращении возвращается значение регистра UBRRH (UBRRHn). При повторном обращении в следующем машинном цикле возвращается значение регистра UCSRC (UCSRnC). Хорошо, что у тебя UBRRH = 0. А если бы нет? Другие настройки получатся!
+ запрети прерывания во время настройки передатчика. И попробуй настраивать регистры так
UCSRB = (1 << RXCIE)|(1 << RXEN)|(1 << TXEN);
UCSRC = (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0);
Если все правильно настроено - ищи паразитные емкости.
Еще заметил у тебя косяк. ты 7 в шестнадцетеричном виде отправляешь? или в ASCII ? У тебя галка на второй вариант стоит. это 55 в десятичном (близкое к полученному тобой значение, не правда ли?) и 0x37 в 16-ричном виде.
Re: ATMega 16 USART
Добавлено: Вс мар 30, 2014 08:51:37
ARV
дополнительно порекомендую использовать модуль WinAVR, специально предназначенный для облегчения настроек util/setbaud.h
Re: ATMega 16 USART
Добавлено: Вс мар 30, 2014 21:13:04
Aviator_93
Спасибо, вроде заработало, все правильно приходит. Появилась еще одна проблема. Вот допустим, отправил на МК число 21, МК принял это число, следом я отправляю на МК число 43, почему то, он получает предыдущее число т. е. 21, отправляю 43 второй раз и вот, только на второй раз, число 43 нормально доходит. Получается, числа нужно передавать по два раза. В чем, собственно, может быть проблема?
Re: ATMega 16 USART
Добавлено: Вс мар 30, 2014 22:54:13
ИС-пытатель
не может такого быть. Ищи ошибку в программе