Программа для расчета значения регистра UBRR USART AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Программа для расчета значения регистра UBRR USART AVR

Сообщение ATrosh »

Уважаемые Коты! Для удобства расчета регистра скорости передачи данных USART своял небольшую программу. Выкладываю может кому пригодится. Проект в среде Visual Studio 2015 Community. Проект с открытым кодом, можно изменять, дополнять и прочее. Интерфейс простой думаю разобраться труда не составит. Для запуска открыть файл приложения \visual studio 2015\Projects\Расчет USART\Расчет USART\obj\Debug\Расчет USART. Так как студия новая работать будет в ОС Windows 7, 8, 10.
Вложения
Расчет USART.rar
(188.29 КБ) 216 скачиваний
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18556
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ARV »

терпение превозмогает всё. иногда терпение превозмогает и рассудок. © К.Прутков

в стандартной поставке AVR Toolchain (и даже в WinAVR) имеется файлик setbaud.h, который решает все проблемы с расчетом значений регистров USART... всего-то надо ознакомиться с документацией на инструмент, и тогда не придется делать приспособление к молотку для закручивания шурупов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение COKPOWEHEU »

Писать программу для компьютера, да еще на бейсике, да еще такого размера! Когда достаточно 1 строчки макроса... ну 2-5 если с проверками и присвоениями.
#define UART_UBRR(baud) ((F_CPU/4/(baud)+1)/2)
И все! При сильном желании можно хоть на лету менять скорость обмена (но лучше, конечно, вычислять в программе, а не макросе), при изменении частоты кварца не надо ничего пересчитывать.
ARV, вы правы, конечно, есть такой файлик, но одну формулу можно и в код вставить.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение pyzhman »

ATrosh, всё это, конечно, похвально и т.п. А вы тестировали результаты своей программы? Насколько результаты соответствуют данным из даташитов? А-то, знаете-ли, в интернетах полно всякого.
Docendo discimus
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18556
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ARV »

COKPOWEHEU писал(а):но одну формулу можно и в код вставить.
так файлик тот по сути и есть одна формула. зачем делать свою, если при этом есть шанс ошибиться (например, многие не понимают, зачем UL в конце числовых констант)? ну и если уж совсем честно, то там еще есть бит "удвоенной скорости", старший-младший байты... так что в итоге будет не одна формула, а чуток поболе...

я юзаю файлик :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ATrosh »

На счет рассудка надо подумать :) . Если у меня паранойя это не значит, что мне ничего не угрожает.
Зачем это надо:
- больше нравится писать на ассемблере, может там и есть какая нибудь фишка для расчетов
- на графике без расчетов можно прикинуть какая частота больше подходит к нужной скорости передачи с наименьшей ошибкой, наверно не лишне
- то что на бейсике так это в новой студии не имеет значения, дело в привычке. А мне для тренировки.
- формула расчета как раз из описания ATTiny2313
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение akl »

COKPOWEHEU писал(а):...#define UART_UBRR(baud) ((F_CPU/4/(baud)+1)/2) И все!..
Неправильно.
СпойлерИзображение
UBRR.PNG
(44.86 КБ) 599 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18556
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ARV »

akl писал(а):Неправильно
началось в колхозе утро! :))) о чем я и говорил. файлик - наше всё :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение Z_h_e »

ATrosh писал(а):Для удобства расчета регистра скорости передачи данных USART своял небольшую программу.
http://radiokot.ru/forum/viewtopic.php? ... 7#p2893437
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение COKPOWEHEU »

ну и если уж совсем честно, то там еще есть бит "удвоенной скорости"
Может хоть вы объясните, зачем нужна одинарная скорость?
Неправильно.
С ходу ошибки в макросе не замечаю. Ткните носом.
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ATrosh »

Кто подскажет где искать AVR Toolchain в 7 Студии?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18556
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ARV »

напишите #include <util/setbaud.h>, а затем зажмите Ctrl и кликните на этом тексте - если студия на самом деле так хороша, как о ней говорят, у вас откроется этот файл... ну и можно будет понять, по какому пути он открылся - в свойствах...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение ATrosh »

Если я правильно понял необходимо сперва проект на С создать. Если asm то открыть калькулятор :?

Добавлено after 11 minutes 42 seconds:
Ладно, закроем тему. Пустые разговоры. Рассчитать значение регистра можно и бумажке. Идея была как быстро прикинуть на этапе проектирования.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение akl »

ATrosh писал(а):Рассчитать значение регистра можно и бумажке.
Ассемблер прекрасно справляется и без бумажки.

Код: Выделить всё

.equ	F_CPU=14745600
.equ	BAUD=230400
;-------------------------------------------------------------
	LDI	XH,HIGH((F_CPU/4/(baud)+1)/2)
	LDI	XL,LOW((F_CPU/4/(baud)+1)/2)	; "макрос" от COKPOWEHEU заносит 8 и скорость 204800???
;-------------------------------------------------------------
	LDI	YH,HIGH(F_CPU/8/BAUD-1)
	LDI	YL,LOW(F_CPU/8/BAUD-1)			; выражение из DS заносит 7 и скорость 230400!!!
;-------------------------------------------------------------
	OUT	UBRRH,YH
	OUT	UBRRL,YL
;*************************************************
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Программа для расчета значения регистра UBRR USART AVR

Сообщение COKPOWEHEU »

Все, понял, там не +1 а -1 должно быть. Писал из головы, немудрено ошибиться. Это округление, для "некруглых" кварцев дает более точный результат.
#define UART_UBRR(baud) ((F_CPU/4/(baud)-1)/2)
Вывод формулы из даташитовской:
F_CPU/8/b - 1 --> (F_CPU/8/b - 1) + 0.5 --> (F_CPU/4/b - 2)/2 + 1/2 --> (F_CPU/4/b - 2 + 1)/2 --> (F_CPU/4/b - 1)/2
Ассемблер прекрасно справляется и без бумажки.
В ассемблере тоже есть макросы, причем в avrasm2 или avr-as даже gcc-шные.
Ответить

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