So what is a Dot Matrix Display and what is it used for? I decided that for the basics I would once again do a video, as especially this time the visual aspect of a video makes this a lot easier to understand and a lot cooler! So without further ado here is me from the past telling you how this thing works on a basic level!
I thought it would be best to start with an explanation of what each of the Integrated Circuits do, as then we can better understand how all of these different packages are tied together to create the setup you have seen in the video. As stated in the video there are two 74HC595 Shift Registers and a single ULN2003A Transistor Array (as well as a BC639 Transistor to increase the transistor count to 8), as well as the Arduino Micro Microcontroller and the Dot Matrix Display. All of these chips tie together to make two main sections in the system, the column driver and the row driver sections. Both of these sections rely on a 74HC595 Shift Register so lets start with that!
It is important to note that this chip was put in series with 220 Ohm Resistors on each of the rows to limit the amount of current being drawn by the display; so that nothing in the circuit blows due to over current.
Finally the Dot Matrix Display is essentially another part that makes life easier for us. It wires up the LED's inside in such a way that only 16 pins are required to interface every LED on the whole display. Once again without this pin saving mechanism we would need a Microcontroller with a much higher IO count to drive the display even with the Shift Registers we have already implemented.
If you want more information on any of these chips then there are already great tutorials online on the Arduino Site and Forums detailing exactly how to use these chips with your Microcontroller!
So, how is this all tied together to make a fully functioning system?
Well as explained in the video, essentially there is a column driver section and a row driver section. The row driver section is made up of the 74HC595 Shift Register and the ULN2003A transistor array (as well as an extra transistor to bump up the amount of transistors to eight. This section is acting as a current sink as well as an inverter for the signals coming from the 74HC595. This is so we can actually create a 2V potential difference across the LED's in the matrix. The column section is literally a 74HC595 driving the columns high, again so that the correct potential difference can be created across the LED's in the display.
In terms of current this is fine as we are not drawing enough current through each of the chips for it to affect them. If you wanted something brighter and consequently higher power, you would possibly have to use a transistor array for the column driver as well. Except this one would direct correctly to Vcc rather than ground.
Finally we are using the Arduino to provide all of the signals that will actually drive the display and create our images! The code that is running on Arduino can be found in the downloads section of this website, so be sure to look there if you want to use the code I wrote in your own project. Bare in mind that you will have to use pretty much the same setup as me if you want to use my code without adapting it to your specific needs. The important part of the code that needs to be addressed here is the shiftOut() command that is regularly seen throughout the code. This is a function available in the Arduino libraries that makes it extremely easy to shift serial data out to the shift registers in the system. All you need to provide is the data pin, clock pin, the order in which you want to shift out the bits (i.e Least Significant Bit First or Most Significant Bit First) and the data you actually want to shift out! For more information please see this link:
Thanks for reading!
Sam