Главная » 2016 » Апрель » 11 » Чарлиплексирование или расширяем количество портов
23:23
Чарлиплексирование или расширяем количество портов

Термин «чарлиплексирование» появился в 1995 году благодаря Чарли Аллену (Charlie Allen) , работавшему в Maxim Integrated, которая с тех пор выпускает микросхемы, реализующие алгоритм Чарли. Его технология чарлиплексирования предназначена для управления большим количеством светодиодов несколькими выводами микроконтроллера. Этот метод основан на логике с тремя состояниями, что увеличивает эффективность по сравнению с обычным мультиплексированием. Для N выводов, с использованием мультиплексирования «методом Чарли» можно индивидуально управлять N×(N–1) светодиодами. Как это работает?

Если на пин D7 подать высокий уровень, а на пин D8 — низкий уровень, то загорится светодиод Led2, если подать уровни наоборот, то загорится Led1. Все вроде просто. Посчитаем — с помощью N ножек мы можем управлять N*(N-1) светодиодами. В данном случае мы задействуем три вывода, значит управлять будем шестью светодиодами. Здесь мы возьмем порты D7, D8, D9, чтобы организовать три состояния:

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

 

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

Пример для Ардуино

#define LED_1 7
#define LED_2 8
#define LED_3 9
 
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);
}

 

Категория: Электроника | Просмотров: 1918 | Добавил: graftsv | Теги: Чарлиплексирование, Ардуино
Всего комментариев: 0
avatar