Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.62/52: Рейтинг темы: голосов - 52, средняя оценка - 4.62
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
1

Cкорость обмена по UART

01.12.2012, 22:15. Просмотров 9419. Ответов 26
Метки нет (Все метки)

Значит есть в одной книжке такая табличка. К примеру привожу только эту вырезку.


Если присмотреться, то видно, что при UBRR = 1 скорость соответствует 2м значениям: 230400 и 250000, причем при одной скорости с ошибкой работает, а при другой - без. Все же какая скорость будет? И как эта самай ошибка считается?
Если считать по формуле, приведенной в этой же книге и в даташитах, то получается 250000.
А что если мне вдруг захочется на какой-нибудь нестандартной скорости работать: к примеру UBRR=18, скорость при 8 МГц равна 26315,789 бит/с (вот же я извращенец)))))) ), как узнать эту самую ошибку? Да и будет ли она вообще если на обоих концах одинаковые установки сделать?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 22:15
Ответы с готовыми решениями:

Алгоритм реализации обмена по UART
Здравствуйте, помогите пожалуйста, если сможете, в общем вот такая просьба: Привести алгоритм...

Низкая скорость обмена по UART (Arduino Mega2560)
Имеется в наличии Arduino Mega2560. Пытаюсь передать с компьютера большое количество данных через...

Софт для мониторига обмена между двумя uart
Ищу прогу которая мониторит одновременно 2 ком порта, и ведет лог. У меня есть плата, на нем МК и...

Cкорость интернета
вот такая беда: мозилла и другие арбузеры тянут скорость загрузки в 20-22 кбайт/с, хотя скорость по...

Cкорость устного счёта
Люди помогите пожалйста.Составить программу которая проверяет скорость устного подсчёта.Случайным...

26
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
01.12.2012, 22:22 2
Не-не, тут надо читать так: если мы захотим скорость 230400, то надо поставить 1, но тогда ошибка будет 8.5%. Ну а реальная скорость как-раз будет 250000.

Кроме того, учитывайте от чего тактируется МК - если от встроенного RC генератора, то у двух МК скорости при одинаковых настройках могут расходится весьма сильно. Да еще и дрейфовать от времени и температуры. Словом, адъ и погибель - надо ставить кварц.

А чтобы узнать "эту самую ошибку" надо знать желаемую скорость и ту, которая у вас реально получается наиболее близкой к ней. А если захотелось 26315,789 бит/с и получилось 26315,789 бит/с, то ошибка = 0 :))
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
01.12.2012, 22:28 3
Цитата Сообщение от wypuk
Значит есть в одной книжке такая табличка. К примеру привожу только эту вырезку.
Безымянный.jpg
Если присмотреться, то видно, что при UBRR = 1 скорость соответствует 2м значениям: 230400 и 250000, причем при одной скорости с ошибкой работает, а при другой - без. Все же какая скорость будет? И как эта самай ошибка считается?
Если считать по формуле, приведенной в этой же книге и в даташитах, то получается 250000.
А что если мне вдруг захочется на какой-нибудь нестандартной скорости работать: к примеру UBRR=18, скорость при 8 МГц равна 26315,789 бит/с (вот же я извращенец)))))) ), как узнать эту самую ошибку? Да и будет ли она вообще если на обоих концах одинаковые установки сделать?А что тут непонятного? 230400 - стандартная скорость (удвоение 115200) и для нее ошибка 8.5%. Если вы будете использовать нестандарную скорость 250К, то для нее ошибка будет равна 0. Или нет?
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
01.12.2012, 22:50 4
Цитата Сообщение от dsodir
Не-не, тут надо читать так: если мы захотим скорость 230400, то надо поставить 1, но тогда ошибка будет 8.5%. Ну а реальная скорость как-раз будет 250000.
Не, ну поставили мы UDRRL=1 и хотим работать со скоростью 230400 и ошибкой 8,5%, а передатчик сука молотит 250000. Не слушается блин, что делать))))
О какой ошибке вообще речь? Может если на одном конце кварц на 8 МГц, а на другом 7,3728 МГц. Тогда ошибка и будет возникать. Но кто же сообразит так выпендриться.
0
01.12.2012, 22:50
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
01.12.2012, 22:52 5
Речь о разнице между 230400 (что хотим) и 250000 (что получается при настройке) - это и есть ошибка
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
01.12.2012, 23:07 6
Цитата Сообщение от wypuk
Цитата Сообщение от dsodir
Не-не, тут надо читать так: если мы захотим скорость 230400, то надо поставить 1, но тогда ошибка будет 8.5%. Ну а реальная скорость как-раз будет 250000.
Не, ну поставили мы UDRRL=1 и хотим работать со скоростью 230400 и ошибкой 8,5%, а передатчик сука молотит 250000. Не слушается блин, что делать))))
О какой ошибке вообще речь? Может если на одном конце кварц на 8 МГц, а на другом 7,3728 МГц. Тогда ошибка и будет возникать. Но кто же сообразит так выпендриться.
А зачем выпендриваться? Ставьте одинаковые кварцы на обоих концах и проблем не будет.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
01.12.2012, 23:24 7
Ладно, с этим понял, дальше не по теме. Компилирую проект, студия что-то ругается не пойму!

