Прикупил ATMega162, чтобы разобраться в прошивке фьюзов и с другим мракобесием, но столкнулся с проблемой, на которую гугл мне ответа не дает. Дело вот в чем. У меня стоит внешний кварц на 16МГц, фьюзы выставлены под него, фьюз, отвечающий за деление на 8 частоты отключен. (delay отрабатывает верно по времени), но вот с UART творится фигня. Я устанавливаю на ATMеге частоту 9600, иду в монитор, а там одни яти вместо чисел и букв. Начинаю подбирать и выясняю, что частота, на которой комп различает все правильно-это 1200. Повторяюсь. Фьюз на деление отключен. Точно. Что посоветуете проверить? Итак. Что я уже проверил: 1. Фьюз на деление отключен. 2. Фьюзы на внешний кварц выставлен правильно 3. В файле boards.txt стоит правильная частота 16000000L Благодарю за внимание. Хочу выслушать ваши предложения о том, как это исправить
Реальные значения фьзов привидите, пожалуйста. Считать из контроллера их можно программой avrdude (так понял, что пользуетесь Arduino IDE, программа avrdude входит в комплект этой IDE).
Похоже что как раз включён.Попробуйте изменить его состояние.Потому как насчёт включён/отключён может быть двоякое толкование всё зависит от прошивающих программ. Дефолтные фьюзы High-99 Low-62 Если отключить "делёжку" High-99 Low-Е2
Если так -- lfuse == FB, то делитель отключен, но установлен странный источник тактовой частоты -- кварц с частотой 0.9 - 3 МГц. lfuse должен быть FF или FE. Но всё-таки хотелось бы отталкиваться не от наших догадок, а от реальных данных. Но проверка fuse это только первый шаг, дело в том, что fuse CKDIV8 используется при старте контроллера для установки регистра CLKPR, отвечающего за деление тактовой частоты -- если CKDIV8 запрограммирован ( == 0), то при старте контроллера в регистр CLKPR приписывается такое значение, в соответствии с которым тактовая частота контроллера будет в 8 раз меньше реальной частоты, А потом этот регистр может измениться и соответственно измениться частота тактовой частоты контроллера -- она, например, может стать равной максимальной частоте кварца == 16 МГц несмотря на прошитый CKDIV8. Второй шаг это проверка регистра UBBR, отвечающего за скорость USART...
Уже пробовал включать. Тогда если мигать светодиодом с delay(500) переключается он раз в 5 секунд. Я написал уже, что деление точно отключено.
Фьюзы настроены на использование внешнего кварца от 8 МГц и более без делителя частоты, т.е. микроконтроллер работает на частоте внешнего кварца 16 МГц. Остаётся проверить настройки скорости USART (регистр UBRR). Как инициализируется USART?
Почему? А зачем такая многоходовая комбинация?Смысл этого всего?Не проще ли сразу через RX/TX?Так и ошибку отловить будет проще. Так откуда он ето увидит?Пишет ведь в среде (arduinoIDE) там оно само устанавливается.Только шьёт как то через Ж@пу. Могу предположить что при такой прошивке можно случайно сбить фьюзы как у меня было по-молодости.Тронул кнопку write fuse и записался мусор.Хорошо если "делёжка" включилась а то и лочил сдуру. Щас у меня TL-868 поэтому ничего не страшно да и фьюзы не трогаю лишний раз
Шьёт норамальным способом. Устанавливаться-то устанавливается, но ни что не мешает считать значение регистра и отправить это значение по тому же последовательному соединению для проверки. Так же можно проверить и значение макроса F_CPU. С фьюзами вроде как разобрались. Это конечно надо исправить, но эта ошибка не влияет на неправильную работу USART.
В смысле нормальным?Для чего писать и компилить в arduinoIDE а прошивать отдельно через "дудку"? В чём фишка-поясните?Я понимаю если в Студии или Кодвижн... Так а где и как это можно посмотреть?И Где взять НЕХ?У меня 1.5.5 буду очень признателен если наведёте
Наверное потому, что проект подразумевает единоразовую заливку прошивки, а в ide делаю потому, что это сокращает кол-во ошибок.