Перейти к содержанию
    

Проблемы с тактовой частотой ATmega 8

Всем доброго дня. При разработке программы столкнулся с тем, что контроллер работает быстрее чем нужно. Проверил fuse bits, все норм.

Screenshot-19_07.2020_9_58.01200.thumb.jpg.09f272890a9502d07b799e288457d336.jpg

Начал гонять прогу в avr studio и вижу что что то не так. Накидал простенькую программку с использованием задержки. Как видите, задержка 1с, а по таймингу прошло лишь 0.25с. В итоге отсылка символа идет не 1 раз в секунду , а 4р/с. Так и должно быть или что то не так?

Screenshot-19_07.2020_9_53.21400.thumb.jpg.ca6c4550a66abf90c62f2d6c3efc620f.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, AlexDX740 сказал:

В итоге отсылка символа идет не 1 раз в секунду , а 4р/с

А символ отсылается правильный? Ну, то есть вы принимаете на второй стороне именно то, что отсылаете? Я клоню к тому, что совпадает ли скорость передачи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как ни странно,да. То есть не совсем. При использовании более сложной программы отсылается мусор, а в этой простенькой шлется символ и прекрасно принимается терминалкой, только 4 символа в секунду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит процессор у вас работает на правильной частоте и осталось разобраться, почему _delay_ms() считает количество тактов неправильно. Вероятно, где-то в ее потрохах теряется/переназначается F_CPU. Никакой ругани при компиляции не было?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 minutes ago, Сергей Борщ said:

Значит процессор у вас работает на правильной частоте и осталось разобраться, почему _delay_ms() считает количество тактов неправильно. Вероятно, где-то в ее потрохах теряется/переназначается F_CPU. Никакой ругани при компиляции не было?

Вот и я о чем, с какого перепугу _delay_ms() стала считать не правильно? Весь инет забит прогами мигания светодиодом и у всех работает правильно, а у меня нет. Вот, добавил себе для наглядности, прогнал в протеусе - такая же фигня. Мигает чаще.Screenshot-19_07.2020_13_52.35206.thumb.jpg.a78485756e56d8530c2b9daec328d79a.jpgScreenshot-19_07.2020_13_53.40112.thumb.jpg.4b31dd1517e2ae3574abc0742f17fce3.jpg

 

Появляется устойчивое желание снести студию и установить заново.

 

 

 

 

Изменено пользователем AlexDX740

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, AlexDX740 said:

Появляется устойчивое желание снести студию и установить заново.

Да проверьте же уже значение макроса F_CPU. Я давно работал с avr, и помню, что этот макрос нужен для правильного расчёт программной задержки. На частоту работы самого МК он никак не влияет. Он задаётся либо в свойствах проекта, либо в опциях makefile. В любом случае, компилятору он передаётся ключом -DF_CPU=xxxxxxx. Примерно так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, haker_fox said:

Да проверьте же уже значение макроса F_CPU. Я давно работал с avr, и помню, что этот макрос нужен для правильного расчёт программной задержки. На частоту работы самого МК он никак не влияет. Он задаётся либо в свойствах проекта, либо в опциях makefile. В любом случае, компилятору он передаётся ключом -DF_CPU=xxxxxxx. Примерно так.

Частота задана правильно

Screenshot-19_07.2020_14_50.46506.thumb.jpg.954b1043b71be2eee7391fd9c4ea5ff5.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас F_CPU задается и через Makefile и в коде. Это неправильно - должен ворнинг выскакивать, что F_CPU уже был определен ранее. Есть такое?

Попробуйте еще тулчейн обновить и студию на него "натравить": https://www.microchip.com/mymicrochip/filehandler.aspx?ddocname=en607654

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На минимальных оптимизациях dekay_ms врет... Но там вроде предупреждение должно быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, AlexDX740 сказал:

Частота задана правильно

Верим, но все же повторю вопрос:

8 часов назад, Сергей Борщ сказал:

Никакой ругани при компиляции не было?

 

Вся реализация _delay_ms() находится в заголовочном файле util/delay.h в виде исходного кода. Если ругани при компиляции не было - предлагаю в начало этой функции вставить строчку

unsigned long volatile Test = F_CPU;

поставить точку останова после этой строки или дойти до нее по шагам и посмотреть на содержимое переменной Test. Если оно вдруг будет не равно 8000000 - надо разбираться, кто и как к этому месту подменил F_CPU.

Я сам использую эту функцию и смею заметить - при правильном обращении она работает правильно.

7 минут назад, GenaSPB сказал:

На минимальных оптимизациях dekay_ms врет..

В бОльшую сторону, потому что там в начале идут вычисления с плавающей точкой, которые при малой оптимизации происходят на этапе исполнения. Тут же оно работает быстрее, так что оптимизация не при чем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь,чуть выпал из темы. При компиляции никакой ругани. Все гладко, кроме частоты моргания. Скачал код точно такой как мой с инета, прошиваю, все четко. Вставляю его в студию, компилю и понеслось. Сейчас пробую переставить студию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 минут назад, AlexDX740 сказал:

При компиляции никакой ругани.

Вот явно где-то у вас "испорченый" файлик лежит, который делает #undef F_CPU и заменяет его на своё значение. Потому что иначе ругаться (warning) должно с -Wall.

Не знаю как у этой старой студии 4ой было, но с новыми тулчейн отдельно ставится. Его тоже переставляйте, если и тут также.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну что ж. Переустановка студии и тулчайна не помогла. _delay_ms(1000) продолжает считать как 250. Значение частоты при работе программы не меняется. Куда копать?

Screenshot-20_07.2020_16_01.19231.thumb.jpg.6966119e7048694bec0218ae13d5fda8.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, AlexDX740 сказал:

Куда копать?

покажите содержимое _delay_ms().

Если выложите куда-нибудь инсталяшку своей студии и компилятора - попробую поставить в виртуальную машину, гляну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_delay_ms() находится в delay.h,  и  в delay_basic.h . Инсталяшку попробую сделать.(хотя че её делать, она взята с официального сайта производителя)

У меня стойкое ощущение что дело именно в неправильной работе этой функции. Сейчас хочу проверить в программке с таймером как будут считаться такты.

Изменено пользователем AlexDX740

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...