Например TDA7294

Форум РадиоКот • Просмотр темы - Таймеры/счётчики в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт ноя 28, 2025 13:38:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1387 ]     ... , , , 54, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 12:39:53 
Вы написали что:
Цитата:
Ну и прерывания лучше включать ДО включения таймера.

Не знаю как в Си, но в ассемблере разницы не будет, когда было произведено разрешение прерывания – хоть ДО, хоть ПОСЛЕ (разницы никакой), оба варианта будут работать одинаково.


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 12:47:42 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
А я и не писал, что работать не будет )
Это чтобы на грабли не наступать потом, когда программа будет более сложная и в промежутке между включением таймера и прерывания, может успеть много чего произойти. Или прерывание будет не по переполнению, а скажем по захвату или CTC или еще другой вариант, когда прерывание успеет "стрельнуть" еще до включения самого прерывания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 14:01:28 
Открыл глаза
Аватар пользователя

Зарегистрирован: Чт июл 23, 2020 20:59:01
Сообщений: 42
Откуда: СевКавТВ
Рейтинг сообщения: 0
ChipCard, оптимизация какого уровня? Поставьте что-то более значимое, чем nop в ISR, может оптимизатор выкидывает? Ну и прерывания лучше включать ДО включения таймера.


Переписал немного. Оптимизатор отключил.

Записал видео рабы симулятора. https://yadi.sk/i/7fZX9BEP_lh3xw

Только я принудительно "добавил" в регистр счёта, чтобы не полдня кликать...

Добавлено after 1 minute 15 seconds:
Какой МК используете?


Atmega8

Добавлено after 3 minutes 40 seconds:
вполне может быть. ибо ассемблерную вставку nop-a надо делать так:
Код:
volatile asm ("nop");


Так ругается при компиляции


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 14:22:14 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Цитата:
Только я принудительно "добавил" в регистр счёта, чтобы не полдня кликать...

Вы видете, что у меня переменная cnt с volatile была написана? А вы взяли и убрали это ключевое слово. Так работать тоже не будет. cnt обязательно volatile!
А чтобы пол дня не кликать, есть breakpoint'ы, хотя не в этом дело конечно.

Добавлено after 1 minute 22 seconds:
И в locals добавьте cnt сразу, чтобы видеть его значение.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 14:50:20 
Открыл глаза
Аватар пользователя

Зарегистрирован: Чт июл 23, 2020 20:59:01
Сообщений: 42
Откуда: СевКавТВ
Рейтинг сообщения: 0
Так работать тоже не будет. cnt обязательно volatile!


А почему так? Можете в трёх словах объяснить?


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 16:12:03 
Atmega8

Вот тестовая прошивка для Мега8 (тактируется на заводских установках – 1 МГц). Светик подключён к выводу РВ0. Переключение его организовано в прерывании по переполнению таймера0. Если светик мигает, значит прерывание отрабатывает. Если прерывание не происходит – значит светик всегда будет потухший.
Вложение:
Test Timer_0.hex


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 17:18:10 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 1
А почему так? Можете в трёх словах объяснить?

Все переменные, изменяемые в прерывании должны объявляться как volatile. Компилятор не знает когда возникает прерывание. С его точки зрения это мертвый код, в который нет переходов из других частей кода. Поэтому переменную он может "заоптимизировать" и просто выкинуть. Т.к. внутри прерывания она не используется, а снаружи с его точки зрения к ней если и обращаются, то прерывание там ничего не поменяет. Причем сделать он это может на любом уровне оптимизаций.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 18:10:47 
Открыл глаза
Аватар пользователя

Зарегистрирован: Чт июл 23, 2020 20:59:01
Сообщений: 42
Откуда: СевКавТВ
Рейтинг сообщения: 0
Вот тестовая прошивка для Мега8

Её как-то можно залить в Atmel studio? :?

Добавлено after 2 minutes 38 seconds:
NStorm, спасибо за пояснение!


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 18:30:26 
Её как-то можно залить в Atmel studio? :?

Это же не исходник, а скомпилированный файл для МК. Вам расширение .hex не о чём не говорит? ... Прошивка заливается в МК.


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 18:49:59 
Открыл глаза
Аватар пользователя

