нужна помощь с fuse-ами при настройке работы от внешнего кварца
- Войдите на сайт для отправки комментариев
Вс, 11/06/2017 - 10:23
использую atmega328p от ардуино мини, т.к. есть под рукой.
впаял её в свою плату, с кварцем 14.7456МГц. прошиваю USBasp + SinaProg
сначала прочитал фьюзы - LOW byte был 0xFF. записываю туда 0хF0, чтобы CKSEL был 0000, т.е. работа от внешнего кварца.
и всё... кирдык. SinaProg не видит больше этот чип.
Подскажите что я сделал не так и как оживить чип?
p.s. (странно, но предыдущий чип после похожих каких-то не помню каких манипуляций нормально заработал и шился раз 50, потом перестал быть виден, я подумал, что сдох.)
http://arduino.ru/forum/programmirovanie/fuse-bity#comment-6011
http://arduino.ru/forum/programmirovanie/proshivka-hex-failov-pri-pomoshchi-arduino-i-sinaprog
Вы уверены, что плата для кварцевого, а не керамического резонатора? У них разные схемы включения - отличие в 2 конденсаторах.
вот такой с двумя конденсаторами. а будет отличие в фьюзах при кварцевом и керамическом ?
вот такой с двумя конденсаторами. а будет отличие в фьюзах при кварцевом и керамическом ?
а, вот кстати ошибка какая из sinaprog :
Короче я не дочитал/неправильно понял datasheet. И затактировал контроллер от какого-то вывода EXTCLK...
значение CKSEL должно быть от 1000 до 1111 для моего кварца... а точнее 111Х , т.к. он в пределах 8 до 16 мгц
даже не знаю где вывод EXTCLK в микросхемы... нада бы подать туда сигнал, чтобы восстановить фьюзы.
короче просто перепаяю новый чип.
вот только собрался написать гневный посто про разницу между внешним кварцем и внешним генератором, а ТС уже сам ошибку нашел - малацца!
Твой фьюз - 0xFF. а старший - зависит от того, что ты писать собрался. Если бутлоадер не мешает - то можно вообще ничего от ардуинки не менять.
да вот, переношу с ардуины nano на конечную плату плату с другим кварцем (14 мгц).
и не работает. точнее как будто тормозит. не могу понять почему... копал кварц, фьюзы.
писал программу в среде ардуино и ничего вроде не должно зависеть от частоты.
простейшая программа с двумя внешними прерываниями. когда одно задействую, вроде все норм, как подключаю точно такой же обработчик второго прерывания - жуткие тормоза.
в прерывании тупо замеряется длина импульса через micros(). если она правильная - то меняю глобальную переменную. всё. что тут может тормозить пока понять не могу.
До выхода из прерывания значение micros() не изменяется тк вычисляется в прерывании, кстати, какая версия IDE Arduino у Вас ?
Если бы были прерывания по таймеру, могли "уплыть" прескалеры в другой диапазон деления. Здесь могу предположить - из-за снижения тактовой частоты прерывание не успевает отрабатывать и конкурирующее пропускается.
А вообще, если временно обойтись без внешнего обмена с другими синхронными устройствами, то ничего кроме кварца менять не нужно. Вы выбрали другую тактовую частоту для точных таймингов?
в прерывании тупо замеряется длина импульса через micros(). если она правильная - то меняю глобальную переменную. всё. что тут может тормозить пока понять не могу.
Хрустальный Шар поменял на самогонку... не могу указать на ошибку, по кофейной гуще код плохо виден.
micros() с другим кварцем - ессно использовать - смешно.