asadmasad

Members
  • Публикации

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

О asadmasad

  • Звание
    Новенький

Информация

  • Город
    Саранск

Электроника

  • Стаж в электронике
    6-10 лет
  • Сфера радиоэлектроники
    Автоматика
  • Оборудование
    Agilent, R&S
  1. ATMEGA2560. Опрос пинов

    Спасибо большое. Изменил на #define A1 (PINL&(1<<0)) #define A2 (PINL&(1<<1)) #define A3 (PINL&(1<<2)) и всё заработало.
  2. Принесли устройство, попросили написать коротенькую обработку. Устройство контролирует исполнительные устройства (автоматы, контакторы, цифровые датчики). Собрано на atmega 2560. Для опроса используется порт L. Он сконфигурирован стандартно: // Port L initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRL=(0<<DDL7) | (0<<DDL6) | (0<<DDL5) | (0<<DDL4) | (0<<DDL3) | (0<<DDL2) | (0<<DDL1) | (0<<DDL0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTL=(0<<PORTL7) | (0<<PORTL6) | (0<<PORTL5) | (0<<PORTL4) | (0<<PORTL3) | (0<<PORTL2) | (0<<PORTL1) | (0<<PORTL0); Подтягивающие резисторы по 10к есть на самой плате. #define A1 PINL&(1<<0) #define A2 PINL&(1<<1) #define A3 PINL&(1<<2) #define A4 PINL&(1<<3) #define A5 PINL&(1<<4) В коде по прерыванию от таймера (желание заказчика) проверяем состояние пинов. if (!A1){printf("1");} // написал просто для проверки, чтобы видеть, что работает if (A1) {printf("2)";} Всё работает. При опросе следующих пинов появляется непонятная для моего недостаточного опыта фигня. if (!A2){printf("3");} if (A2) {printf("4");} Сначала нет ничего при появлении сигнала на А2, появляется 4, а при пропадании сигнала опять ничего. Пробовал считать состоянии пина в переменную int c = A2; printf("%i", c); Без сигнала идут 0, после появления появляется цифра 2, когда сигнал пропадает 0. Не могу понять, помогите.