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

asadmasad

Members
  • Постов

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

  • Посещение

Сообщения, опубликованные asadmasad

  1. Принесли устройство, попросили написать коротенькую обработку. Устройство контролирует исполнительные устройства (автоматы, контакторы, цифровые датчики). Собрано на 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. Не могу понять, помогите.

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