MarlinFirmware/Marlin

Reprap Discount Full Graphics Smart Controller Display is Garbled

dcwalmsley opened this issue · 37 comments

So here I am again.

Downloaded the latest 1.1.9 bugfix since the my last 1.1.8 bugfix release and developed an issue that has been an annoyance for me and I'm sure for some with Reprap Discount Full Graphics Smart Controller Display coming up garbled after flashing firmware. My LCD is the red version (12864) of the Reprap boards.

I've attached two images of the LCD display and the zipped folder of my modifications to your latest BugFix.

My printer is a HyperCube using a Einsy Rambo board.
I'm also using U8glib 1.18.0 currently and have tried 1.19.1 with no success on either library.
The compiler I'm using is an Arduino 1.8.7 program.

Marlin-1.1.9 Release 10-3-2018.zip
20181003_193915
20181003_193921

Did I miss something in updating the firmware?

Appreciate all that you great folks do and look forward to some help fixing this problem.

Best Regards,
Doug Walmsley

You have the connector on the display in the wrong orientation, you need to pry the two plastic connector off on the display and rotate them 180 degrees. That'll fix your problem.

Thanks for the insight but that was done back in build 1.1.8 and it worked as you described. So there should be no difference now that I I have upgraded to the latest version. This is a firmware issue.

Ok, then you need to add a condition to ultralcd_st7920_u8glib_rrd.h
locate line 56 and make sure it reads:

#elif MB(MINIRAMBO) || MB(EINSY_RAMBO)

Looks like a timing problem. Not like a connection problem. Increase delays.

@larsnordstrom

Thanks! That addition fixed my issue.

20181004_163414

@larsnordstrom

How did you solve it?
I have the same problem with a tornado and marlin 1.1.9 & mks_gen_L.

I define in config.h, as I understood,but it still does not work, it looks fuzzy. What do I do wrong?

#define ST7920_DELAY_1 DELAY_NS(0)
#define ST7920_DELAY_2 DELAY_NS(250)
#define ST7920_DELAY_3 DELAY_NS(0)

say that in 1.1.8 the configuration was as follows.

#define ST7920_DELAY_1 DELAY_0_NOP
#define ST7920_DELAY_2 DELAY_3_NOP
#define ST7920_DELAY_3 DELAY_0_NOP

Forgive my english... heheheh

Try some longer delays, for example:

#define ST7920_DELAY_1 DELAY_NS(250)
#define ST7920_DELAY_2 DELAY_NS(250)
#define ST7920_DELAY_3 DELAY_NS(250)

Thanks, I have already achieved it.

#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)

I went up from 50 in 50 until the problem was corrected.

Likewise, thank you very much.

@thinkyhead &
@AnHardt

i just wanted to say a BIG thanks to you both, the delay setting also worked for me using MEGA2560/RAMPS/RRD Full Graphic Smart Controller (with buzzer, STOP Button, POT & Encoder, RED PCB By www.robotlinking.com)

Racking my brain over this for days lol

Thanks LOADS guys, really grateful !

the lines
#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)

were do you put them at?

the lines
#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)

were do you put them at?

From post above by larsnordstrom
Ok, then you need to add a condition to ultralcd_st7920_u8glib_rrd.h
locate line 56 and make sure it reads:

#elif MB(MINIRAMBO) || MB(EINSY_RAMBO)

You'll find that line already there and the 3 lines you refer to are 57, 58 and 59

the lines
#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)
were do you put them at?

From post above by larsnordstrom
Ok, then you need to add a condition to ultralcd_st7920_u8glib_rrd.h
locate line 56 and make sure it reads:

#elif MB(MINIRAMBO) || MB(EINSY_RAMBO)

You'll find that line already there and the 3 lines you refer to are 57, 58 and 59

i have the same problem but i have an ramps 1.4 borad,where do i change the delay)?

i have the same problem but i have an ramps 1.4 borad,where do i change the delay)?

If you want you can define your own set of delays in Configuration.h.

Hi again.
I searched in config.h and I didn't find such an comment I could change but I went back into (ultralcd_st7920_u8glib_rrd.h)tab
And there is 3 lines where it says you can define your own.
I changed mine to:
#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)

And everything works fine now.big thanks from me anyway

@gazehound
I can't explain it right as my English isn't that good but did you remember to uncommint the 3 lines after you have changed the numbers

I've tried 0, 400, 0 and 250, 250, 250 but nothing changes.
These are my lines starting at #56
#elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(400)
#define CPU_ST7920_DELAY_3 DELAY_NS(0)

Can anyone suggest what I have wrong?

@lb4207 what board do you have mate ?

