реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> AVR и ПК, AVR и ПК
GDI
сообщение Mar 14 2007, 12:22
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Есть такая программа, называется AvrCalc.exe(прикрепить что то не удается - гугль в помощь) так вот, согласно этой программы при кварце 12МГц и скорости 115200 получается ошибка установки скорости 7.84% при том что даташит рекомендует иметь 0,5%, а при больших говорит, что возрастет влияние помех. А при таких ошибках и не будет никогда работать нормально. Для использования УАРТа, особенно на высоких скоростях используют специальные кварцы: 7.3728МГц, 11.0592МГц, 14.7456МГц и другие, в даташите есть раздел Examples of Baud Rate Setting - там указаны некоторые частоты кварцев и ошибки, которые с ними получаются на разных скоростях.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 14 2007, 19:10
Сообщение #17





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



Цитата(GDI @ Mar 14 2007, 12:22) *
Есть такая программа, называется AvrCalc.exe(прикрепить что то не удается - гугль в помощь) так вот, согласно этой программы при кварце 12МГц и скорости 115200 получается ошибка установки скорости 7.84% при том что даташит рекомендует иметь 0,5%, а при больших говорит, что возрастет влияние помех. А при таких ошибках и не будет никогда работать нормально. Для использования УАРТа, особенно на высоких скоростях используют специальные кварцы: 7.3728МГц, 11.0592МГц, 14.7456МГц и другие, в даташите есть раздел Examples of Baud Rate Setting - там указаны некоторые частоты кварцев и ошибки, которые с ними получаются на разных скоростях.

Спасибо полезная инфа, в книжках про такой кварц ни чего не сказано.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Mar 15 2007, 10:25
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Как и обещал, готовый проект в прикрепленном файле. 12 МГц - не очень удачная частота для UART, кстати, вы уверены, что работаете от кварца а не от внутреннего генератора? Для работы примера, вам надо установить fuse биты так, чтобы работа шла от внутреннего генератора 1 МГц, причем эта частота в кристале выставлена по умолчанию (т.е. если в fuse битах вы ничего не меняли, то и не надо этого делать). Программа инициализирует UART на скорость 2400, и в цикле непрерывно шлет данные.
Прикрепленные файлы
Прикрепленный файл  USART.zip ( 6.02 килобайт ) Кол-во скачиваний: 35
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 15 2007, 10:55
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GDI @ Mar 14 2007, 11:22) *
Есть такая программа, называется AvrCalc.exe(прикрепить что то не удается - гугль в помощь) так вот, согласно этой программы при кварце 12МГц и скорости 115200 получается ошибка установки скорости 7.84%
Мама! Откуда столько?
int(12000000/8/115200) = 13.
12000000/8/13 = 115384.
(115384 - 115200)/115200 * 100 = 0.16%

Выкиньте такую программу, считайте сами.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 15 2007, 11:17
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
Мама! Откуда столько?
int(12000000/8/115200) = 13.
12000000/8/13 = 115384.
(115384 - 115200)/115200 * 100 = 0.16%

Выкиньте такую программу, считайте сами.

Да уж... smile.gif Но я все равно ставлю 11,0592 или 14,7456 если работаю с УАРТом.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
dim_OK
сообщение Mar 15 2007, 15:08
Сообщение #21





Группа: Новичок
Сообщений: 11
Регистрация: 24-02-07
Из: Воронеж
Пользователь №: 25 622



Цитата(Dopler @ Mar 15 2007, 10:25) *
Как и обещал, готовый проект в прикрепленном файле. 12 МГц - не очень удачная частота для UART, кстати, вы уверены, что работаете от кварца а не от внутреннего генератора? Для работы примера, вам надо установить fuse биты так, чтобы работа шла от внутреннего генератора 1 МГц, причем эта частота в кристале выставлена по умолчанию (т.е. если в fuse битах вы ничего не меняли, то и не надо этого делать). Программа инициализирует UART на скорость 2400, и в цикле непрерывно шлет данные.


Спасибо огромное, работает. Но что же получается усарт работает не от кварца, а от внутреннего генератора. Я то думал наооборот, и расчитывал делители для 12 МГц. И теперь если я захочу поменять скорость передачи\приёма то надо будет расчитывать делитель для 1 МГц а не для 12?
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 15 2007, 16:23
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



