пользовательское прерывание

AVR версия программы

пользовательское прерывание

Сообщение krian (krian) » 01 май 2019, 21:41

Мне нужно сделать генератор импульсов с изменяющейся частотой на таймере 0. И эти импульсы подсчитывать при обработке прерывания. Можно было бы сделать это с использованием встроенного прерывания по переполнению, а для изменения частоты в TCNT записывать начальное значение. Я сначала так и сделал. Проверенный метод. Но мне удобнее было бы сделать это с использованием режима СТС и организовать прерывания по совпадению регистра OCR. Сам режим я включил вставкой кодов Си и все работает, как надо.
Вопрос в том, как организовать прерывание. Команда на Си: interrupt [TIM0_COMPA] void timer0_compa_isr(void) - не воспринимается и компилятор дает ошибку. Я попробовал задать пользовательское прерывание во Flowcod таким образом:
В первом окне - название прерывания, а фактически имя вектора прерывания из даташит.
Во втором инициализация прерывания по совпадению регистра OCR0A: TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0);
В третьем подключение макроса при появлении флага прерывания:
if (TIFR0 & (1<<OCF0A)) //если срабатывает флаг прерывания
{
FCM_%n(); // запустить макрос
}

При компиляции выдается ошибка:
D:\Projects\ ... \soft\CTC_mode_T0.c:208: error: expected identifier or '(' before 'if'.

А у меня вообще нет строки с таким номером. Там программка маленькая - для тестирования. Кол-во строк вместе с комментами до 100 не доходит.
Не пойму, в чем ошибка? какой идентификатор? Скобки вроде правильно стоят.
Ник: krian
Имя: krian
(Харьков)
Заинтересованный
Заинтересованный
Информация о пользователе

Re: пользовательское прерывание

Сообщение mim (mim) » 02 май 2019, 06:28

Покажи.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: пользовательское прерывание

Сообщение andrewproffi (Андрей) » 02 май 2019, 07:33

BUILD - VIEW C - там увидишь ВЕСЬ свой код и нужную строку
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение krian (krian) » 02 май 2019, 16:57

andrewproffi писал(а):BUILD - VIEW C - там увидишь ВЕСЬ свой код и нужную строку

Андрей, если я написал, что нету такой строки, так наверно ж смотрел.
Ник: krian
Имя: krian
(Харьков)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение krian (krian) » 02 май 2019, 17:32

mim писал(а):Покажи.

Покажу. Только формат FCFX не принимается, а какой принимается - не сообщается. Почему бы список не оглашать при добавлении вложений?

Там вначале включается режим СТС, а в цикле в зависимости от состояния порта В.0 меняется частота импульсов и они перенаправляются на выход OC0А или ОС0В. Алгоритм во flowcode, а управление регистрами контроллера на Си. Применяемые макросы не несут смысла. Лишь бы чем-то заполнить.
Это все работает и проверено на макете. А что я поместил в окнах прерывания, я уже писал.
Ник: krian
Имя: krian
(Харьков)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение andrewproffi (Андрей) » 02 май 2019, 17:42

аа :o флоукод старше 5 версии... удачи
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение mim (mim) » 03 май 2019, 06:09

krian писал(а):Там программка маленькая - для тестирования.
Плохо что не хочешь выложить в 5 версии (и Протеус)... тем более что программа маленькая...
krian писал(а):А что я поместил в окнах прерывания, я уже писал.
Так я тоже писал как сделать свое прерывание - и что? Так я с примерами писал...
Даже если сто раз перечитать что ты написал - все равно не увидишь что ты сделал в реалиях... Я, например, не вижу где и как прописан вектор прерывания..., а он должен быть описан в кастоме...

Кстати... компилятор тебе и пишет - не определен вектор прерывания, а слово "before" в переводе "перед"... перед условием выполнения прерывания нужно описать процедуру прерывания - то бишь вектор прерывания...

Да... и еще, я так и не понял для какого МК? так как ты описал - это характерно для ПИКов (условия) там один (два) вектора прерывания, а для АВР все прерывания происходят по векторам...ну и т.д. и т.п...
Например... без всяких условий - это все описывается в Handler code
Код: выделить все
 ISR(TIMER0_COMP_vect)
        {
            FCM_T0_compare();
        }


В Хелпе для АВР есть пример для компаратора
Код: выделить все
Enable code:
SFIOR &= ~(1 << ACME); // disable multiplexer input
ACSR |= (1 << ACIE); // enable comparator interrupts - interrupt when comparator output toggles

Disable code:
ACSR &= ~(1 << ACIE); // disable comparator interrupts

Handler code:
ISR(ANA_COMP_vect) // analogue comparator interrupt vector
{
FCM_%n(); // call selected macro
}

И картинка есть...

В 5 версии для многих МК есть правленные файлы конфига уже с порписанными новыми прерываниями
INT.jpg

Вот так это может выглядеть
Int1.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение krian (krian) » 04 май 2019, 09:49

mim писал(а):
krian писал(а):Там программка маленькая - для тестирования.
Плохо что не хочешь выложить в 5 версии (и Протеус)... тем более что программа маленькая...


Это я не хочу??? Это оно не принимает! Я уже пробовал и с родными расширениями и другие подставлять, как стандартные типа ТХТ, ZIP, так и отфанарные АВС. Никаких не берет....
Есть файлы файлы cof, elf, fcm. Могу все прислать. Но что сделать, чтобы они были приняты?
У меня ATMega168.
Я посмотрел пример пользовательского прерывания на этом форуме: http://flowcode.info/examples-menu/27-c ... flowcode-2
Но там для PIC. С Пиками я не работал и не знаю в подробностях их внутреннего устройства, только общие представления. Я сделал аналогично для AVR. Вектор прерывания в пользовательском прерывании действительно не прописан, проверяется только флаг прерывания. Но само прерывание имеет такое же имя, как вектор прерывания. Но этот вектор и в примере не прописан. Я понимаю, что это не совсем правильно. Но в данной ситуации я не понимаю, куда этот вектор вставить?
Что касается версии. Мне как-то сразу попалась 6-я и в ней я начинал работать. Теперь не хочется потерять то, что там уже сделано. Еще я работаю в CVAVR и Algoritm Builder (графический ассемблер для AVR). У меня есть и 5-я версия Флоукода, но того, о чем вы написали, там нет, и вообще там нет многого, что есть в 6-й версии. Поэтому я ею не пользуюсь.
Ник: krian
Имя: krian
(Харьков)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение mim (mim) » 04 май 2019, 15:40

krian писал(а): Это оно не принимает! . Никаких не берет....Но что сделать, чтобы они были приняты?
Ну... как-то же у всех берет :) ... засунул все в архив и выложил... Все архивы принимает.

Ты бы хоть как то дернулся...

mega168.rar
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: пользовательское прерывание

Сообщение livrena (livrena) » 04 май 2019, 20:51

krian писал(а):вообще там нет многого, что есть в 6-й версии.

Пробуй скачать на форуме 8 версию, там есть много, чего нет в 6.
⏩В ветке flowcode 7. стр 6 ⏬
Ник: livrena
Имя: livrena
Ученик
Ученик
Информация о пользователе
Вернуться наверх

След.

Вернуться в Flowcode AVR

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

Пользователь просматривает форум: нет зарегистрированных пользователей