MKS GEN L with RepRapDiscount Full Graphic Smart Controller.
I didn't have this problem before the Arduino 1.8.10 upgrade.
lb4207

@lb4207 same her is just have an ramps 1,4.

open your autdino ang go to the tab called (ultralcd_st7920_u8glib_rrd.h)tab
And there is 3 lines where it says you can define your own.
I changed mine to:

#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (400)
#define ST7920_DELAY_3 DELAY_NS (0)

the tree line is at the start of the page,that's them you have to change since you have another board.when you change them to this they will overide the other delay settings.
I changed mine to what you see above and everything is working great With the screen.

larsnordstrom's instructions worked for me with some modification:

Ok, then you need to add a condition to ultralcd_st7920_u8glib_rrd.h
locate line 56 and make sure it reads:

#elif MB(MINIRAMBO) || MB(EINSY_RAMBO)

Since my board is an MKS Gen (v1.4), I added it to the end of this line, so it reads:

#elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(MKS_GEN_13)

This solved this issue for me. Thanks larsnordstrom

Can anyone suggest what I have wrong?

I found that if I added those lines to configuration.h it worked but they were not recognised in ultralcd_st7920_u8glib_rrd.h

I've tried 0, 400, 0 and 250, 250, 250 but nothing changes.
These are my lines starting at #56
#elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(400)
#define CPU_ST7920_DELAY_3 DELAY_NS(0)
Can anyone suggest what I have wrong?

I found that if I added those lines to configuration.h it worked but they were not recognised in ultralcd_st7920_u8glib_rrd.h

Configuration.h

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define ST7920_DELAY_1 DELAY_NS(0)
#define ST7920_DELAY_2 DELAY_NS(400)
#define ST7920_DELAY_3 DELAY_NS(0)

It helped me. Thanks for telling me where to look for the problem

I extended the queues of my screen 1 meter and same problem of display, my solution:
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (250)
#define ST7920_DELAY_3 DELAY_NS (250)
good luck...

Hi and thanks to every body!!! that fix my issue, used a mixed values (250,400,250) and it works perfectly.
I just wonder why after almost a year working fine it start glitching like that. the only thing that i did was to install my marlin 1.9 from always (whit my stuffs and configs) with a freshly updated Arduino IDE... but my libraries whas the same and everything was updated too... SOo i start wondering if i have something being broken on my controller...

I have this issue with Marlin V2 can anyone advise how to modify V2 with these settings.

I extended the queues of my screen 1 meter and same problem of display, my solution:
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (250)
#define ST7920_DELAY_3 DELAY_NS (250)
good luck...

thx,it solved my problem

thanks for all 😃

I've tried 0, 400, 0 and 250, 250, 250 but nothing changes.
These are my lines starting at #56
#elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(400)
#define CPU_ST7920_DELAY_3 DELAY_NS(0)
Can anyone suggest what I have wrong?

I found that if I added those lines to configuration.h it worked but they were not recognised in ultralcd_st7920_u8glib_rrd.h

Configuration.h

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define ST7920_DELAY_1 DELAY_NS(0)
#define ST7920_DELAY_2 DELAY_NS(400)
#define ST7920_DELAY_3 DELAY_NS(0)

It helped me. Thanks for telling me where to look for the problem

tanx, it solved my problem too

结合上面各位的讨论,我找到一个能用的方法,已经在我的Ramps1.4主板上测试通过了:

  1. 记录下 Configuration.h里面的主板型号,我的主板是BOARD_RAMPS_14_EFB
    #define MOTHERBOARD BOARD_RAMPS_14_EFB

  2. 打开ultralcd_st7920_u8glib_rrd.h,找到下面这一行代码(一般是在第56行)
    #elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)
    修改成如下内容
    #elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)|| MB(RAMPS_14_EFB)
    它的作用就是让下面的三行延时代码被执行,延时时间不用改。

  3. 完整的代码发出来,供大家参考

 #elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)|| MB(RAMPS_14_EFB) 
    #define CPU_ST7920_DELAY_1 DELAY_NS(0)
    #define CPU_ST7920_DELAY_2 DELAY_NS(250)  
    #define CPU_ST7920_DELAY_3 DELAY_NS(0)

DAMN, why is this not fixed ?

DAMN, why is this not fixed ?

It is patched in mainline Marlin. 🦦

I extended the queues of my screen 1 meter and same problem of display, my solution:
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#define ST7920_DELAY_1 DELAY_NS (0)
#define ST7920_DELAY_2 DELAY_NS (250)
#define ST7920_DELAY_3 DELAY_NS (250)
good luck...

Thanks! This solved my problem!!!

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.