Программа для расчета значения регистра UBRR USART AVR
Программа для расчета значения регистра UBRR USART AVR
Уважаемые Коты! Для удобства расчета регистра скорости передачи данных USART своял небольшую программу. Выкладываю может кому пригодится. Проект в среде Visual Studio 2015 Community. Проект с открытым кодом, можно изменять, дополнять и прочее. Интерфейс простой думаю разобраться труда не составит. Для запуска открыть файл приложения \visual studio 2015\Projects\Расчет USART\Расчет USART\obj\Debug\Расчет USART. Так как студия новая работать будет в ОС Windows 7, 8, 10.
- Вложения
-
- Расчет USART.rar
- (188.29 КБ) 216 скачиваний
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18550
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программа для расчета значения регистра UBRR USART AVR
терпение превозмогает всё. иногда терпение превозмогает и рассудок. © К.Прутков
в стандартной поставке AVR Toolchain (и даже в WinAVR) имеется файлик setbaud.h, который решает все проблемы с расчетом значений регистров USART... всего-то надо ознакомиться с документацией на инструмент, и тогда не придется делать приспособление к молотку для закручивания шурупов.
в стандартной поставке AVR Toolchain (и даже в WinAVR) имеется файлик setbaud.h, который решает все проблемы с расчетом значений регистров USART... всего-то надо ознакомиться с документацией на инструмент, и тогда не придется делать приспособление к молотку для закручивания шурупов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Программа для расчета значения регистра UBRR USART AVR
Писать программу для компьютера, да еще на бейсике, да еще такого размера! Когда достаточно 1 строчки макроса... ну 2-5 если с проверками и присвоениями.
#define UART_UBRR(baud) ((F_CPU/4/(baud)+1)/2)
И все! При сильном желании можно хоть на лету менять скорость обмена (но лучше, конечно, вычислять в программе, а не макросе), при изменении частоты кварца не надо ничего пересчитывать.
ARV, вы правы, конечно, есть такой файлик, но одну формулу можно и в код вставить.
#define UART_UBRR(baud) ((F_CPU/4/(baud)+1)/2)
И все! При сильном желании можно хоть на лету менять скорость обмена (но лучше, конечно, вычислять в программе, а не макросе), при изменении частоты кварца не надо ничего пересчитывать.
ARV, вы правы, конечно, есть такой файлик, но одну формулу можно и в код вставить.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Программа для расчета значения регистра UBRR USART AVR
ATrosh, всё это, конечно, похвально и т.п. А вы тестировали результаты своей программы? Насколько результаты соответствуют данным из даташитов? А-то, знаете-ли, в интернетах полно всякого.
Docendo discimus
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18550
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программа для расчета значения регистра UBRR USART AVR
так файлик тот по сути и есть одна формула. зачем делать свою, если при этом есть шанс ошибиться (например, многие не понимают, зачем UL в конце числовых констант)? ну и если уж совсем честно, то там еще есть бит "удвоенной скорости", старший-младший байты... так что в итоге будет не одна формула, а чуток поболе...COKPOWEHEU писал(а):но одну формулу можно и в код вставить.
я юзаю файлик
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: Программа для расчета значения регистра UBRR USART AVR
На счет рассудка надо подумать
. Если у меня паранойя это не значит, что мне ничего не угрожает.
Зачем это надо:
- больше нравится писать на ассемблере, может там и есть какая нибудь фишка для расчетов
- на графике без расчетов можно прикинуть какая частота больше подходит к нужной скорости передачи с наименьшей ошибкой, наверно не лишне
- то что на бейсике так это в новой студии не имеет значения, дело в привычке. А мне для тренировки.
- формула расчета как раз из описания ATTiny2313
Зачем это надо:
- больше нравится писать на ассемблере, может там и есть какая нибудь фишка для расчетов
- на графике без расчетов можно прикинуть какая частота больше подходит к нужной скорости передачи с наименьшей ошибкой, наверно не лишне
- то что на бейсике так это в новой студии не имеет значения, дело в привычке. А мне для тренировки.
- формула расчета как раз из описания ATTiny2313
Re: Программа для расчета значения регистра UBRR USART AVR
Неправильно.COKPOWEHEU писал(а):...#define UART_UBRR(baud) ((F_CPU/4/(baud)+1)/2) И все!..
Спойлер
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18550
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программа для расчета значения регистра UBRR USART AVR
началось в колхозе утро!akl писал(а):Неправильно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программа для расчета значения регистра UBRR USART AVR
http://radiokot.ru/forum/viewtopic.php? ... 7#p2893437ATrosh писал(а):Для удобства расчета регистра скорости передачи данных USART своял небольшую программу.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Программа для расчета значения регистра UBRR USART AVR
Может хоть вы объясните, зачем нужна одинарная скорость?ну и если уж совсем честно, то там еще есть бит "удвоенной скорости"
С ходу ошибки в макросе не замечаю. Ткните носом.Неправильно.
Re: Программа для расчета значения регистра UBRR USART AVR
Кто подскажет где искать AVR Toolchain в 7 Студии?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18550
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Программа для расчета значения регистра UBRR USART AVR
напишите #include <util/setbaud.h>, а затем зажмите Ctrl и кликните на этом тексте - если студия на самом деле так хороша, как о ней говорят, у вас откроется этот файл... ну и можно будет понять, по какому пути он открылся - в свойствах...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Программа для расчета значения регистра UBRR USART AVR
Если я правильно понял необходимо сперва проект на С создать. Если asm то открыть калькулятор 
Добавлено after 11 minutes 42 seconds:
Ладно, закроем тему. Пустые разговоры. Рассчитать значение регистра можно и бумажке. Идея была как быстро прикинуть на этапе проектирования.
Добавлено after 11 minutes 42 seconds:
Ладно, закроем тему. Пустые разговоры. Рассчитать значение регистра можно и бумажке. Идея была как быстро прикинуть на этапе проектирования.
Re: Программа для расчета значения регистра UBRR USART AVR
Ассемблер прекрасно справляется и без бумажки.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
Все, понял, там не +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
#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-шные.Ассемблер прекрасно справляется и без бумажки.