Зарегистрирован: Чт июл 23, 2020 20:59:01
Сообщений: 42
Откуда: СевКавТВ
Рейтинг сообщения: 0
Вам расширение .hex не о чём не говорит? ... Прошивка заливается в МК.

Мне то всё говорит, но зачем тогда она мне нужна? Моя цель разобраться почему не работает прерывание в симуляторе, а не на железе. Я где-то писал, что не работает в МК? :tea:


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 19:41:36 
Моя цель разобраться почему не работает прерывание в симуляторе, а не на железе.

То есть важнее, чтобы работало в симуляторе, а железо не важно? Так бы сразу и писал… :wink:
ChipCard писал(а):
Я где-то писал, что не работает в МК? :tea:

Дык и про симулятор ни слово: :dont_know:
Подскажите, в чём может быть проблема? После переполнения таймер 0 и установки флага TOV0 микроконтроллер не уходит по вектору прерывания. счётчик сбрасывается и начинает отсчёт дальше, флаг TOV0 остается установленным (((


Впрочем, не важно… более не отвлекаю Вас от занятий разбора работы симулятора. :)


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 20:47:01 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2133
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18432
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ChipCard писал(а):
Так ругается при компиляции
ну, если честно, я мог и запамятовать... вероятно, надо писать asm volatile ("nop");

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 21:17:58 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 885
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6177
Откуда: Minsk
Рейтинг сообщения: 0
Это же не исходник, а скомпилированный файл для МК. Вам расширение .hex не о чём не говорит? ... Прошивка заливается в МК.

Легко. Не знаю, как в Atmel Studio, новейшими версиями уже не пользуюсь, но в AVR Studio hex просто загружается. Правда, отлаживать в симуляторе намного сложнее, вместо осмысленных меток и имён переменных - числа.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 21:20:06 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Симулятор не всегда полностью отрабатывает поведение мк. Это нужно помнить всегда. Здесь нужно отталкиваться от того как реально работает мк.
Сначала нужно правильно настроить периферия ядра. Порядок следующий. Сначала выставить нужные режимы. Потом разрешаем прерывания (у периферии) . Глобально прерывания включаем, как вы сами решите. Но, не ранее, чем настроите правильно периферию. Показываю пример. Внешнее прерывание. Если у вас включено глобально прерывания, то оно и произойдёт, даже раньше чем вы начнёте выставлять режим прерывания. Потому что может оказаться, что на пине низкий уровень. А по умолчанию режим внешнего прерывания по низкому уровню. Также может получиться и с таймерами.
Поэтому,в своей программе переделайте все по моим рекомендациям.
Также правило. Никаких магических чисел. Народ, я на даче, пишу с телефона. Покажите ему как выставляются биты регистров ввода вывода с понятными обозначения и, а не числами.
1<<CS0 к примеру.


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 22:29:18 
Глобально прерывания включаем, как вы сами решите. Но, не ранее, чем настроите правильно периферию. Показываю пример. Внешнее прерывание. Если у вас включено глобально прерывания, то оно и произойдёт, даже раньше чем вы начнёте выставлять режим прерывания. Потому что может оказаться, что на пине низкий уровень. А по умолчанию режим внешнего прерывания по низкому уровню. Также может получиться и с таймерами.

Спорное утверждение… :)) если не настроено внешнее прерывание, то с какого перепугу взведётся флаг на прерывание? :shock: Чтобы не быть голословным, можно легко это проверить на железе… берём тини13 (он остался в девборде от предыдущих тестов)… пишем коротенькую программу:
Устанавливаем адрес стека, устанавливаем порты (РВ0 – вход; РВ1 – вход; РВ2 – вход; РВ3 – на выход; РВ4 – вход;), на выводе РВ1 подтягиваем внутренний резистор, далее разрешаем прерывания (I = 1), далее очищаем SRAM, все рабочие регистры, и только потом настраиваем внешнее прерывание (INT0 контролировать низкий уровень), в прерывании по INT0 устанавливаем в PortB.3 единицу. На вывод РВ3 подключаем светик… заливаем программу в МК и наблюдаем работу светика… и сколько бы раз не перезагружали МК – светик не загорается, пока принудительно на выводе РВ1 не появится низкий уровень после настройки внешнего прерывания (INT). Вот такая картина маслом… даже больше скажу: разрешайте прерывание даже когда не настроены выводы – это не чего не меняет (прерывание не будет работать) так как нет этому никаких предпосылок. :)
Вложение:
Test_INT.hex


ЗЫ. Тини13 тактируется на заводских установках (1,2 МГц)


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 22:47:59 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Вы невнимательно прочитали моё сообщение. Внешнее прерывание. Пример. Выставляем флаг разрешения внешнего прерывания. И так как по умолчанию режим по низкому уровню, прерывание сразу отработает. Более подробно я распишу позже, как я уже написал, я на даче, ни компа, ни даташитов. Хотя, следите за этим сообщением, кое что на телефоне есть. Если что, завтра буду в городе и распишу подробнее. Со скринами.
Смотрите. ATTINY25. Глобально разрешаем прерывания. Как у автора. Выставляем в регистре GIMSK флаг INT0. В регистре MCUCR флаги ISC00 ISC11 отвечают за режим внешнего прерывания. По умолчанию режим по низкому УРОВНЮ. И тадам. Прерывание отрабатывает. Именно по этому, при настройке регистров ввода вывода СНАЧАЛА настройка режимов, и только потом выставление флагов разрешения соответствующих прерываний.
Я с 2007 года с AVR работаю. Первые несколько лет на асме, потом на си.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 23:11:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2133
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18432
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
После сброса все порты МК настроены на вход без подтяжек, и какой там будет уровень, известно только разработчику схемы обвязки. Поэтому сработает прерывание или нет, зависит от обвязки, а не от порядка инициализации портов и т.п.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 23:25:31 
Вы невнимательно прочитали моё сообщение. Внешнее прерывание. Пример. Выставляем флаг разрешения внешнего прерывания. И так как по умолчанию режим по низкому уровню, прерывание сразу отработает.

Не правда… прерывание сработает только тогда, когда будет разрешено прерывание бит I=1 в регистре SREG. До этого не будет никаких прерываний не зависимо от настроек внешнего прерывания. Если после настройки внешнего прерывания будет зафиксирован низкий уровень, то взведётся только флаг INTF0 и будет ожидать разрешение от бита I и если это флаг (INTF0) сбросить перед установкой I=1 в регистре SREG, то никаких прерываний не будет до определения нового уровня по INT0.
Вот пример2:
Устанавливаем адрес стека, настраиваем внешнее прерывание (INT0 контролировать низкий уровень), в прерывании по INT0 устанавливаем в PortB.3 единицу, далее очищаем SRAM, все рабочие регистры, затем устанавливаем порты (РВ0 – вход; РВ1 – вход; РВ2 – вход; РВ3 – на выход; РВ4 – вход;), на выводе РВ1 подтягиваем внутренний резистор, и вот перед разрешением прерывания (I = 1) – делаем «лёгким движением руки» очистку флага INTF0, а уже затем разрешаем прерывание I=1 и всё нормуль – светик даже не думает зажигаться.
Вложение:
Test_INT_V2.hex

Цитата:
Я с 2007 года с AVR работаю. Первые несколько лет на асме, потом на си.

Я Вас поздравляю... :) но никто не идеален – людям свойственно ошибаться. :beer:


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 23:34:49 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Вы как на токовище, лишь бы послушать звук собственного голоса. У тарища прерывания разрешены с самого начала, затем TIMSK, затем режим таймера. С таймером тоже можно отхватить.
Поэтому,пожалуйста,читайте внимательно. Нового по архитектуре мк AVR мне ничего не покажете. Поверьте. Исключение, последние модели, производства MICROCHIP.


Вернуться наверх
 
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июл 26, 2020 23:47:48 
Вы как на токовище, лишь бы послушать звук собственного голоса.

Какой звук…? :facepalm: Я вам реальный прошивки даю (как факт) для проверки на железе, которые опровергают Ваши надуманные утверждения. Что может быть весомее, Ваши просто слова или реальные примеры? :facepalm:


Вернуться наверх
   
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1387 ]     ... , , , 54, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y