In our previous article on using MAX7219 IC to build bigger display with LED, 7 segment segment LED, we talked about multiplexing. For future articles and guides on our website, it is important to know about multiplexing and charlieplexing. Multiplexing, Charlieplexing decreases pin count in a cluster of LEDs. Here is Basic Theory on Multiplexing vs. Charlieplexing & Arduino code.
Multiplexing vs. Charlieplexing : Basics & Example With Arduino
Display multiplexing is not like data transmission but the basic principles are same. Multiplexing are the techniques used to reduce the number of pins required to drive a component, usually in a cluster. In this multiplexing, the data lines of the displays are connected in parallel to a common databus on the microcontroller. The displays are addressed individually which allows use of lesser I/O pins than it would normally take to drive the same number of displays directly. Easiest way is adding two LED on a parallel wires when the LED’s cathode, anode are opposite to each other. So, in this way, we can only change the polarity of the wires to turn a specific LED on.
MAX7219 IC is of Maxim Integrated company and that company actually behind the idea of Charlieplexing. Hence almost all of their display driver IC supports charlieplexing, of course MAX7219 IC does.
---
We think, this graphics is simply great to explain the matter :
Charlieplexing is a method which uses the tri-state logic capabilities of microcontrollers to gain efficiency more than traditional multiplexing. Although this way is more efficient in terms of using I/O, there are issues which can cause it to be more complicated or impractical. These issues include duty cycle, current requirements and the forward voltages of the LEDs. In a charlieplexed array, every pin that’s not actively doing something is still hooked up to the LEDs through a weak connection. And while the connection is weak, it’s nonzero and may result in ghost effect.
Arduino Circuit
Look at this example :
and the code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #define LED_A 3 #define LED_B 4 #define LED_C 5 void setup() { pinMode(LED_A, INPUT); pinMode(LED_B, INPUT); pinMode(LED_C, INPUT); } void loop() { // loop through one at a time for (int i=1;i<=6;i++) { light_led(i); delay(500); } } void reset_pins() { pinMode(LED_A, INPUT); pinMode(LED_B, INPUT); pinMode(LED_C, INPUT); digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW); digitalWrite(LED_C, LOW); } void set_pins(int high_pin, int low_pin) { reset_pins(); // set the high and low pins to output pinMode(high_pin, OUTPUT); pinMode(low_pin, OUTPUT); // set logic as required digitalWrite(high_pin, HIGH); digitalWrite(low_pin, LOW); } void light_led(int led_num) { switch (led_num) { case 1: set_pins(LED_B, LED_A); break; case 2: set_pins(LED_A, LED_B); break; case 3: set_pins(LED_C, LED_B); break; case 4: set_pins(LED_B, LED_C); break; case 5: set_pins(LED_C, LED_A); break; case 6: set_pins(LED_A, LED_C); break; } } |
The above theory and example is enough for our next guides while reader who are need of more theory is advised to read some book.
Tagged With charlieplexing vs multiplexing , arduino led multiplexing , mulitplexing led code , charlieplexing arduino , charlieplexing with arduino , charlieplexing arduino led all on , charlieplexing 7 segment , charlieplexing , simple code arduino charlieplexing , charlie multiplexing