|
AVR и ПК, AVR и ПК |
|
|
|
Mar 14 2007, 12:22
|
Профессионал
    
Группа: Свой
Сообщений: 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 - там указаны некоторые частоты кварцев и ошибки, которые с ними получаются на разных скоростях.
--------------------
|
|
|
|
|
Mar 14 2007, 19:10
|

Группа: Новичок
Сообщений: 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 - там указаны некоторые частоты кварцев и ошибки, которые с ними получаются на разных скоростях. Спасибо полезная инфа, в книжках про такой кварц ни чего не сказано.
|
|
|
|
|
Mar 15 2007, 10:25
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

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

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Mar 15 2007, 15:08
|

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

|
Цитата(Dopler @ Mar 15 2007, 10:25)  Как и обещал, готовый проект в прикрепленном файле. 12 МГц - не очень удачная частота для UART, кстати, вы уверены, что работаете от кварца а не от внутреннего генератора? Для работы примера, вам надо установить fuse биты так, чтобы работа шла от внутреннего генератора 1 МГц, причем эта частота в кристале выставлена по умолчанию (т.е. если в fuse битах вы ничего не меняли, то и не надо этого делать). Программа инициализирует UART на скорость 2400, и в цикле непрерывно шлет данные. Спасибо огромное, работает. Но что же получается усарт работает не от кварца, а от внутреннего генератора. Я то думал наооборот, и расчитывал делители для 12 МГц. И теперь если я захочу поменять скорость передачи\приёма то надо будет расчитывать делитель для 1 МГц а не для 12?
|
|
|
|
|
Mar 15 2007, 17:34
|
Местный
  
Группа: Свой
Сообщений: 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, а в программе видно одиночная.
|
|
|
|
|
Mar 15 2007, 20:33
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Mar 16 2007, 10:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Так и у автора одиночная скорость, UCSRA = 0x00, во всех приведенных выше листингах, вернее бит U2X нигде не устанавливается. Цитата Ну так если одиночная не подходит, надо включать двойную а не снижать скорость обмена со словами "не получилось". Никто и не предлагает снижать скорость, я предлагал использовать другой кварц, а еще точнее я высказал версию в ответ на вопрос автора - почему не работает. Судя по всему, автор только начинает работать с контроллерами, по-этому лучше сразу поставить кварц с которым ошибка скорости будет = 0, а потом с приобретением опыта можно будет ставить кварцы на 12 или 12.8МГц, играться с двойными скоростями, плевать на небольшое увеличение ошибки, уметь оценить эту ошибку и т.д.
--------------------
|
|
|
|
|
Mar 16 2007, 13:34
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Mar 16 2007, 13:54
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 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 я про калк
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Mar 16 2007, 15:30
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|