Archive

Posts Tagged ‘sketch’

NHD-0216PZ – LDC Display

July 18, 2012 Leave a comment

I have been quite apprehensive towards working with LCDs. They take up nearly half of the digital pins available on my Arduino Uno and require quite a bit of work to set up and get going, or at least so I thought. Nevertheless, I did need some way to get feedback from the Arduino, and I couldn’t rely on the IDE serial monitor forever.

This is why I have purchased the New Haven NHD-0216PZ-FL-YBW-PC LCD display (link to datasheet .pdf).

Component:

The NHD-0216PZ-FL-YBW-PC is a character liquid crystal display module operating on a 5V supply. It is manufactured by Newhaven Display, features 2 rows of 16 characters each, is transflective and also has controllable yellow/green LED backlighting. One thing to note about this particular model is that the backlight pins 15 and 16 are reversed, and there is a 20 Ohm resistor already connected to the backlight.

Circuit:

The first order of business was to solder on some sort of connectors so that I can run jumper wires to the Arduino. I’ve seen many people attach pin headers to the bottom of the LCD so that they can connect the LCD directly into a breadboard, but I preferred to use single row 3M Boardmount Sockets. Ideally, I would have liked to have a 16-pin version of these stackable headers (and now that I think about it I could have just gotten two of them and attached them side by side) so that I could use them both on a breadboard and with jumper wires directly to them.

Note: Make SURE that you know which type of connector you want to use before you start soldering. I found this out the hard way as I neglected to consider the fact you needed a potentiometer and several connections to +5V and ground, it is much more difficult to have a standalone LCD as opposed to having a small breadboard devoted to an LCD. Boardmount sockets are ENORMOUSLY difficult to de-solder, and I nearly destroyed a trace on the PCB of the LCD trying to force it. I ended up having to break apart the socket into smaller sections so that I could de-solder the pins individually.

So, now that we have the LCD fully prepared  for use we can begin hooking it up to the Arduino. We will do that using the datasheet schematic and the pin wiring diagram below:

First thing well do is get the backlight working. Easy enough, connect ground to pin 15 and +5V to pin 16 (Note: my LCD has the+5V and GND pins reversed, and an onboard resistor. Most LCDs will be different, so check your datasheet!).

Next, we have to add a potentiometer so that we can adjust the contrast of the LCD. Connect one side of the pot to +5V and the other to GND. The middle pin of the pot should go to pin 3 of the LCD. We also want to connect power to the LCD itself which we do by connecting GND to pin 1 and +5V to pin 2. You should now be able to adjust the contrast by turning the pot.

The final part of wiring up the LCD is connecting the data lines.

Looking back at the data sheet pin diagram we can see that there are many pins that can connect to the MicroProcessor Unit, in this case, our Arduino. Fortunately, we will only be using six pins on our Arduino. Here is how everything connects:

  • RS Pin [4] – Used to let the LCD know if its being told to receive data or receive a command. – Connects to Pin 7 on the Arduino.
  • R/W Pin [5] – Read/Write select signal. – Wont be using this so connect to GND.
  • EN Pin [6] – Used to enable writing to the registers of the LCD. – Connects to Pin 8 on the Arduino.
  • DB4 Pin [11] – Data – Connect to Arduino Pin 9
  • DB5 Pin [12] – Data – Connect to Arduino Pin 10
  • DB6 Pin [13] – Data – Connect to Arduino Pin 11
  • DB7 Pin [14] – Data – Connect to Arduino Pin 12

Here’s how everything should now be wired up.

That’s it! The hardware part is complete, which was also the most difficult part. Provided you wired everything up correctly, you should now be able to control the LCD with the Arduino. Which brings us to the software side of things…

Arduino:

Lucky for us, most of the work on creating a sketch to control the LCD has been done. If you go to  File > Examples > LiquidCrystal in the Arduino IDE you will see several sketches that are already available, we’ll be using the HelloWorld sketch. Before we run the sketch though, we need to modify the part that determines what pins will be used for what. Doing so is very easy, the sketch uses a function to assign pins, here is the function and its parameters:

LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7);

And this is how we modify it to work with our setup:

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

Now when we run the sketch we should see something like this:

Excellent! Having made it this far we’re able to use an LCD to display any kind of information we like, completely independent of a computer. This capability empowers us to take on a whole new breadth of projects!

If you wish to download the completed sketch you can get it here.

Sources: [Adafruit, Arduino.cc]

Writing Functions

July 16, 2012 Leave a comment

This is a simple concept so I’m going to get through it quickly. A function is a block of code that has a name and a property and is designed to be easily reusable. When you create a function, you are essentially creating a machine that does a certain job, and you can call upon it at any time to do that job.

A simple function would be one that adds two numbers together:

int sum(int x, int y)
{
	int ans = 0;  //holds the answer
	ans = x + y;  //calculates the sum
	return ans  //returns the answer
}

The first part “int sum(int x, int y)” is the header, and has a name “sum()“, parameters that go in between the parentheses “int x, int y“, and the type of return value desired “int …“.

Within the body of the function (whats between the brackets) is what will be done when the function is called upon. So, say that I called for sum(3,2), looking at the body of the function I can tell that the result will be 5.

We can use this with the Arduino in quite the same way, for example, if we wanted to turn the blink sketch into a function that blinked LED 13 a certain number of times (n) it would look something like this:

int ledPin = 13;
 int blinkVal = 3;
void setup()
 {
 pinMode(ledPin, OUTPUT);
 blinkTimes(blinkVal); //here the function is run once
 }
void loop(){}
void blinkTimes(int n) //function definition
 {
  for (int i = 0; i < n; i++)
  {
  digitalWrite(ledPin,HIGH);
  delay(1000);
  digitalWrite(ledPin,LOW);
  delay(1000);
  }
 }

The function in use is colored blue, the number of blinks is red, the function definition is green, and the defined parameter within the function is bold and black.

Now that you have the function defined you can put it at the bottom of your sketch and forget about it, calling it when ever you need the defined task done. However, the true power of functions comes from the ability to use multiple parameters. Say I want to be able to adjust not only the number of times that it blinks, but also the delay in between. That is easy enough to do, all I need is to add another parameter and modify the body of the function to include it:

void blinkTimes(int n, int d) //function definition
 {
  for (int i = 0; i < n; i++)
  {
  digitalWrite(ledPin,HIGH);
  delay(d);
  digitalWrite(ledPin,LOW);
  delay(d);
  }

So if I call the function blinkTimes(10,500); now it will blink 10 times turning on and off for 500 milliseconds.

Sources: [C4Learn, C4LearnMYCPLUS]