|A Level PIC16F88 01 PICkit3 02 MPLAB X 03 Config Bits 04 OSCCON 05 Simulator 06 TMR0IF Polling 07 Traffic Lights 08 Stepper Motor 09 TMR0IF Interrupts 0A Data Table 0B Digital I/O 0C ADC Input 0D Multiplex 0E Servo PWM >0F LED Matrix< 10 OLED Display|
PIC16F88 0F LED Matrix
The microcontroller can drive the rows with 9 or 10 mA per LED or port pin.
The columns might have as many as eight lit LEDs with up to 80 mA per colum. This exceeds the microcontroller pin current limit by a large margin.
The ULN2803A solves the problem by acting as the column driver.
There are not enough output pins on PORTA to drive the eight columns. A solution to this problem could be to use a microcontroller with more I/O pins.
Another solution us to use the 4017 decade counter as a shift register.
RA0 clocks this chip to move the single active output one place to the right.
RA1 is used to reset the counter at the correct moment. If it went out of sync for any reason, it would be corrected in a few milliseconds.
Each column is lit for 1/8th of the time. This makes the LEDs less bright. The LED current could be increased a little with this circuit without overloading the MCU.
A better solution would be to use a purpose designed driver chip. The MIC5891 chip is ideal but is beyond the scope of this tutorial.
Uning the MIC5891 chip, it becomes possible to control multiple displays.