AlexDX740 0 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба Всем доброго дня. При разработке программы столкнулся с тем, что контроллер работает быстрее чем нужно. Проверил fuse bits, все норм. Начал гонять прогу в avr studio и вижу что что то не так. Накидал простенькую программку с использованием задержки. Как видите, задержка 1с, а по таймингу прошло лишь 0.25с. В итоге отсылка символа идет не 1 раз в секунду , а 4р/с. Так и должно быть или что то не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба 28 минут назад, AlexDX740 сказал: В итоге отсылка символа идет не 1 раз в секунду , а 4р/с А символ отсылается правильный? Ну, то есть вы принимаете на второй стороне именно то, что отсылаете? Я клоню к тому, что совпадает ли скорость передачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба Как ни странно,да. То есть не совсем. При использовании более сложной программы отсылается мусор, а в этой простенькой шлется символ и прекрасно принимается терминалкой, только 4 символа в секунду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба Значит процессор у вас работает на правильной частоте и осталось разобраться, почему _delay_ms() считает количество тактов неправильно. Вероятно, где-то в ее потрохах теряется/переназначается F_CPU. Никакой ругани при компиляции не было? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 19 июля, 2020 Опубликовано 19 июля, 2020 (изменено) · Жалоба 57 minutes ago, Сергей Борщ said: Значит процессор у вас работает на правильной частоте и осталось разобраться, почему _delay_ms() считает количество тактов неправильно. Вероятно, где-то в ее потрохах теряется/переназначается F_CPU. Никакой ругани при компиляции не было? Вот и я о чем, с какого перепугу _delay_ms() стала считать не правильно? Весь инет забит прогами мигания светодиодом и у всех работает правильно, а у меня нет. Вот, добавил себе для наглядности, прогнал в протеусе - такая же фигня. Мигает чаще. Появляется устойчивое желание снести студию и установить заново. Изменено 19 июля, 2020 пользователем AlexDX740 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба 17 minutes ago, AlexDX740 said: Появляется устойчивое желание снести студию и установить заново. Да проверьте же уже значение макроса F_CPU. Я давно работал с avr, и помню, что этот макрос нужен для правильного расчёт программной задержки. На частоту работы самого МК он никак не влияет. Он задаётся либо в свойствах проекта, либо в опциях makefile. В любом случае, компилятору он передаётся ключом -DF_CPU=xxxxxxx. Примерно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба 29 minutes ago, haker_fox said: Да проверьте же уже значение макроса F_CPU. Я давно работал с avr, и помню, что этот макрос нужен для правильного расчёт программной задержки. На частоту работы самого МК он никак не влияет. Он задаётся либо в свойствах проекта, либо в опциях makefile. В любом случае, компилятору он передаётся ключом -DF_CPU=xxxxxxx. Примерно так. Частота задана правильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NStorm 0 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба У вас F_CPU задается и через Makefile и в коде. Это неправильно - должен ворнинг выскакивать, что F_CPU уже был определен ранее. Есть такое? Попробуйте еще тулчейн обновить и студию на него "натравить": https://www.microchip.com/mymicrochip/filehandler.aspx?ddocname=en607654 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба На минимальных оптимизациях dekay_ms врет... Но там вроде предупреждение должно быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 июля, 2020 Опубликовано 19 июля, 2020 · Жалоба 6 часов назад, AlexDX740 сказал: Частота задана правильно Верим, но все же повторю вопрос: 8 часов назад, Сергей Борщ сказал: Никакой ругани при компиляции не было? Вся реализация _delay_ms() находится в заголовочном файле util/delay.h в виде исходного кода. Если ругани при компиляции не было - предлагаю в начало этой функции вставить строчку unsigned long volatile Test = F_CPU; поставить точку останова после этой строки или дойти до нее по шагам и посмотреть на содержимое переменной Test. Если оно вдруг будет не равно 8000000 - надо разбираться, кто и как к этому месту подменил F_CPU. Я сам использую эту функцию и смею заметить - при правильном обращении она работает правильно. 7 минут назад, GenaSPB сказал: На минимальных оптимизациях dekay_ms врет.. В бОльшую сторону, потому что там в начале идут вычисления с плавающей точкой, которые при малой оптимизации происходят на этапе исполнения. Тут же оно работает быстрее, так что оптимизация не при чем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба Извиняюсь,чуть выпал из темы. При компиляции никакой ругани. Все гладко, кроме частоты моргания. Скачал код точно такой как мой с инета, прошиваю, все четко. Вставляю его в студию, компилю и понеслось. Сейчас пробую переставить студию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NStorm 0 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 48 минут назад, AlexDX740 сказал: При компиляции никакой ругани. Вот явно где-то у вас "испорченый" файлик лежит, который делает #undef F_CPU и заменяет его на своё значение. Потому что иначе ругаться (warning) должно с -Wall. Не знаю как у этой старой студии 4ой было, но с новыми тулчейн отдельно ставится. Его тоже переставляйте, если и тут также. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба Ну что ж. Переустановка студии и тулчайна не помогла. _delay_ms(1000) продолжает считать как 250. Значение частоты при работе программы не меняется. Куда копать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 20 июля, 2020 Опубликовано 20 июля, 2020 · Жалоба 2 часа назад, AlexDX740 сказал: Куда копать? покажите содержимое _delay_ms(). Если выложите куда-нибудь инсталяшку своей студии и компилятора - попробую поставить в виртуальную машину, гляну. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexDX740 0 20 июля, 2020 Опубликовано 20 июля, 2020 (изменено) · Жалоба _delay_ms() находится в delay.h, и в delay_basic.h . Инсталяшку попробую сделать.(хотя че её делать, она взята с официального сайта производителя) У меня стойкое ощущение что дело именно в неправильной работе этой функции. Сейчас хочу проверить в программке с таймером как будут считаться такты. Изменено 20 июля, 2020 пользователем AlexDX740 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться