AC-DC и DC-DC преобразователи напряжения Top Power на складе ЭЛТЕХ

В Algorithm Builder прерывание Pin_Change

Новичок
 
Регистрация: 13.04.2023
Сообщений: 1
Репутация: 10
 
14.04.2023 11:03 #1
Прошу помощи с Algorithm Builder. Я новичёк в этом. Надо обрабатывать прерывания по изменению входов PCINT0...5
В Algorithm Builder есть прерывание Pin_Change
Даю ATtiny2313 разрешения в PCMSK на один вход, PCIE и глобальному прерыванию, но никакой реакции на изменение состояния входа не происходит.
Есть у кого опыт работы с этими прерываниями?
Оценка
КОМПЭЛ представляет заключительную публикацию в серии «АЦП азиатских производителей», посвященную аудио-АЦП. Это отдельный класс сигма-дельта преобразователей, оптимизированных для высококачественной оцифровки звука. В материале – анализ функциональных особенностей аудио-АЦП, а также их технических ограничений и практических аналогов от азиатских производителей, способных заменить популярные бюджетные решения западных брендов без потери надёжности.
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 382
373 0
3 0
 
14.04.2023 21:25 #2
Цитата:
Сообщение от AlexEst23
Прошу помощи с Algorithm Builder. ... Даю ATtiny2313 разрешения в PCMSK на один вход, PCIE и глобальному прерыванию, но никакой реакции на изменение состояния входа не происходит. ...
C Algorithm Builder не работал, но есть опыт использования внешних прерываний в WinAVR. Вот выдернул код из одного древнего проекта на Atmega48pa. Там был опрос матрицы 4x7 кнопок.
Код:
ISR(PCINT1_vect)
{
     sleep_disable();
     return;
}

ISR(PCINT2_vect, ISR_ALIASOF(PCINT1_vect));

void hardware_init(void)
{
     ...
     // Внешние прерывания
     PCICR |= _BV(PCIE1)|_BV(PCIE2);
     PCMSK1 |= _BV(PCINT8)|_BV(PCINT9)| 
     _BV(PCINT10)|_BV(PCINT11)|_BV(PCINT12);
     PCMSK2 |= _BV(PCINT16)|_BV(PCINT17)| 
     _BV(PCINT18)|_BV(PCINT19)|_BV(PCINT20);
     ...
}

uint8_t get_column_number(void)
{
     columns_1_rows_0();
     if(!(PIND & _BV(PD1))) return 1;
     if(!(PIND & _BV(PD2))) return 2;
     if(!(PIND & _BV(PD3))) return 3;
     if(!(PIND & _BV(PD4))) return 4;
     return 0;
}

uint8_t get_row_number(void)
{
     columns_0_rows_1();
     if(!(PINC & _BV(PC0))) return 1;
     if(!(PINC & _BV(PC1))) return 2;
     if(!(PINC & _BV(PC2))) return 3;
     if(!(PINC & _BV(PC3))) return 4;
     if(!(PINC & _BV(PC4))) return 5;
     if(!(PINC & _BV(PC5))) return 6;
     if(!(PIND & _BV(PD0))) return 7;
     return 0;
}

void columns_0_rows_1(void)
{
     columns_rows_to_Z();

     // Столбцы
     PORTD &= ~(_BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4));
     DDRD |= _BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4);

     // Строки
     PORTC |= _BV(PC0)|_BV(PC1)| 
     _BV(PC2)|_BV(PC3)|_BV(PC4)|_BV(PC5);
     PORTD |= _BV(PD0);
     DDRC &= ~(_BV(PC0)|_BV(PC1)| 
     _BV(PC2)|_BV(PC3)|_BV(PC4)|_BV(PC5));
     DDRD &= ~_BV(PD0);
}

void columns_to1_rows_to0(void)
{
     columns_rows_to_Z();

     // Столбцы
     PORTD |= _BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4);
     DDRD &= ~(_BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4));

     // Строки
     PORTC &= ~(_BV(PC0)|_BV(PC1)| 
     _BV(PC2)|_BV(PC3)|_BV(PC4)|_BV(PC5));
     PORTD &= ~_BV(PD0);
     DDRC |= _BV(PC0)|_BV(PC1)|_BV(PC2)| 
     _BV(PC3)|_BV(PC4)|_BV(PC5);
     DDRD |= _BV(PD0);
}

void columns_rows_to_Z(void)
{
     // Столбцы
     PORTD &= ~(_BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4));
     DDRD &= ~(_BV(PD1)|_BV(PD2)|_BV(PD3)|_BV(PD4));

     // Строки
     PORTC &= ~(_BV(PC0)|_BV(PC1)| 
     _BV(PC2)|_BV(PC3)|_BV(PC4)|_BV(PC5));
     PORTD &= ~_BV(PD0);
     DDRC &= ~(_BV(PC0)|_BV(PC1)| 
     _BV(PC2)|_BV(PC3)|_BV(PC4)|_BV(PC5));
     DDRD &= ~(_BV(PD0));
}

uint8_t get_button_number(void)
{
     uint8_t column = 0;
     uint8_t row = 0;

     column = get_column_number();
     row = get_row_number();
	
     // Если действительно кнопка нажата
     if(column!=0 && row!=0) 
     {
          _delay_ms(10);     // Антидребезг
          if(column == get_column_number())
          if(row == get_row_number())
          // Приведение к нулевому индексу в buttons_codes_mas[]
          return 7*(column-1)+row;
     }
     return 0;	
}
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc.
Оценка
Высокочастотные трансформаторы — сложный, но ключевой элемент в разработке индуктивных компонентов. Стандартные модели не всегда отвечают задачам современных проектов, а самостоятельная разработка требует значительных ресурсов и экспертизы. Специалисты КОМПЭЛ подготовили эксклюзивный документ, который поможет определить, когда заказные решения становятся оптимальным выбором для вашего проекта. Узнайте, как правильно подойти к созданию уникального компонента, избежать типичных ошибок и сэкономить ресурсы.
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 382
373 0
3 0
 
14.04.2023 22:03 #3
А вот более короткий пример из другого проекта, где на три входа подаются импульсы с датчиков перехода 3х фаз сети через 0.

Код:
inline void hardware_init(void)
{
     ...
     PCICR |= _BV(PCIE0);
     PCMSK0 |= _BV(PCINT0);
     DDRD &= ~(_BV(PD0)|_BV(PD1)|_BV(PD2));
     ...
}

ISR(PCINT2_vect)
{
     if(PIND & _BV(PD2))
     {
          ....
     }

     if(PIND & _BV(PD1))
     {
          ...
     }

     if(PIND & _BV(PD0))
     {
          ...
     }
          ...
}
В общем, разрешаются прерывания, настраиваются входы и всё работает.
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc.
Оценка
Электромеханические реле благодаря надёжности и устойчивости к внешним воздействиям остаются незаменимыми в промышленной автоматике, бытовой технике и энергооборудовании. В условиях ограничений на импорт такие азиатские производители как Hongfa, Sanyou, Forward, NCR и другие успешно заменяет западных поставщиков, предлагая аналогичное качество по более выгодной цене. КОМПЭЛ поддерживает обширную номенклатуру ЭМР на складе – более 600 тыс. штук и около 200 уникальных позиций – от проверенных производителей.
Новичок
 
Регистрация: 21.11.2008
Сообщений: 101
Репутация: 33
26 8
5 0
 
17.04.2023 15:51 #4
Цитата:
Сообщение от AlexEst23
Даю ATtiny2313 разрешения в PCMSK на один вход, PCIE и глобальному прерыванию, но никакой реакции на изменение состояния входа не происходит.
Есть у кого опыт работы с этими прерываниями?
У 2313 нет PCINT нужен более новый камень. Мега из ардуины.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 382
373 0
3 0
 
17.04.2023 20:44 #5
Цитата:
Сообщение от dedivan
У 2313 нет PCINT нужен более новый камень. Мега из ардуины.
Вы ошибаетесь, посмотрите даташит на ATtiny2313, страница 58.

Впрочем, ТС уже решил задачу на другом форуме. Судя по всему ему не хватало общего понимания работы External Interrupts на AVR.
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc.
Оценка
Новичок
 
Регистрация: 21.11.2008
Сообщений: 101
Репутация: 33
26 8
5 0
 
19.04.2023 18:17 #6
Цитата:
Сообщение от antonydublin
Вы ошибаетесь, .
Точно. У 2313 не было а у тини2313 уже есть.
Оценка
Ответ
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Часовой пояс GMT +3, время: 09:20.
Обратная связь РадиоЛоцман Вверх