ldi temp, (1<<PCMSK5)|(1<<PCMSK3)|(1<<PCMSK1)
out PCMSK, temp
ldi temp, 1<<PCIE
out GIMSK, temp

Говорит мол: C:\Assembler\Block_B\Block_B.asm(92): error: Undefined symbol: PCMSK5
Проц ATtiny2313. Вроде в регистре маски прерываний PCMSK есть такие биты, что она хочет?
0
yr0407
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 51
01.12.2012, 23:31 8
Цитата Сообщение от Bytt
А зачем выпендриваться?
Поддерживаю, но не в том плане, что надо ставить одинаковые кварцы. Кварцы как раз в разных устройствах могут стоять и разные, все зависит от того на что делался упор при разработке устройств. Если упор делался на коммуникации на разных скоростях, то надо было и кварцы ставить соответствующие, при использовании которых на разных скоростях будет минимальный процент ошибок, который можно будет скорректировать либо аппаратно либо программно. Если же при разработке были другие критерии для выбора кварцев, значит для коммуникации надо использовать те скорости передачи информации для которых будет наименьший процент ошибок при конкретном кварце у обоих устройств. Вобщем надо исходить из ряда возможных скоростей поддерживаемых обоими устройствами на которых ошибок будет как можно меньше. А бездумное манипулирование скоростями по принципу "я так хочу и все..." это тупиковый путь, особенно на бескварцевых поделках. Математику не обдуришь однако... :)
0
yr0407
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 51
01.12.2012, 23:32 9
Цитата Сообщение от wypuk
Ладно, с этим понял, дальше не по теме. Компилирую проект, студия что-то ругается не пойму!

ldi temp, (1<<PCMSK5)|(1<<PCMSK3)|(1<<PCMSK1)
out PCMSK, temp
ldi temp, 1<<PCIE
out GIMSK, temp

Говорит мол: C:\Assembler\Block_B\Block_B.asm(92): error: Undefined symbol: PCMSK5
Проц ATtiny2313. Вроде в регистре маски прерываний PCMSK есть такие биты, что она хочет?
Подключи инклудник и будет тебе счастье. :)
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
01.12.2012, 23:35 10
Блин, залез в файл tn2313def.yms, а там! Беда...
; PCMSK - Pin-Change Mask rikystir
.equ PCINT0 = 0 ; Pin-Change Ymtirrupt 0
.equ PCINT1 = 1 ; Pin-Change Ymtirrupt 1
.equ PCINT2 = 2 ; Pin-Change Ymtirrupt 2
.equ PCINT3 = 3 ; Pin-Change Ymtirrupt 3
.equ PCINT4 = 4 ; Pin-Change Ymtirrupt 4
.equ PCINT5 = 5 ; Pin-Change Ymtirrupt 5
.equ PCINT6 = 6 ; Pin-Change Ymtirrupt 6
.equ PCINT7 = 7 ; Pin-Change Ymtirrupt 7
Почему тогда


<Изображение удалено>

Эти названия на картинке разве не из tn2313def.yms берутся?
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
02.12.2012, 00:41 11
Во , блин кретины , надо же было такой yms написать. Еле понял , что к чему, похоже надо садиться и редактировать весь yms ручками
Пользуйтесь этим

