цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Расширяем количество портов Arduino за счет чарлиплексирования

Расширяем количество портов Arduino за счет чарлиплексирования

Автор: Mike(admin) от 1-11-2014, 14:05

В сложных проектах с использованием микроконтроллеров зачастую возникают ситуации, когда не хватает линий ввода/вывода общего назначения для управления различными элементами системы, будь то светодиоды, реле, клавиатуры и прочие устройства. Конечно, в таких случаях можно задействовать разнообразные микросхемы расширения портов ввода/вывода, но они являются не такими уж дешевыми. Поэтому на помощь приходит один зарекомендовавший себя в деле расширения линий ввода/вывода метод. Он носит название чарлиплексирование.


Термин «чарлиплексирование» появился в 1995 году благодаря Чарли Аллену, работавшему в Maxim Integrated. Технология чарлиплексирования предназначена для управления большим количеством светодиодов несколькими выводами микроконтроллера. Этот метод основан на логике с тремя состояниями, что увеличивает эффективность по сравнению с обычным мультиплексированием.


Зачастую для проектов на Arduino не хватает портов ввода/вывода. Подключение ЖК-дисплея, нескольких датчиков, индикаторов и светодиодов не оставляет свободных выводов для чего-нибудь действительно полезного. К счастью, вы можете чарлиплексировать некоторое количество светодиодов, использовав лишь несколько портов ввода/вывода. Тем самым будут освобождены порты для других целей.


Ниже приведено изображение, на котором показано, как можно управлять шестью светодиодами с помощью только лишь трех портов ввода/вывода платы Arduino. В качестве портов для управления светодиодами здесь используются цифровые линии D5, D6 и D7. К этим линиям подключены сопротивления для ограничения тока на светодиодах во избежании их выхода из строя.


Расширяем количество портов Arduino за счет чарлиплексирования

Технология чарлиплексирования позволяет управлять количеством светодиодов n2−n, используя только n выводов платы Arduino. В данном случае мы задействуем три вывода, значит управлять будем шестью светодиодами. Здесь мы возьмем порты D5-D6-D7, чтобы организовать три состояния:


  • Высокий логический уровень (H): 5 В
  • Низкий логический уровень (L): 0 В
  • Уровень высокоимпедансного состояния (Z): отключен

В цифровой электронике логика с тремя состояниями помимо высокого и низкого логического уровней подразумевает третье, высокоимпедансное состояние (Z), которое, по сути, удаляет вывод из цепи. Это позволяет нескольким цепям делить между собой одну или несколько линий.


Ниже приведен скетч для Arduino, с помощью которого можно управлять шестью светодиодами с помощью трех линий ввода/вывода платы Arduino, как показано на рисунке выше.



#define LED_1 5
#define LED_2 6
#define LED_3 7
 
void setup()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
}
 
void loop()
{
set_pins(LED_1, LED_2);
delay(100);
set_pins(LED_2, LED_1);
delay(100);
set_pins(LED_3, LED_1);
delay(100);
set_pins(LED_1, LED_3);
delay(100);
set_pins(LED_2, LED_3);
delay(100);
set_pins(LED_3, LED_2);
delay(100);
}
 
void set_pins(int high_pin, int low_pin)
{
reset_pins();
pinMode(high_pin, OUTPUT);
pinMode(low_pin, OUTPUT);
digitalWrite(high_pin, HIGH);
digitalWrite(low_pin,LOW);
}
 
void reset_pins()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
}



© digitrode.ru


<Via>


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий