Hi, Konanii here.
It's Halloween today.
I made a Large 8×8 LED Dot Matrix before.
The resistor attached to limit the current of the LED is 100Ω.
When covered with That for diffusing and blocking light, the brightness of the LEDs seems a little darker in the daytime.
I could use a higher current, but
The I/O of this microcontroller (ATmega328P) should only have a current of up to 40mA.
Datasheet(page 258).
Transistor Arrays
So I will add a transistor array.
In this case, I will use the TBD62783APG.
The pin header on the microcontroller side was increased by one pin because there are two power supply pins.
Power supply
Adding a transistor array will hardly change the brightness.
So raise the voltage for the LED power supply.
This is where a step-up DC/DC converter is used.
I can use this to create a voltage from the Arduino Nano's 5V.
Turning the blue multi-turn, semi-fixed volume allows you to change the voltage to tens of volts.
Immediately connect it to the LED PCB.
Oh My Gosh
I forgot which way to turn the volume to increase the voltage, so I let the maximum voltage flow.
I checked the maximum voltage with no load and it seems to go out to 44.4V. That would be death, right?
Originally, it was for 5V, which can only carry a little current, so the voltage can only go up to about 12 volts with the LED connected.
I had the power on for so long that the vertical row on the far right was wiped out.
Well, not all of the LEDs were killed, so I'll replace the LEDs anyway.
So I replaced all the LEDs in the right row with new ones, but they are not bright at all.
When I checked the resistance of the broken resistors one by one, I found that 10KΩ had changed to over 2MΩ.
So the resistance is broken too.
I removed the broken resistor and replaced it with a new 100Ω resistor. Then.
It's fixed. It seems that the resistance was broken along with LEDs.
So I replaced the whole thing that was broken and fixed it. I did it !!
You all need to be careful not to overload the current !
Then I adjusted it with a proper tester, watching the voltage, and set the voltage to about 6.5V.
Bright !
It's a lot brighter than before. It's easy to take pictures.
You can see the video below. There is no sound.
I'm glad I chose the light bulb color.
The program is below.
int speed = 5; #define SPACE 10 #define GRAPHIC_LENGTH 32 uint8_t graphic_data[8 * GRAPHIC_LENGTH] = { /* 0b00000000, // ' ' 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, */ 0b11000011, // 'H' 0b11000011, 0b11000011, 0b11111111, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b00000000, // 'a' 0b00000000, 0b00111100, 0b00000110, 0b00111110, 0b01100110, 0b01100110, 0b00111011, 0b00000000, // 'p' 0b01101110, 0b01111011, 0b01110011, 0b01110011, 0b01101110, 0b01100000, 0b01100000, 0b00000000, // 'p' 0b01101110, 0b01111011, 0b01110011, 0b01110011, 0b01101110, 0b01100000, 0b01100000, 0b00000000, // ' ' 0b00000000, 0b01100011, 0b01100011, 0b00110110, 0b00011100, 0b00111000, 0b01110000, 0b00000000, // ' ' 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11000011, // 'H' 0b11000011, 0b11000011, 0b11111111, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b00000000, // 'a' 0b00000000, 0b00111100, 0b00000110, 0b00111110, 0b01100110, 0b01100110, 0b00111011, 0b00000000, // 'l' 0b00000000, 0b00111000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011100, 0b00000000, // 'l' 0b00000000, 0b00111000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011100, 0b00000000, // 'o' 0b00000000, 0b00011100, 0b00110110, 0b01100011, 0b01100011, 0b00110110, 0b00011100, 0b00000000, // 'w' 0b00000000, 0b01100010, 0b01100010, 0b01101010, 0b01101010, 0b01111110, 0b00110100, 0b00000000, // 'e' 0b00000000, 0b00111100, 0b01100110, 0b01111100, 0b01100000, 0b01100000, 0b00111100, 0b00000000, // 'e' 0b00000000, 0b00111100, 0b01100110, 0b01111100, 0b01100000, 0b01100000, 0b00111100, 0b00000000, // 'n' 0b00000000, 0b01101100, 0b01110110, 0b01110110, 0b01100110, 0b01100110, 0b01100110, 0b00000000, // '!' 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, // '!' 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, // ' ' 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11000011, // 'K' 0b11000110, 0b11001100, 0b11111000, 0b11111000, 0b11001100, 0b11000110, 0b11000111, 0b00111100, // 'O' 0b01100110, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b01100110, 0b00111100, 0b11000011, // 'H' 0b11000011, 0b11000011, 0b11111111, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b00011000, // 'A' 0b01111110, 0b11100111, 0b11000011, 0b11111111, 0b11000011, 0b11000011, 0b11000011, 0b00111100, // 'C' 0b01100110, 0b11000011, 0b11000000, 0b11000000, 0b11000011, 0b01100110, 0b00111100, 0b11111100, // 'R' 0b11000110, 0b11000110, 0b11111100, 0b11000110, 0b11000011, 0b11000011, 0b11000011, 0b00011000, // 'A' 0b01111110, 0b11100111, 0b11000011, 0b11111111, 0b11000011, 0b11000011, 0b11000011, 0b11111111, // 'F' 0b11000000, 0b11000000, 0b11111110, 0b11000000, 0b11000000, 0b11000000, 0b11000000, 0b11111111, // 'T' 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00000000, // '.' 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b00011000, 0b00111100, // 'C' 0b01100110, 0b11000011, 0b11000000, 0b11000000, 0b11000011, 0b01100110, 0b00111100, 0b00111100, // 'O' 0b01100110, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b01100110, 0b00111100, 0b11000011, // 'M' 0b11100111, 0b11111111, 0b11011011, 0b11000011, 0b11000011, 0b11000011, 0b11000011, 0b00000000, // ' ' 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, }; int x_pins[8] = { 5, 6, 7, 8, 9, 10, 11, 12 }; int y_pins[8] = { A0, A1, A2, A3, A4, A5, 4, 3 }; void setup() { for (int i = 0; i < 8; i++) { pinMode(x_pins[i], OUTPUT); } for (int i = 0; i < 8; i++) { pinMode(y_pins[i], OUTPUT); } } uint16_t data[8] = { //16 bit width 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000, }; int count = 0; void loop() { if ((count % SPACE) == (SPACE - 1)) { //SPACE times, when you finish shifting for (int y = 0; y < 8; y++) { data[y] &= 0xff00;//mask what I am going to OR data[y] |= graphic_data[y + ((count / SPACE) * 8)];//OR the new graphic } } count++; if (count >= GRAPHIC_LENGTH * SPACE) { //Back to the beginning when all graphics are done showing count = 0; } for (int wait = 0; wait < speed; wait++) { for (int y = 0; y < 8; y++) { for (int i = 0; i < 8; i++) { digitalWrite(y_pins[i], LOW); //clear all the lines before displaying them } for (int x = 0; x < 8; x++) { digitalWrite(x_pins[x], (data[y] >> (15 - x)) & 1); //Display column datacolumn } digitalWrite(y_pins[y], HIGH); //Turn on the line we want to show delayMicroseconds(1000);//wait a bit to display for (int i = 0; i < 8; i++) { digitalWrite(y_pins[i], LOW); //clear the entire row } } } digitalWrite(y_pins[y], HIGH); //Turn on the line we want to show for (int y = 0; y < 8; y++) { data[y] <<= 1; //scroll to the right } }
This makes it quite easy to use as an electronic bulletin board.
Happy Halloween, everyone!
The end