How to make the Marlin menus more responsive on Anet A8

If you have Anet A8 3D Printer and have flashed the Marlin firmware on it, I’m pretty sure you have noticed how SLUGGISH the menu navigation is. Especially compared to the stock firmware or the official Repetier.
Scrolling through the SD card, setting the fan speed from 0 to 255 etc… Scrolling through a couple of menu items takes A COUPLE of seconds.
Click….. Click….. Click….. I can literally feel my beard growing longer.
I was pretty sure there was a way to fix that, as I was sure this was a bug.
I knew the board can sample the analog input a lot faster, and the 2004 LCD display also can refresh a lot faster.
So, after about 20 minutes of digging into the Marlin’s code, I’ve found the offending piece of code in the ultralcd.cpp file, at line 4238 (for Marlin 1.1.6; should be similar if not the same for 1.1.5 too):

So, what exactly was the problem?
The problem was that EVERY TIME the mainboard was trying to read the value of the ADC keypad (e.g. which button is pressed), the firmware tried to make a “beep” sound with the buzzer, using the lcd_quick_feedback() function. The Anet A8 does not have a buzzer anyway.
Now, if you look closely at the lcd_quick_feedback() function, you will see there is this particular line:

What does it do? It instructs the printer to WAIT 500 milliseconds (half a second), before reading the keypad again. Which means, it was limiting the keypad navigation speed to just 2 items / clicks / whatever per second.

How to fix it? Easy. Just open the ultralcd.cpp file, and locate the “inline bool handle_adc_keypad()” line. Then comment the lcd_quick_feedback(); line by adding “//” (without the quotes) in front of it. Like this:

Save, compile & upload to the mainboard using Arduino IDE.

Here’s the result:

Like what you are seeing? The go ahead, and support me!

Leave a comment...

Leave a Reply

Your email address will not be published. Required fields are marked *