ATMega 16 USART

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 49
Зарегистрирован: Ср мар 26, 2014 17:33:08

Сообщение 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. Ну и на всякий случай настройки терминала Изображение
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Данные искажаются потому что не совпадают настройки скоростей компа и контроллера. Ты контроллер на какую скорость настроил? ставь такую же на компе. + проверь стоп-биты, количество бит и проверку на четность. Проверь полярность.
Либо еще вариант. Отправляешь пока еще не закончилась предыдущая передача. Поэтому каша.

+ вниметельней читай даташит.
Для выбора регистра при чтении используется временная последовательность. При первом обращении возвращается значение регистра 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-ричном виде.
Последний раз редактировалось ИС-пытатель Вс мар 30, 2014 09:13:32, всего редактировалось 1 раз.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

дополнительно порекомендую использовать модуль WinAVR, специально предназначенный для облегчения настроек util/setbaud.h
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 49
Зарегистрирован: Ср мар 26, 2014 17:33:08

Сообщение Aviator_93 »

Спасибо, вроде заработало, все правильно приходит. Появилась еще одна проблема. Вот допустим, отправил на МК число 21, МК принял это число, следом я отправляю на МК число 43, почему то, он получает предыдущее число т. е. 21, отправляю 43 второй раз и вот, только на второй раз, число 43 нормально доходит. Получается, числа нужно передавать по два раза. В чем, собственно, может быть проблема?
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

не может такого быть. Ищи ошибку в программе
Реклама
Ответить

Вернуться в «AVR»