AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
22.03.2020, 17:09
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
AMega16 и скорость UART 1200
Кто-нибудь использовал скорость 1200 бод на ATMega? В документации делителя на эту скорость нет. Хочу использовть связь с HC-12, но там один из режимов работает только на скорости 1200.
|
|
|
|
22.03.2020, 17:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: AMega16 и скорость UART 1200
В документации есть формула для расчета UBRR под нужную скорость. Пробуйте.
|
|
|
|
22.03.2020, 20:05
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: AMega16 и скорость UART 1200
Сообщение от Ara41
|
В документации есть формула для расчета UBRR под нужную скорость. Пробуйте.
|
Это я знаю. Да и с таблицы ясно, что должно быть 383. Пока "железо" не готово, я пишу программу. Вот и хотел выяснить, закладывать этот пункт в меню или нет, чтоб потом не переписывать.
|
|
|
|
23.03.2020, 14:25
|
|
Прописка
Регистрация: 25.03.2013
Адрес: Глубокое замкадье
Сообщений: 216
Сказал спасибо: 3
Сказали Спасибо 71 раз(а) в 55 сообщении(ях)
|
Re: AMega16 и скорость UART 1200
Я когда-то сделал так:
Код:
|
#define GENUBRR_D(baud,u2x) (F_CPU/((u2x==0)?16:8)/baud-1)
#define GENUBRR_1(baud,u2x) ((GENUBRR_D(baud,u2x)›4095)?4095:GENUBRR_D(baud,u2x))
#define GEN_TBAUD(ubrr,u2x) (F_CPU/((u2x==0)?16:8)/(ubrr+1))
#define BAUD_ERROR_U(tbaud,baud) ((double)tbaud/(double)baud - 1.0)
#define BAUD_ERROR(tbaud,baud) ((BAUD_ERROR_U(tbaud,baud)›=0.0)?BAUD_ERROR_U(tbaud,baud):-BAUD_ERROR_U(tbaud,baud))
#define GENUBRR(baud) ((BAUD_ERROR(GEN_TBAUD(GENUBRR_1(baud,1),1),baud)›\
BAUD_ERROR(GEN_TBAUD(GENUBRR_1(baud,0),0),baud))?\
GENUBRR_1(baud,0):\
GENUBRR_1(baud,1))
#define GENU2X(baud) ((BAUD_ERROR(GEN_TBAUD(GENUBRR_1(baud,1),1),baud)›\
BAUD_ERROR(GEN_TBAUD(GENUBRR_1(baud,0),0),baud))?\
(0‹‹U2X):\
(1‹‹U2X))
#define GENUBRR_T(baud) {ubrr:GENUBRR(baud),u2x:GENU2X(baud)} |
Автоматически выбирается вариант с меньшей ошибкой.
baud должен быть константой, чтобы все вычисления сделал компилятор.
|
|
|
|
23.03.2020, 15:00
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: AMega16 и скорость UART 1200
Видимо, я не совсем точно задал вопрос. Как настроить UART я знаю. Просто увидев в таблице делители для скорости от 2400 и выше, я подумал- не обрезал ли производитель скорость меньше, чем 2400. Хотя, если UART стандартный, то должен поддерживать все скорости, до самой малой.
|
|
|
|
23.03.2020, 15:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,731
Сказал спасибо: 2,439
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: AMega16 и скорость UART 1200
Главное,чтобы хватило разрядности делителя.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:13.
|
|