|
|
  |
Калибровка Tiny13 и софтовый COM-порт на ней |
|
|
|
Dec 18 2007, 14:53
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 5-10-07
Из: Харьков, Украина
Пользователь №: 31 107

|
Стоит задача реализовать софтово COM-порт (только передачу) на Тини13. Столкнулся с тем, что не смотря на автозагрузку заводского калибровочного байта, некоторые процессоры выдают такую частоту в ком-порт, какую компьютер не принимает. То есть с одного прошитого процессора данные в терминалке на экран выводятся, а с другого - нет, или не все, или с мусором. По даташиту точность заводской калибровки - порядка 10%, видимо этого недостаточно. В аппнотах описана процедура калибровки с подачей внешней частоты 32кгц, но не понимаю, как это применить к авреалу. Посоветуйте что-нибудь.
|
|
|
|
|
Dec 19 2007, 11:13
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(sbw @ Dec 18 2007, 17:53)  Посоветуйте что-нибудь. Подайте на любой вход опорную частоту. Пусть это будет 1 Khz. заведите таймер на отсчет одной секунды c коеф. деления - 9.6M. Если ипульсов за внутреннюю "секунду" насчитается больше тысячи - то частота ниже 9.6Mhz делаем OSCCAL += 1, и повторяем опыт.. Если импульсов насчитается меньше 1000, то частота соответвенно выше чем 9.6Mhz - делаем OSCCAL -= 1. Когда застрянете между двумя значениями OSCCAL'a - выбирайте то которое дает меньшее отклонение по числу импульсов. e.g: OSCCAL 129 - 996 OSCCAL 128 - 1016 выбираем 129, т.к. отклонение составляет (1000 - 996) * 100% / 1000 = 0.4%
|
|
|
|
|
Dec 19 2007, 12:03
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(sbw @ Dec 18 2007, 14:53)  Стоит задача реализовать софтово COM-порт (только передачу) на Тини13. Столкнулся с тем, что не смотря на автозагрузку заводского калибровочного байта, некоторые процессоры выдают такую частоту в ком-порт, какую компьютер не принимает. То есть с одного прошитого процессора данные в терминалке на экран выводятся, а с другого - нет, или не все, или с мусором. По даташиту точность заводской калибровки - порядка 10%, видимо этого недостаточно. В аппнотах описана процедура калибровки с подачей внешней частоты 32кгц, но не понимаю, как это применить к авреалу Для 10-битных пакетов точность разности частот приёмника и передатчика должна быть не хуже ±(0,5/9,5)=0,053 т.е. порядка ±5%. Если у вас есть точные 32 КГц, то можно применить алгоритм измерения частоты, только оценивать не входную частоту 32 кГц, а тактовую частоту процессора, думаю 10-50 мс должно хватить на оценку. Ну а зная тактовую, можно настроить длительность одного бита. Как вариант, можно ещё посылать с ПК байт 0х55 время от времени и по длительности нуля и единицы также оценивать тактовую частоту проца.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Dec 19 2007, 14:18
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 5-10-07
Из: Харьков, Украина
Пользователь №: 31 107

|
Цитата(=GM= @ Dec 19 2007, 14:03)  Как вариант, можно ещё посылать с ПК байт 0х55 время от времени и по длительности нуля и единицы также оценивать тактовую частоту проца. Нет, точных внешних частот без серьезной переделки программатора нет. А вот по поводу идеи подавать посылку с ком-порта компьютера (допустим, это возможно): достаточно ли будет подачи одного байта '$55' ? Или может лучше '00', и оценивать длительность "нулей"? Какую имеет смысл установить скорость передачи этого байта, поменьше? Например, 1200 или меньше? Я так понимаю, что чем длинее посылка - тем выше точность. И, как я понимаю, нельзя рассчитывать на длительность передачи нескольких байт, компьютер может быть неожиданно занят чем-то другим и увеличить паузу между передаваемыми байтами, да? Пока что я склоняюсь к мысли поставить на плату программатора еще один процессор с кварцем, который бы начинал генерить 100-гц импульсы по ноге MISO через 1с после ресета программируемого проца и до момента проседания в ноль ноги SCK (то есть, если после ресета начинается прошивка программируемого процессора, чтобы этот генератор отрубился и не мешал, и перестал генерить после того, как программируемый процессор решил, что он откалибровался и ему хватит, можно работать). Как вам идея?
|
|
|
|
|
Dec 19 2007, 15:10
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(sbw @ Dec 19 2007, 14:18)  А вот по поводу идеи подавать посылку с ком-порта компьютера (допустим, это возможно): достаточно ли будет подачи одного байта '$55' ? Или может лучше '00', и оценивать длительность "нулей"? Какую имеет смысл установить скорость передачи этого байта, поменьше? Например, 1200 или меньше? Я так понимаю, что чем длинее посылка - тем выше точность. И, как я понимаю, нельзя рассчитывать на длительность передачи нескольких байт, компьютер может быть неожиданно занят чем-то другим и увеличить паузу между передаваемыми байтами, да? Думаю, что достаточно подать один байт в начале программирования, он будет еще как бы признаком старта. Вы же понимаете, что частоты гуляют очень и очень медленно, в основном от температуры или от старения. Измерили вы частоту и за 20-30 минут никуда она серьёзно не убежит. Имеет смысл подавать байт 0х55, потому что программа может измерить длительности четырёх 1 и четырёх 0, и сравнить их между собой, гарантия того, что это не помеха или не простое перетыкание разъёмов. Скорость передачи можно поставить 9600, можно 1200, не имеет значения, 1мс или 10мс, время ничтожное, лишь бы вы успели измерить длительность с приемлемой точностью. Цитата(sbw @ Dec 19 2007, 14:18)  Пока что я склоняюсь к мысли поставить на плату программатора еще один процессор с кварцем, который бы начинал генерить 100-гц импульсы по ноге MISO через 1с после ресета программируемого проца и до момента проседания в ноль ноги SCK (то есть, если после ресета начинается прошивка программируемого процессора, чтобы этот генератор отрубился и не мешал, и перестал генерить после того, как программируемый процессор решил, что он откалибровался и ему хватит, можно работать). Как вам идея? Не знаю ваших задумок, но здесь вы вроде ребёночка выплеснули вместе с водой. У вас же вроде не было точных частот, и вы кварц не хотели ставить, а теперь ставите, да ещё с МК. Оно вам надо? Вот, кстати ещё, подумал, что таким способом можно обмениваться двум бескварцевым МК, на каждом обмене корректирующим скорость приёмника под чужой передатчик.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Dec 19 2007, 17:58
|
Участник

Группа: Validating
Сообщений: 64
Регистрация: 16-06-05
Пользователь №: 6 073

|
Цитата(=GM= @ Dec 19 2007, 21:10)  Вот, кстати ещё, подумал, что таким способом можно обмениваться двум бескварцевым МК, на каждом обмене корректирующим скорость приёмника под чужой передатчик. что-то такое было у Atmel: AVR140: ATmega48/88/168 family run-time calibration of the Internal RC oscillator PS: пробовал делать подстройку частоты RC-генератора под частоту часового кварца, но что-то было сделано неверно и программа имела склонность разгонять процессор  когда ей казалось что нехватает быстродействия.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|