asadmasad

ATMEGA2560. Опрос пинов

4 сообщения в этой теме

asadmasad    0

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

Изменено пользователем asadmasad

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    659

Как минимум это

PINL&(1<<4)  

надо заключить в скобки. И сделать защиту от дребезга.

Изменено пользователем BARS_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
asadmasad    0

Спасибо большое. Изменил на

#define A1 (PINL&(1<<0)) 
#define A2 (PINL&(1<<1))
#define A3 (PINL&(1<<2))

и всё заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...