RepRapDiscount Full Graphic Smart Controller

From RepRap
Jump to: navigation, search
Crystal Clear action run.png Full Graphic Smart Controller

Release status: working

Run your RAMPS without a computer just with a SD card!
CAD Models
External Link

Full Graphic Smart Controller

Based on bkubicek idea and STB's DOGM128 implementation, we realized this full graphic smart controller.


This Full Graphic Smart Controller contains a SD-Card reader, a rotary encoder and a 128 x 64 dot matrix LCD display.

The RepRapDiscount_Smart_Controller is a similar design with a 20x4 character based display.

This display board is intended to provide an easy and simple solution to interact with a 3D printer. Given that many of the 3D printer's mainboards are based on the RAMPS design this display board is supported by many other mainboards.

When using a RAMPS board the Full Graphic Smart Controller is simple to connect using the "smart adapter" which connects directly to an Arduino Mega 2560. The Full Graphic Smart Controller comes with a 12864 (128x64) LCD.

Depending on the vendor you may find boards using an ST7920 IC Driver or a ST7565 IC Driver. Boards using a DOG-M128 Display use a ST7565 IC Driver. The more common and generic boards use some flavor of a 12864 LCD with the ST7920, this is the case with most board you find in online stores.

The original design supports the 8bit Parallel display interface and a 4bit serial display interface, yet all of the common E3 Printer firmwares only support the 4bit Serial interface which only uses one pin for data, freeing more pins for other uses. The preference of serial is mainly due to the use of the [U8G library]( that implements the graphic support in these firmwares.

This display board is supported by the most popular 3D Printer firmwares, yet differences in the LCD Drivers used and others may dictate the level of support in a given 3D printer mainboard and firmware combination. See connection for more details.

Original Design and Clones/Variants

The original design supports the 8bit Parallel interface and a 4bit serial interface. Many clones or variants only support the serial (SPI) interface.

Variants of the design may have fans or remove the SD-Card, among other changes.

Some budget clones may have issues due to timing constraints with the display used.

Depending on the vendor you may find boards using an ST7920 IC Driver, a ST7565 IC Driver, or other. Boards using a DOG-M128 Display use a ST7565 IC Driver. The more common and generic boards use some flavor of a 12864 LCD with the ST7920, this is the case with most boards you find in online stores.


The board has two 10-pin (2 row with 2.54mm pitch) box connectors marked EXP1 and EXP2 (10-PIN IDC CONNECTOR).

The following figure shows the pinout mapping to an Arduino Mega 2560:

Reprap fgdc pinout.png

When used with a RAMPS board the "Smart Adapter" provides an easy connection with the RAMPS. The following figure shows the pinout mapping to an Arduino Mega 2560:

Reprap fgdc smart adapter pinout.png

Clones and other manufactures may provide different connections, in particular models without SD-Card or models supporting only the SPI/Serial interface (most common)


LCD Connect Schematics

RepRapDiscount Full Graphic Smart Controller Schematics

Smart Adapter Gerber Files

RepRapDiscount Full Graphic Smart Controller Gerber Files

As firmware we used Marlins' sources, to update the firmware in the future you just need an Arduino board, so you are good to go ;)

Pictures of a Full Graphic Smart Controller made by

Support in Marlin Firmware V1 (new)

The basic requirement to add support in the Marlin Firmware is to enable the REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER in the "Configuration.h”. For more details check Marlin's page on how to configure the firmware, see the LCD section.

1. Open the "Configuration.h” file and find the following line:


2. Remove the comment characters "//", so the line now reads:


After build then upload of your firmware to your printers Arduino or mainboard as specified in the firmware documentation.


By default Marlin will use the U8G/DOGM libraries to handle the Smart Controller and assume that the LCD driver is the ST7920.

The firmware also offers other define constants for some popular variants of the 'RepRapDiscount Full Graphic Smart Controller', that may use another driver or has a different PIN/layout or other requirement. Look at options under the the "LCD / Controller Selection" sections in the "Configuration.h” file.

To enable the correct LCD in the firmware it is important that you identify if your version of a "Smart Controller" is indeed using the ST7920 driver or if it has a different pin requirement. If that is your situation, then you need to see if the firmware already has support for your version of "Smart Controller" and select it accordingly.

If you have an 8bit board it's likely that it is based on RAMPS, in which case it uses the "pins_RAMPS.h" (or other pins_RAMPxxx.h) as the base of the PIN configuration for your board. You can tell if your board is using a RAMPS as a base configuration by looking for a line similar to #include "pins_RAMPS.h" near the top. In addition to checking the "pins_XXXX.h" file corresponding to your mainboard, its a good idea to check the base file to see if your smart controller is supported.

Another important aspect of compatibility is dictated by your printers mainboard it self. If you board has a dedicated LCD connector you have to check at minimum two things:

  • Ensure that the connector pin-out matches the cable or adapter that you are using. In many instances the supplied cable or adapter is for a particular board.
  • Ensure that the pins on the board can actually drive the LCD (connected to a pin that does the required function).

For example a connection that shares the SPI with the an ST7920 LCD will not work and will produce garbage on the LCD. (The ST7920 can not share an SPI/Serial interface).



Open Source Files

You can find the open source files here:

Where to get it?

If you don't have the mood to build it yourself you can just buy from

All parts are licensed under Attribution - ShareAlike.


  • Some versions of this board have the notched connectors the wrong way around. If your controller only flickers and beeps, cut off the notches on the cables and insert them upside down.
  • Some clones of this board use really slow LCD displays so their signal timings need adjusted.
The symptoms are that the display gets slightly corrupted. (which can also be cables to long)
In current versions of marlin (1.1.9) add the following to configuration.h to override the default settings.
add "#define ST7920_DELAY_1 DELAY_NS(0)"
add "#define ST7920_DELAY_2 DELAY_NS(0)"
add "#define ST7920_DELAY_3 DELAY_NS(63)" // this is the defaults for a 16mhz processor (ie a mega2560)
This is used as follows.
For each bit that is sent over SPI
Set the clock pin low and wait ST7920_DELAY_1
Set the data pin and wait ST7920_DELAY_2
Set the clock pin high and wait ST7920_DELAY_3
Slower LCD's seem to need ST7920_DELAY_3 increased.


There are some possible hacks to modify the display.