Reply to topic  [ 15 posts ]  Go to page 1, 2  Next
RAMPS compatible LCD controller module (HC3DPR0005) 
Author Message
Site Admin

Joined: Sun Aug 05, 2012 4:02 pm
Posts: 632
Post RAMPS compatible LCD controller module (HC3DPR0005)
Image
All items shown above picture are included.
Image
RAMPS shield and Mega not included
Image

Description:
This controller is designed to be used with a RepRap RAMPS interface board such as our RAMPS compatible shield (HC3DPR0002). Using this module allows you to print your designs without requiring a computer be connected to your printer. The module contains and 20 x 4 line backlit LCD display, buzzer, SD card reader, and control inputs. The module also includes cables and adapter board for solder-less connection to a RAMPS shield. Power is taken directly from the RAMPS shield so no additional cabling is required.

Although this module is designed to be used with a RAMPS shield and 3D printer, it can of course be used for any project where a panel mounted display and control input is required. An Arduino test sketch is available which will demonstrate how to use the module in your own projects.

Schematics:
Attachment:
RAMPS_LCD_Controller_Schematic.pdf

Attachment:
RAMPS_LCD_Controller_Adapter_Schematic.pdf


Arduino test sketch:
Code:
/* FILE:    ARD_RAMPS_LCD_Panel_Test.pde
   DATE:    09/01/14
   VERSION: 0.1

This sketch will test all of the components of the RAMPS compatible LCD panel.
It assumes that the panel will be connected to an Arduino Mega and RAMPS shield.
However this sketch is useful if you are not intending to use it with a 3D printer
as an example of how to access the various components.

To run this test you will need to insert and SD card with a text file named
'test.txt'. The test will display on the LCD the first 20 characters contained
within this file. You will also be prompted, via the LCD screen, to adjust the
controls of the panel.

The sketch will perform the following tests:

Buzzer test: The buzzer will beep twice
SD Card test: Will attempt to read the contents of the test.txt file on the SD card
Dial button check: Will prompt you to press the panels dial
Reset button test: Will prompt you to press the button labelled reset on the panel
Dial CW rotate test: Will prompt you to turn the dial clockwise until count = 10
Dial CCW rotate test: Will prompt you to turn the dial counter-clockwise until count = 0

There will be a 4 second delay between each test.


You may copy, alter and reuse this code in any way you like but please leave
reference to hobbycomponents.com in your comments if you redistribute this code.
This software may not be used by other sellers.

THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS LTD MAKES NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS LTD SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/

/* Include the LCD Library */
#include <LiquidCrystal.h>

/* Include the SD card library */
#include <SD.h>

/* DIO pin used to control the SD card readers CS pin */
#define SD_CARD_CD_DIO 53

/* Rotary encoder (dial) pins */
#define ROT_EN_A 31
#define ROT_EN_B 33

/* Rotary encoder button pin */
#define BUTTON_DIO 35
#define BUZZER_DIO 37

/* Reset button pin */
#define RESET_DIO 41

/* LCD display pins */
#define LCD_RS 16
#define LCD_EN 17
#define LCD_D4 23
#define LCD_D5 25
#define LCD_D6 27
#define LCD_D7 29


/* Create an instance of the LCD library. */
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);

/* Create an instance of the SD card library */
File SDFileData;


void setup()
{
  /* Initialise the LCD */
  lcd.begin(20, 4);
 
  /* Configure the pins used to read the status of the panel dial
     and buttons */
  pinMode(BUZZER_DIO, OUTPUT);   
  pinMode(BUTTON_DIO, INPUT);   
  digitalWrite(BUTTON_DIO, HIGH);
  pinMode(RESET_DIO, INPUT);   
  digitalWrite(RESET_DIO, HIGH);
  pinMode(ROT_EN_A,INPUT);
  pinMode(ROT_EN_B,INPUT);
  digitalWrite(ROT_EN_A, HIGH);
  digitalWrite(ROT_EN_B, HIGH);
}


/* Main program loop */
void loop()
{
  /* Output the test message to the LCD */
  lcd.setCursor(2,0);
  lcd.print("HOBBY COMPONENTS");
  lcd.setCursor(2,1);
  lcd.print("RAMPS LCD PANEL");
  lcd.setCursor(4,2);
  lcd.print("HC3DPR0005");
  lcd.setCursor(8,3);
  lcd.print("TEST");
 
  /* Wait 4 seconds */
  delay(4000);
 
  /* Buzzer test */
  BuzzerCheck();
 
  /* SD card read test */
  SDCardCheck();
  delay(4000);
 
  /* Control check */
  ControlCheck();
  delay(4000);
 
  /* All done! */
  lcd.clear();
  lcd.setCursor(3,1);
  lcd.print("TEST COMPLETE");
 
  while(1);
}

/* Test the buzzer by beeping twice */
void BuzzerCheck(void)
{
  lcd.clear();
  lcd.setCursor(4,1);
  lcd.print("BUZZER CHECK");
 
  digitalWrite(BUZZER_DIO, HIGH);
  delay(300);
  digitalWrite(BUZZER_DIO, LOW);
  delay(300);
  digitalWrite(BUZZER_DIO, HIGH);
  delay(300);
  digitalWrite(BUZZER_DIO, LOW);
}

