|
Простой вопрос по USART на attiny2313 |
|
|
|
Aug 12 2010, 20:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Ветка же AVR Цитата После инициализации на TxD будет высокий уровень Спасибо большое! Цитата Какие установите , такие и будут. USART он ведь сам по себе. Дадите команду работать , подключится и наплюёт на все установки порта , отключится вернутся установки порта. Установите порт как Вам нужно. А, то есть по тексту программы можно будет инициализовать? Или просто в подпрограмму запихнуть установку TXEN RXEN, затем передачу, и снятие флагов TXEN RXEN?
Сообщение отредактировал Alt.F4 - Aug 12 2010, 20:29
|
|
|
|
|
Aug 12 2010, 20:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(Alt.F4 @ Aug 13 2010, 00:26)  Ветка же AVR Спасибо большое! А, то есть по тексту программы можно будет инициализовать? Или просто в подпрограмму запихнуть установку TXEN RXEN, затем передачу, и снятие флагов TXEN RXEN? Конечно, если Вы не включите USART - TXEN RXEN , то работаете с портом , как Вам угодно. Включили - два высоких. Единственно , подтягивающие не отключаются. Если подтянули к питанию , то всегда высокие . Кстати для входа - это полезно
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Aug 13 2010, 05:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(Alt.F4 @ Aug 13 2010, 08:42)  ILYAUL, огромное спасибо! Еще хотел уточнить, 1 бод/с = 8 бит/с или 10 бит/с? Передаю 8бит данных, битов четности нет, один стоповый бит, в асинхронном режиме. На эту тему можно долго дискутировать . Прнято считать (с азбуки Морзе) что он равен 1бит/cek.Но в модемных сетях , он может равнятся и 4 бит и 8 и 9 бит/сек. Вообщем-то самое простое пояснение - это передача одного символа полезной информации . Т.е , если например кодируете букву А 4 битами , то 1 бод = 4бит /сек 8-ю = 8 бит /сек
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Aug 13 2010, 18:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
В общем долго мудрив со скоростями, пришел к выводу, что 1 бод/с = 1 бит/с Но проблема стала в другом. Написал прогу по которой tiny2313 должен слать по порядку весь алфавит по ACSII, в HyperTerminal'е же он слал только символ "А", хотя AVR Studio эмулировал все верно. Решил перепроверить отправляя обратно, что получил. И опять, tiny2313 либо отвечает символом "А", либо вообще молчит (в зависимости, что слать). Куда копать? Цитата ; Подпрограммы USART_transmit: sbis UCSRA,UDRE ;ждем пока UDR освободится rjmp USART_transmit ; out UDR,temp ;отправляем ret ;возврат из процедуры отправки USART_receive: sbis USR,RXC ;ждем приема символа rjmp USART_receive ; in temp,UDR ;читаем ret ;возврат из процедуры приема
; Основное тело программы Start: rcall USART_receive ; принимаем символ rcall USART_transmit ; отправляем этот символ rjmp Start
Сообщение отредактировал Alt.F4 - Aug 13 2010, 18:43
|
|
|
|
Guest_@Ark_*
|
Aug 14 2010, 07:20
|
Guests

|
Цитата Цитата(Alt.F4 @ Aug 13 2010, 08:42) Еще хотел уточнить, 1 бод/с = 8 бит/с или 10 бит/с? Передаю 8 бит данных, битов четности нет, один стоповый бит, в асинхронном режиме Здесь есть некоторая неточность. Ошибка - в обозначении бод/сек. Бод - это скорость передачи информации, измеряемая в символах в секунду. Если 1 символ = 1 бит, то 1 бод = 1 бит/сек.. В случае же какой-либо "хитрой" модуляции, 1 символ может передавать несколько бит. Тогда 1 бод больше 1 бит/сек. В случае RS232 всегда 1 бод = 1 бит/сек. 9600 бод = 9600 бит/сек . Но это скорость, с учетом всех бит, передаваемых по каналу: старт, стоп, четность. Например, если на скорости обмена 9600, используется формат передачи: длина слова - 8 бит; 1 старт-бит; 1 стоп-бит; четность не используется; то для передачи одного байта полезной информации (8 бит), потребуется передача 10 бит по каналу связи. "Полезная скорость", в этом случае, составит 960 байт в секунду или 7680 бит/сек (максимальная без учета пауз). Если будете использовать другой формат, например, с двумя стоп-битами и битом четности. То на скорости 9600, передача одного байта потребует уже передачи 12-ти бит по каналу. Скорость передачи "полезной" информации в этом случае упадет до 800 байт в секунду или 6400 бит в секунду.
|
|
|
|
Guest_@Ark_*
|
Aug 14 2010, 07:56
|
Guests

|
Цитата Почему же он не работает на 57600 а только на 4800? Какая тактовая частота процессора? Аппаратный модуль UART обычно получает рабочую частоту для обмена ее делением. Допустимая ошибка по частоте для RS232 - не более 1-2% (примерно). Нужно для каждой конкретной скорости вычислять ошибку. Иногда бывает, что на большей скорости ошибка меньше... Смотрите документацию на ваш МК - там обычно указываются допустимые скорости для UART, в зависимости от тактовой частоты процессора. ... Еще, конечно, зависит от самого тактового генератора. Его возможная ошибка по частоте будет влиять обязательно. На одной и той же частоте - от кварца может все работать, а от внутреннего RC - может и не работать. Все нужно считать. Или смотреть готовые таблицы в документации, если они там, конечно, есть...
|
|
|
|
|
Aug 14 2010, 08:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Кварц 4,608Мгц, в даташите по tiny2313 такого варианта нет, но нашел таблицы, где такой есть. Да и по формуле все сходится. Перепаивал кварц, думал, может он частоту плохо держит - не помогло. Фьюзы установлены на внешний кварц (CKSEL3..0 - 1101, SUT1..0 - 10, SKDIV8 - 0). з.ы. заметил глюк в avr_studio, как только происходит запись 0х06 в регистр UCSRC, сразу же это число записывается в UBBRH. Пробовал оставлять как есть, пробовал UBRR прописывать в самом конце - связь не удалось наладить.
Сообщение отредактировал Alt.F4 - Aug 14 2010, 08:39
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|