PCMSK - Pin-Change Mask rikystir
.equ PCINT0 = 0 ; Pin-Change Ymtirrupt 0
.equ PCINT1 = 1 ; Pin-Change Ymtirrupt 1
.equ PCINT2 = 2 ; Pin-Change Ymtirrupt 2
.equ PCINT3 = 3 ; Pin-Change Ymtirrupt 3
.equ PCINT4 = 4 ; Pin-Change Ymtirrupt 4
.equ PCINT5 = 5 ; Pin-Change Ymtirrupt 5
.equ PCINT6 = 6 ; Pin-Change Ymtirrupt 6
.equ PCINT7 = 7 ; Pin-Change Ymtirrupt 7
да кстати , чтоб не мучиться со скоростями
Код
ldi      temp,HIGH((SYSCLK/(2*USORTSPEED2))-1)
outr   UBRRH,temp
ldi      temp,LOW((SYSCLK/(2*USORTSPEED2))-1)
outr   UBRRL,temp
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
02.12.2012, 00:46 12
Даташит
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
02.12.2012, 00:58 13
Судя по картинке , у него 2313A у которой аж три регистра PCMSK. В Studyo они для PCMSK0 пины переименовали , а в yms забыли. Заодно забыли и сам PCMSK переименовать в PCMSK0.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
02.12.2012, 08:42 14
Цитата Сообщение от YTYOUT
Судя по картинке , у него 2313A у которой аж три регистра PCMSK. В Studyo они для PCMSK0 пины переименовали , а в yms забыли. Заодно забыли и сам PCMSK переименовать в PCMSK0.
Не, регистр PCMSK один и только для PORTB.
Цитата Сообщение от dsodir
Даташит
Вложение:
<Изображение удалено>

Ну да, в даташит я что-то посмотреть забыл.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
02.12.2012, 08:49 15
Цитата Сообщение от wypuk
...Эти названия на картинке разве не из tn2313def.yms берутся?
Если не ошибаюсь, эти названия берутся из файла ATtiny2313.xml. Очевидно в вашей версии студии он не соответствует файлу tn2313def.yms.
Для ассемблера лучше использовать версию 4.19, там этих расхождений нет.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
02.12.2012, 15:21 16
У меня 4.19 и вот, что я вижу. Сами PCMSK - разнесены в разные разделы. Вместо PCMSK0- просто PCMSK , ну и соответсвенно название его бит видно на картинке

0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
02.12.2012, 18:25 17
Цитата Сообщение от YTYOUT
У меня 4.19 и вот, что я вижу...
У вас в свойствах проекта тип МК - ATtuny2313A, ТС же настаивает что у него ATtuny2313.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
02.12.2012, 19:29 18
Цитата Сообщение от omokost
Цитата Сообщение от YTYOUT
У меня 4.19 и вот, что я вижу...
У вас в свойствах проекта тип МК - ATtuny2313A, ТС же настаивает что у него ATtuny2313.
Когда создавал проект выбрал Tiny2313 без "А" да и tiny2313A даже в списке не было.
А как понять - кольцевой буфер FIFO. В книге написано, мол регистр данных UDR приемника сделан как двухуровневый буфер FIFO. Это как? И что это дает?
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
02.12.2012, 19:51 19
Цитата Сообщение от wypuk
...А как понять - кольцевой буфер FIFO...
FIFO - http://ru.wikipedia.org/wiki/FIFO_(%...8%D0%BA%D0%B0)
Так какой же у вас камень, ATtuny2313 или ATtuny2313А? Использовать инклюд от другого камня, а потом жаловаться что работает неправильно, это явное извращение.
0
wypuk
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 4
02.12.2012, 20:02 20
Цитата Сообщение от omokost
Так какой же у вас камень?
ATtiny2313 инклуд --- tn2313def.yms
Где написано, что инклуд от другого МК?
0
02.12.2012, 20:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 20:02

Cкорость течения реки
помогите с решением этой задачи...очень прошу Чапаеву надо под прямым углом к фарватеру...

Cкорость выше оплачиваемой
У меня пропускной канал 2мбит/с, а качаю со скоростью 4-5мбит/с с любого сайта, я конечно не...

Cкорость чтения дискеты
Помогите с заданием,пожалуйста! Нужна прога на ассемблере считающая скорость вращения дискеты. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.