/* Test the SD card by reading the contents of a file named test.txt */
void SDCardCheck(void)
{
  byte index;
  char SDCardText[]= "                    ";
 
  /* Display new test */
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("SD CARD CHECK");
  lcd.setCursor(0,1);
  lcd.print("Initiliasing..");
 
  /* Initialise the SD card */
  if (!SD.begin(SD_CARD_CD_DIO))
  {
    /* If there was an error output this to the LCD */
    lcd.setCursor(14,1);
    lcd.print("ERROR!");
    lcd.setCursor(0,3);
    lcd.print("SD Card not detected");
  }else
  {
    lcd.setCursor(14,1);
    lcd.print("OK! ");
  }
 
 
   /* Check if the text file exists */
   if(SD.exists("test.txt"))
   {
     lcd.setCursor(0,2);
     lcd.print("test.txt contents:");

     /* The file exists so open it */
     SDFileData = SD.open("test.txt");
     
     /* Sequentially read the data from the file and store the first 20 characters */
     for (index = 0; index < 20; index++)
     {
       if (SDFileData.available())
         SDCardText[index] = SDFileData.read();
     }
     
     /* Display the contents on the LCD */
     lcd.setCursor(0,3);
     lcd.print(SDCardText);
 
   }else
   {
     lcd.setCursor(0,2);
     lcd.print("test.txt missing");   
   }
   
   /* Close the file */
   SDFileData.close(); 
}

/* Check the dial and push buttons */
void ControlCheck(void)
{
  byte DialPos = 0;
  byte Last_DialPos = 0;
  byte DialCount = 0;
 
  /* Display new test */
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("CONTROL CHECK");
 
  /* Prompt the user to press the dial */
  lcd.setCursor(0,2);
  lcd.print("Press dial:");
 
  /* Wait for the dial to be pressed */
  while(digitalRead(BUTTON_DIO));
 
  lcd.setCursor(12,2);
  lcd.print("PASS");
 
  delay(4000);

  /* Prompt the user to press the button marked reset */ 
  lcd.setCursor(0,2);
  lcd.print("Press reset btn:    ");
 
  /* Wait for button to be pressed */
  while(digitalRead(RESET_DIO));
 
  lcd.setCursor(16,2);
  lcd.print("PASS");
 
  delay(4000);
 
  /* Prompt the user to turn the dial clockwise by 10 positions */
  lcd.setCursor(0,2);
  lcd.print("Rotate Dial CW:     ");

  /* Run this loop until the dial is turned 10 positions */
  while(DialCount <= 9)
  {
    /* Read the status of the dial */
    DialPos = (digitalRead(ROT_EN_B) << 1) | digitalRead(ROT_EN_A);
 
    /* Is the dial being turned clockwise ? */
    if (DialPos == 3 && Last_DialPos == 1)
    {
      /* If so increase the dial counter and display it */
      DialCount++;
      lcd.setCursor(16,2);
      lcd.print(DialCount);
    }
 
    /* If the dial counter reaches a value of 10 then the test has passed */
    if (DialCount >= 10)
    {
      lcd.setCursor(16,2);
      lcd.print("PASS");
    }
    /* Remember the last position of the dial so we know when it has changed */
    Last_DialPos = DialPos;
  }

  delay(4000);
  DialCount = 10;
  lcd.setCursor(0,2);
 
  /* Now instruct the user to rotate the dial counter-clockwise */
  lcd.print("Rotate Dial CCW:    ");
 
  /* Run this loop until the dial is turned 10 positions */
  while(DialCount)
  {
    /* Read the status of the dial */
    DialPos = (digitalRead(ROT_EN_B) << 1) | digitalRead(ROT_EN_A);
 
    /* Is the dial being turned counter-clockwise ? */
    if (DialPos == 3 && Last_DialPos == 2)
    {
      /* If so decrease the dial counter and display it */
      DialCount--;
      lcd.setCursor(17,2);
      lcd.print(DialCount);
    }
 
    /* If the dial counter reaches a value of 0 then the test has passed */
    if (DialCount == 0)
    {
      lcd.setCursor(16,2);
      lcd.print("PASS");
    }
 
    /* Remember the last position of the dial so we know when it has changed */
    Last_DialPos = DialPos;
  }
}




FAQ:

How do I configure the Marlin firmware to use this panel?
In the Configuration.h file find the following line:
Code:
//LCD and SD support
//#define ULTRA_LCD

and change to:
Code:
//LCD and SD support
#define ULTRA_LCD

Then find the following lines:
Code:
  #ifdef ULTRA_LCD
  #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
    #define LCD_WIDTH 20
    #define LCD_HEIGHT 5
  #else
    #define LCD_WIDTH 16
    #define LCD_HEIGHT 2

and change the last two lines to:
Code:
    #define LCD_WIDTH 20
    #define LCD_HEIGHT 4

