Сбилась частота тактовая или UART или что?
- Войдите на сайт для отправки комментариев
Добрый день! Сразу извиняюсь, если решение моей проблемы есть на форуме, но я его не нашел.
В один прекрасный день через USB перестали шиться все ардуины, что есть под рукой.
Про "все" я понял потом, потому сначала подумал на загрузчик конкретной платы. Взял "arduino as ISP" прошил загрузчик - плата всё равно по USB на шьётся, но зашилась так "Скетч" - "загрузить через программатор". Плата стала работать, но в 2 раза медленней и если прошить вывод в uart, то при запрограммированной скорости uart 9600 нормальное чтение порта идёт на 4800.
Дальше ещё несколько экспериментов: перепробовал несколько вариантов загрузчиков, 2 программатора (arduino as ISP и USBasp)
В файле boards.txt поменял f_cpu=16000000L на f_cpu=8000000L. В этом случае камень, который изначально на 16МГц стал работать правильно по времени. uart, зашитый на 9600 читается на 9600, но через USB платы писаться не хотят, пишутся все только через программатор. Тут понятно, что замена f_cpu - это неправильный костыль.
Вопрос. Что общее в данном случае может делить на 2, все платы если дело не boards и не в программаторе и загрузчике?
Arduino IDE переустанавливал.
Плата USB-uart в винде выглядит так: "Silicon Labs CP210X tо uart bridge". Таких плат у меня несколько, пробовал даже новую из упаковки. Не помогает.
Драйвера на неё сносил, переустанавливал.
Регистр делителя сбил, поди. С другим кодом пробовал? Если с ним так же, то переустанавливай IDE.
Фраза "все ардуины, что есть под рукой" ни о чём не говорит. Давайте конкретно название платы, модель МК, и прочие подробности.
Фраза "все ардуины, что есть под рукой" ни о чём не говорит. Давайте конкретно название платы, модель МК, и прочие подробности.
все на 328p. клоны pro mini, nano
Регистр делителя сбил, поди. С другим кодом пробовал? Если с ним так же, то переустанавливай IDE.
Пробовал разные коды, всегда медленнее в 2 раза
А где этот делитель прописан?
Для меня сейчас вообще не понятен такой момент: 2 разных компьютера, но на обоих есть портабл версия, синхронизированная чере яндекс диск. Так вот в один прекрасный момент они начали вести себя одинаково. Предполагаю, портабл не совсем портабл, а просто копия с когда-то установленной arduino-1.8.5 и она что-то в реестр пишет.
Так вот, удалял Arduino IDE, перезагружал, проходил CCleaner-ом, снова перезагружал, устанавливал последнюю версию и ничего не поменялось
Давайте прекратим панику и выражения типа "все". А будем разбираться с одной платой.
Покажите для начала фьюзы.
И ответьте на вопрос: Вы понимаете, что после операции "загрузить через программатор" она не должна шиться обычным способом, т.к. там нет загрузчика?
Ещё, может быть, неправильная плата выбрана
Это зависит от того какую прошивку он грузит через программатор.
Есть еще косяк. Если в обычную UNO залить бутлоадер от трех вольтовой микры, то бутлоадер загрузится и даже будет работать, но скорость UART будет в два раза выше:) Есть и обратные варианты .
А еще начинающие после работы с программатором неправильно возвращаются на UART бутлоадер, тупо не тот программатор в иде выбирают. А если еще учесть что NANO бывают со старым и новым бутлоадером, то ваще караул :)
Давайте прекратим панику и выражения типа "все". А будем разбираться с одной платой.
Покажите для начала фьюзы.
И ответьте на вопрос: Вы понимаете, что после операции "загрузить через программатор" она не должна шиться обычным способом, т.к. там нет загрузчика?
1) Конкретная плата: клон про мини 5в.
2) Выбираю в платах: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P, то есть ЭТО в тексте boards.txt:
## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P
Может плата 8 MHz, 3.3 v? Стабилизатор на 5 или 3.3? Или подать 7-9v на Vin и посмотреть тестером на Vcc.
Проверил. Точно 5В
Проверил. Точно 5В
а на кварце что написано?
и второе, может проц тактируется от внутреннего RC 8 мегагерц каким-то образом?
и третье - у простых простые неисправности у сложных - сложные (супруга подметила) )))
И ответьте на вопрос: Вы понимаете, что после операции "загрузить через программатор" она не должна шиться обычным способом, т.к. там нет загрузчика?
Это я понял, учту.
Вот сейчас выбираю плату "uno" и зашиваю Блинк с задержкой включения светодиода 1 сек через программатор. Получаю совсем не тот результат: 2 сек горит, 2 сек не горит. Что тут участвует в формировании частот?
Тот же результат при плате pro mini 16MHz
Но, если поставить плату pro mini 8MHz, то времена реальные
Но плата pro mini 5v, 16MHz...
Проверил. Точно 5В
а на кварце что написано?
и второе, может проц тактируется от внутреннего RC 8 мегагерц каким-то образом?
и третье - у простых простые неисправности у сложных - сложные (супруга подметила) )))
Вот про то, как тактируется процессор из фьюзов я не понял. В калькуляторе нет чётко 8МГц или 16МГц. Я выше привёл кусок из файла boards.txt. Там фьюзы написаны.
Для начала поменять кварц
Для меги328: Cкетч заставит мигать светодиод с частотой 0,5Гц (1сек горит -1 погашен) при кварце 16МГц. Если в 2 раза медленнее, значит кварц на 8. Системные настройки типа F_CPU не используются и не влияют.
Подключите ардуино к компьютеру, откройте диспетчер устройств, найдите свой виртуальный СОМ порт и посмотрите в свойствах
установленную скорость порта компьютера. Должна быть 9600. Было давно такое, весь мозг вынесло, пока не нашел причину.
попробуйте установить MiniCore по ссылке все хорошо описано и понятно. И богатый выбор настроек.
Запишите загрузчик, а потом попробуйте блинк залить.
какая версия IDE?
Подключите ардуино к компьютеру, откройте диспетчер устройств, найдите свой виртуальный СОМ порт и посмотрите в свойствах
установленную скорость порта компьютера. Должна быть 9600. Было давно такое, весь мозг вынесло, пока не нашел причину.
это влияет на загрузку, но к настройке МК никакого отношения не имеет - а тут вообще ничего не понятно...
UPD загляните в эту тему, хоть пробегитесь по ней немного Всё про ATmega328PB
Казалось бы, при чём здесь ICR1? Да ещё с таким ужасным значением.)
Наверное хотели особо точные часы сделать, но что то не сложилось.
If a fixed TOP value is required, the ICR1 Register can be used
У меня в протеусе "fixed TOP" не заработал, на железе не проверял.
TCCR1B=(1<<WGM13 | 1<<WGM12 | 1<<CS12);
ICR1=31250;
Обновлено. Для варианта с TOP value ICR1 надо использовать другое прерывание.
Значение нормальное 31250*256=8000000, а вот CTC режим не задействован.
Вот и я говорю, почему бы не написать хотя бы 8000000 / 256.
Помощь компилятору ...
Наверное хотели особо точные часы сделать, но что то не сложилось.
If a fixed TOP value is required, the ICR1 Register can be used
У меня в протеусе "fixed TOP" не заработал, на железе не проверял.
Код из поста #20 в протеусе работает на ура.
Протеус 8.5 SP0 (build 22067)
В примере действительно ошибка, вернее не ошибка, а лишняя строка. :) ICR там не на что не влияет -просто остался от другого примера. Таймер считает до 65535, и уходит в прерывание. что с учётом делителя как раз около секунды и получается.
А еще начинающие после работы с программатором неправильно возвращаются на UART бутлоадер, тупо не тот программатор в иде выбирают.
Стесняюсь спросить, а какой "правильный" программатор нужно выбирать?
У меня в протеусе "fixed TOP" не заработал, на железе не проверял.
Код из поста #20 в протеусе работает на ура.
Протеус 8.5 SP0 (build 22067)
Из поста #20 у меня тоже работает, я писал про "fixed TOP" не заработал,
Код прикреплен ниже.
Залил на плату - работает, в AtmelStudio7 тоже работает, а в Протеусе 8.6 SP2 светодиод не моргает.
Всем спасибо! Несколько интересных вещей тут прочитал, пригодятся.
Решил свою проблему переустановкой IDE и удалении папки c:\Users\USER\AppData\Local\Arduino15\. Грешу на неё, так как при обычной перестановке она оставалась, а в ней было 15 Гигов. В том числе много гигов логов и кэша.
После этого всё вернулось в нормальную работу.