ATMega162 UART

Тема в разделе "Микроконтроллеры AVR", создана пользователем Kosss, 23 сен 2016.

  1. Kosss

    Kosss Нерд

    Прикупил ATMega162, чтобы разобраться в прошивке фьюзов и с другим мракобесием, но столкнулся с проблемой, на которую гугл мне ответа не дает. Дело вот в чем.
    У меня стоит внешний кварц на 16МГц, фьюзы выставлены под него, фьюз, отвечающий за деление на 8 частоты отключен. (delay отрабатывает верно по времени), но вот с UART творится фигня. Я устанавливаю на ATMеге частоту 9600, иду в монитор, а там одни яти вместо чисел и букв. Начинаю подбирать и выясняю, что частота, на которой комп различает все правильно-это 1200. Повторяюсь. Фьюз на деление отключен. Точно. Что посоветуете проверить?

    Итак. Что я уже проверил:
    1. Фьюз на деление отключен.
    2. Фьюзы на внешний кварц выставлен правильно
    3. В файле boards.txt стоит правильная частота 16000000L

    Благодарю за внимание. Хочу выслушать ваши предложения о том, как это исправить
     
  2. AlexU

    AlexU Гуру

    Реальные значения фьзов привидите, пожалуйста.
    Считать из контроллера их можно программой avrdude (так понял, что пользуетесь Arduino IDE, программа avrdude входит в комплект этой IDE).
     
  3. Kosss

    Kosss Нерд

    upload_2016-9-24_9-53-51.png
    или если надо в 16ричном виде то FB D8 FF
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Похоже что как раз включён.Попробуйте изменить его состояние.Потому как насчёт включён/отключён может быть двоякое толкование всё зависит от прошивающих программ.
    Дефолтные фьюзы High-99 Low-62 Если отключить "делёжку" High-99 Low-Е2
     
  5. AlexU

    AlexU Гуру

    И где какой fuse?
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Похоже что High-D8 Low-FB по другому нереально.
     
  7. ostrov

    ostrov Гуру

    Установил калькулятор фъюзов на планшет и забыл о проблемахи ошибках.
     
  8. AlexU

    AlexU Гуру

    Если так -- lfuse == FB, то делитель отключен, но установлен странный источник тактовой частоты -- кварц с частотой 0.9 - 3 МГц. lfuse должен быть FF или FE. Но всё-таки хотелось бы отталкиваться не от наших догадок, а от реальных данных.
    Но проверка fuse это только первый шаг, дело в том, что fuse CKDIV8 используется при старте контроллера для установки регистра CLKPR, отвечающего за деление тактовой частоты -- если CKDIV8 запрограммирован ( == 0), то при старте контроллера в регистр CLKPR приписывается такое значение, в соответствии с которым тактовая частота контроллера будет в 8 раз меньше реальной частоты, А потом этот регистр может измениться и соответственно измениться частота тактовой частоты контроллера -- она, например, может стать равной максимальной частоте кварца == 16 МГц несмотря на прошитый CKDIV8.
    Второй шаг это проверка регистра UBBR, отвечающего за скорость USART...
     
  9. ZAZ-965

    ZAZ-965 Гуру

    @Kosss, какой загрузчик прошивали? Собирали сами или взяли где-то готовый?
     
  10. Kosss

    Kosss Нерд

    Загрузчика нет. Шью по SPI
     
  11. Kosss

    Kosss Нерд

    Уже пробовал включать. Тогда если мигать светодиодом с delay(500) переключается он раз в 5 секунд. Я написал уже, что деление точно отключено.
     
  12. Kosss

    Kosss Нерд

    FB - дополнительный
    D8 -high
    FF - low
     
  13. AlexU

    AlexU Гуру

    Фьюзы настроены на использование внешнего кварца от 8 МГц и более без делителя частоты, т.е. микроконтроллер работает на частоте внешнего кварца 16 МГц.
    Остаётся проверить настройки скорости USART (регистр UBRR). Как инициализируется USART?
     
    Последнее редактирование: 25 сен 2016
  14. Kosss

    Kosss Нерд

    Пишу в arduinoIDE. Так что Serial.begin(9600);//по-нубски так сказать
     
  15. AlexU

    AlexU Гуру

    Всё же регистр UBRR (состоит из двух восьмибитных UBRRH и UBRRL) какое значение имеет?
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Почему?
    А зачем такая многоходовая комбинация?Смысл этого всего?Не проще ли сразу через RX/TX?Так и ошибку отловить будет проще.
    Так откуда он ето увидит?Пишет ведь в среде (arduinoIDE) там оно само устанавливается.Только шьёт как то через Ж@пу. Могу предположить что при такой прошивке можно случайно сбить фьюзы как у меня было по-молодости.Тронул кнопку write fuse и записался мусор.Хорошо если "делёжка" включилась а то и лочил сдуру. Щас у меня TL-868 поэтому ничего не страшно да и фьюзы не трогаю лишний раз
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Посмотрел здеся. У Вас D8 означает Переход к загрузчику после сброса а загрузчика то нет?Надо D9?
     
  18. AlexU

    AlexU Гуру

    Шьёт норамальным способом.
    Устанавливаться-то устанавливается, но ни что не мешает считать значение регистра и отправить это значение по тому же последовательному соединению для проверки. Так же можно проверить и значение макроса F_CPU.
    С фьюзами вроде как разобрались.
    Это конечно надо исправить, но эта ошибка не влияет на неправильную работу USART.
     
  19. Airbus

    Airbus Радиохулиган Модератор

    В смысле нормальным?Для чего писать и компилить в arduinoIDE а прошивать отдельно через "дудку"?
    В чём фишка-поясните?Я понимаю если в Студии или Кодвижн...
    Так а где и как это можно посмотреть?И Где взять НЕХ?У меня 1.5.5 буду очень признателен если наведёте
     
  20. Kosss

    Kosss Нерд

    upload_2016-9-25_22-25-6.jpeg
    Наверное потому, что проект подразумевает единоразовую заливку прошивки, а в ide делаю потому, что это сокращает кол-во ошибок.