Remember to select the correct motherboard also in this file otherwise you won't see anything on the display! E.g. if using with a mega and our RAMPS 1.4 shield find the following line:
Code:
#define MOTHERBOARD 7

and change it to:
Code:
#define MOTHERBOARD 33


You do not have the required permissions to view the files attached to this post.


Fri Jan 10, 2014 5:09 pm
Profile

Joined: Wed Jul 30, 2014 3:52 pm
Posts: 1
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
I've got the display working but I can't seem to get the encoder working in Marlin - i've defined the board as a NEWPANEL and set the following up in Pins.h:

#define BTN_EN1 31
#define BTN_EN2 33
#define BTN_ENC 35

When the board first boots I can use the encoder to change the flow rate, however, if I then push the encoder button to enter the menu the encoder no longer works, although I can still switch in and out of the menu with the button


Wed Jul 30, 2014 3:57 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 621
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
I've taken a closer look at the Marlin firmware and it looks to me like the RepRap discount smart controller has the correct settings. With a default copy of the firmware can you uncomment the following line in the Configuaration.h file:

#define REPRAP_DISCOUNT_SMART_CONTROLLER

I can't confirm this fully works right now because we don't currently have one hooked up to a Marlin printer but I can navigate the menu's OK. If you can let me know if it has solved your problem I'll update the FAQ.

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Thu Jul 31, 2014 7:06 am
Profile

Joined: Sun Jan 04, 2015 2:47 pm
Posts: 9
Location: France
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Hi,
I use this module for my Reprap Prusa under Marlin. All is working well except the SD card reader. The card is detected physicaly (card detected) but it can't be read.
I've tried 2 different SD Cards (2 Go Transcend and 16 Go Sandisk) but both aren't working. I think it's not these cards because I can read them with my other LCD controller (Full Graphic Smart Controller).
When I use your Arduino Sketch, I've the same problem (no test.txt file found).
I've found this forum topic : http://forums.reprap.org/read.php?146,238858 where the same problem is described but the solutions haven't worked for me.
Thanks for your help,
Regards,

Thierry

_________________
Reprap Prusa V2 + Ramps 1.4 + Marlin with autoleveling bed


Mon Jan 05, 2015 12:29 am
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 621
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
If the example sketch in the first post isn't working then its likely that its either a problem with the panel or a connection issue. Do you have this connected via a RAMPS shield?

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Mon Jan 05, 2015 10:48 am
Profile

Joined: Sun Jan 04, 2015 2:47 pm
Posts: 9
Location: France
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Hi,
Thanks for your reply.
Yes it's a connected to a Ramps 1.4 shield with a Taurino Power from RepRapDiscount working under 24V.
I'll install your module with my other Ramps 1.4 and Taurino Classic (currently it's a configuration with a Full Graphic Smart LED Controller and its SD Card reader working) and I'll give you a feedback.
Regards,

Thierry

_________________
Reprap Prusa V2 + Ramps 1.4 + Marlin with autoleveling bed


Mon Jan 05, 2015 12:34 pm
Profile

Joined: Sun Jan 04, 2015 2:47 pm
Posts: 9
Location: France
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Hi, I've tested this module with an other Ramps 1.4 under 12V and the problem is the same : the card is physically detected but the reading is impossible.
Regards,

Thierry

_________________
Reprap Prusa V2 + Ramps 1.4 + Marlin with autoleveling bed


Mon Jan 05, 2015 8:35 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 621
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Ok, I believe on this panel the software detects the card using a separate pin (D53) to the SPI interface and so the problem must relate to the a connection issue with one of the MOSI, MISO, SCK or 5V/GND connections. If you have a test meter you could try checking the continuity of these connections (especially the ribbon cable). It is a bit awkward to do on this however because each connection has to pass through several different boards and connections. One other thing may be worth doing is reformatting your cards just in case there is something odd about the way they are formatted although this is grasping at straws. Failing this I think we will be looking at returning it I'm afraid.

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Tue Jan 06, 2015 9:50 am
Profile

Joined: Sun Jan 04, 2015 2:47 pm
Posts: 9
Location: France
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Hi,
I've reformatted the card in differents formats (Fat16 & Fat32) but the problem is always present. Besides my other LCD controller can read it.
I've an other ribbon câble (working with my Full Graphic LCD controller) and I'll test with it to see if the connections are correct.
Regards,

Thierry

_________________
Reprap Prusa V2 + Ramps 1.4 + Marlin with autoleveling bed


Tue Jan 06, 2015 11:44 am
Profile

Joined: Sun Jan 04, 2015 2:47 pm
Posts: 9
Location: France
Post Re: RAMPS compatible LCD controller module (HC3DPR0005)
Hi,
No problem with the ribbon cables. I can't test with my other jonction board with the Ramps (no same pluggin directions) but with my multimeter I didn't detect any anomaly on it.
Regards,

Thierry

_________________
Reprap Prusa V2 + Ramps 1.4 + Marlin with autoleveling bed


Fri Jan 09, 2015 8:34 pm
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 15 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Thank you to phpBB.com & phpBB.ro.
Design created by Florea Cosmin Ionut.
© 2011 All contents of this site are © Hobby Components LTD