УСАРТ работает от того генератора что вы выберите, просто по-умолчанию новые кристаллы работают от встроенного RC генератора на 1МГц, а для того чтобы переключится на другой генератор(RC генератор на 2, 4 или 8МГц или внешний кварц) - надо фьюзы прошить согласно даташиту.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Mar 15 2007, 17:34
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



На этом этапе я рекомендовал бы вам огласить пргограмматор, которым вы пользуетесь (какой программой шьете), так как программирование fuse может привести к тому, что больше вы контроллер не увидите (всмысле не сможете перепрограммировать).


Цитата(Сергей Борщ @ Mar 15 2007, 10:55) *
Мама! Откуда столько?
int(12000000/8/115200) = 13.
12000000/8/13 = 115384.
(115384 - 115200)/115200 * 100 = 0.16%

Выкиньте такую программу, считайте сами.


У вас просто двойная скорость UART, а в программе видно одиночная.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 15 2007, 20:33
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Dopler @ Mar 15 2007, 16:34) *
У вас просто двойная скорость UART, а в программе видно одиночная.
Ну так если одиночная не подходит, надо включать двойную а не снижать скорость обмена со словами "не получилось". К тому же сообщение, на который писался ответ звучало:
Цитата
Есть такая программа, называется AvrCalc.exe(прикрепить что то не удается - гугль в помощь) так вот, согласно этой программы при кварце 12МГц и скорости 115200 получается ошибка установки скорости 7.84%
Тут ни про какую двойную скорость не говорится.
P.S. у меня прекрасно работает 115200 при кварце 12.8МГц.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 16 2007, 10:46
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Так и у автора одиночная скорость, UCSRA = 0x00, во всех приведенных выше листингах, вернее бит U2X нигде не устанавливается.
Цитата
Ну так если одиночная не подходит, надо включать двойную а не снижать скорость обмена со словами "не получилось".

Никто и не предлагает снижать скорость, я предлагал использовать другой кварц, а еще точнее я высказал версию в ответ на вопрос автора - почему не работает. Судя по всему, автор только начинает работать с контроллерами, по-этому лучше сразу поставить кварц с которым ошибка скорости будет = 0, а потом с приобретением опыта можно будет ставить кварцы на 12 или 12.8МГц, играться с двойными скоростями, плевать на небольшое увеличение ошибки, уметь оценить эту ошибку и т.д.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 16 2007, 13:34
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GDI @ Mar 16 2007, 09:46) *
Судя по всему, автор только начинает работать с контроллерами, по-этому лучше сразу поставить кварц с которым ошибка скорости будет = 0, а потом с приобретением опыта можно будет ставить кварцы на 12 или 12.8МГц, играться с двойными скоростями, плевать на небольшое увеличение ошибки, уметь оценить эту ошибку и т.д.
Вот с таким развернутым ответом соглашусь безоговорочно!


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Mar 16 2007, 13:54
Сообщение #27


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Цитата(Сергей Борщ @ Mar 15 2007, 10:55) *
Мама! Откуда столько?
int(12000000/8/115200) = 13.
12000000/8/13 = 115384.
(115384 - 115200)/115200 * 100 = 0.16%

Выкиньте такую программу, считайте сами.

пусть U2x=0
выбираем UBRR:
[12000000/(16*115200)]-1 = 5.5
1) пусть будет 5
вычисляем реальный бодрейт:
[12000000/(16*(5+1))]=125000
вычисляем погрешность:
{(125000/115200)-1}*100% = 8.5%
если взять UBRR=6 то чуть меньше...
или я недоперепил?
наверное она так считает ведь она незнает что в мегах есть U2x=1
я про калк


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 16 2007, 15:30
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Kovrov @ Mar 16 2007, 12:54) *
наверное она так считает ведь она незнает что в мегах есть U2x=1
я про калк

И я про него:
Цитата(Сергей Борщ @ Mar 15 2007, 09:55) *
Выкиньте такую программу, считайте сами.
И показал в цифрах, что знание простейшей методики расчета и "ручной" настройки регистров гораздо плодотворнее тупого следования результатам программы. Ведь сложного там ничего нет - прочитать три страницы и понять.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 07:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016