Pages: [1] 2   Go Down
Author Topic: Low-cost graphic Nokia 3310 LCD shield & Joystick  (Read 13488 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 14
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

We have developed a new shield based on the popular Nokia 3310 graphic LCD.  Nokia 3310 LCD is low-cost, monochrome LCD with 84x48 display.  It also has a 5-direction joystick and 4 blue backlight LED.    

Schematic, library & example application can be downloaded from our website - http://www.nuelectronics.com/

Here are a couple of photos of this shield  smiley --



Logged

Newcastle, UK
Offline Offline
Full Member
***
Karma: 0
Posts: 239
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Looks great 8-)  

nice price as well
Logged

The Big Smoke
Offline Offline
Sr. Member
****
Karma: 0
Posts: 260
Hacking and Slashing
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

That looks likea great LCD with a fairly reasonable price tag (would be nice to see a lower P+P).


One request I do have is the supporting code isn't well documented. It's hard to understand how, for example, to draw from pixel to pixel or maybe a line for example.

Can you provide any additional code?


[edit]
Oh in addition, have you considered making some kind of chassies with some kind of connector cables? It would be nice to be able to setup more perminant versions of your products.

Cheers
« Last Edit: July 27, 2009, 10:55:27 am by TeamMCS » Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3482
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes, this is definitely something I would be looking for as well. A decent enclosure that fits an Arduino, an LCD display, a battery, a joystick navigation, 4 additional buttons and some place for adding connectors. This would be a killer.

For my projects the biggest issue is actually finding a decent enclosure and then drilling all the holes. If something like this would exist prefabricated I would be more than happy to buy it.
Logged

Check out my experiments http://blog.blinkenlight.net

0
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So you can add anything else. ;D
Logged

The Big Smoke
Offline Offline
Sr. Member
****
Karma: 0
Posts: 260
Hacking and Slashing
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@NuElectronics: The lcd.LCD_3310_set_XY has no effect. Can you take a look at your code? Without comments I'm lost

Just for your information. I want to turn on a particular pixel so I can draw without the need of a bitmap
« Last Edit: July 31, 2009, 05:09:50 pm by TeamMCS » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I keep forgetting this thread, but the product looks quite nice, and I have been working on two libraries for the 3310. One is a simple text only one, it can be used exactly like a 16x2 or similar character LCD but with 14x6 characters. The other one is a very heavy one that can do all the things the KS0108 library does and a bit more, like lines, rectangles, ellipses, font upscaling, windowed clearing and inverting, and so on, using about 550 bytes of ram. Also have a python script that makes a header file with an array from a monochrome bitmap. Both libraries can get those bitmaps on the screen although the simple one can't 'edit' them nicely. Anyways, both should be done pretty soon, I just need to get the code cleaned up.
Logged

The Big Smoke
Offline Offline
Sr. Member
****
Karma: 0
Posts: 260
Hacking and Slashing
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Good man, that would be really helpful.

I was hoping to develop some simple games so I can work on my memory consumption on my own libraries.

I did manage to make some progress on the set_xy. That *actually* means cursor GOTO. I'll post the code later but the location needed a mask on it.

In addition, you need to write a byte to make it display anything. Obviously a byte includes 8 bits which means you have 8 pixels you must also set each time you set your selected pixel.

I'm eager to here from NuElectronics. Turns out he's only around the corner from me based on the return address!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Guy's/Gals I need some help Pleaze. First I'm still learning so bear with me. My end goal is to have the shield display "functions" like a temp reading say from a LM35 but I'm stuck.

The sample code shows how to compile a menu and use  LCD_3310_write_string ,LCD_3310_draw_bmp_pixel etc.

Can some one please explain the charmap sample and LCD_write_byte as per the library. Or maybe guide me to a link were I can learn more.

It would seem that the Nokia_3310_lcd library is more developed, but that just confuse me more as it is written for the color display.

Also the display from this shield is a Nokia 5110 right and not a 3310?

Thanks
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 14
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

The LCD uses the Philips PCD8544 chip, it is compatible with the 3310 LCD.  Here is a link of the PCD8544 datasheet -
http://www.nxp.com/acrobat/datasheets/PCD8544_1.pdf.   Accessing individual pixel on the LCD is a bit tricky, because the LCD control chip is organized in 84 x 6 bytes (= 84 x 48 pixels).  Therefore a local buffer is needed for pixel read/write, and updating the LCD.   I am in a process of developing the graphic library (most of the code is working).  Will publish the code as soon as I can  ;D
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks that would be of great help for a noob like me! Standing by.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

very good
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

There has a MP3 programmer run on SAM3U-EK which could play .wav and .mp3 audio file.
The programmer base on a free OS called Coos,it is similarity to RTX and UCOS.

You can get the source file of MP3 programmer from http://www.coocox.org/EXAMPLE/SAM3U_MP3_CoOS.htm
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1128
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I´m also an owner of this display. I made some teste and it´s work fine. But i´ve a porblem how can I display som "int"value like the one i get from analog read. The Libary said there ist only CHar or byte to display. In my tests i con only display singele dots wich blink´s like an binary code.

Thx for help
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
embedded
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I just ported a routine to plot ellipses (the ks0108 library didn't have one) - maybe you could use, just changing the function Plot4EllipsePoints

Code:
void PlotEllipse(long CX, long  CY, long XRadius,long YRadius, int color) {
// portted the algorithm found at
// http://homepage.smc.edu/kennedy_john/belipse.pdf
// by John Kennedy

  long X, Y;
  long XChange, YChange;
  long EllipseError;
  long TwoASquare,TwoBSquare;
  long StoppingX, StoppingY;
  TwoASquare = 2*XRadius*XRadius;
  TwoBSquare = 2*YRadius*YRadius;
  X = XRadius;
  Y = 0;
  XChange = YRadius*YRadius*(1-2*XRadius);
  YChange = XRadius*XRadius;
  EllipseError = 0;
  StoppingX = TwoBSquare*XRadius;
  StoppingY = 0;
 
  while ( StoppingX >=StoppingY ) //first set of points,y'>-1
  {
    Plot4EllipsePoints(CX,CY,X,Y,color);
    Y++;
    StoppingY=StoppingY+ TwoASquare;
    EllipseError = EllipseError+ YChange;
    YChange=YChange+TwoASquare;
    if ((2*EllipseError + XChange) > 0 ) {
      X--;
      StoppingX=StoppingX- TwoBSquare;
      EllipseError=EllipseError+ XChange;
      XChange=XChange+TwoBSquare;
    }
  }
  //{ first point set is done; start the 2nd set of points }

  Y = YRadius;
  X = 0;
  YChange = XRadius*XRadius*(1-2*YRadius);
  XChange = YRadius*YRadius;
  EllipseError = 0;
  StoppingY = TwoASquare*YRadius;
  StoppingX = 0;
  while ( StoppingY >=StoppingX ) //{2nd set of points, y'< -1}
  {
    Plot4EllipsePoints(CX,CY,X,Y,color);
    X++;
    StoppingX=StoppingX + TwoBSquare;
    EllipseError=EllipseError+ XChange;
    XChange=XChange+TwoBSquare;
    if ((2*EllipseError + YChange) > 0 ) {
      Y--;
      StoppingY=StoppingY- TwoASquare;
      EllipseError=EllipseError+ YChange;
      YChange=YChange+TwoASquare;
    }
  }
}; //{procedure PlotEllipse}

void Plot4EllipsePoints(long CX,long  CY, long X, long Y, int color){
  GLCD.SetDot(CX+X, CY+Y, color); //{point in quadrant 1}
  GLCD.SetDot(CX-X, CY+Y, color); //{point in quadrant 2}
  GLCD.SetDot(CX-X, CY-Y, color); //{point in quadrant 3}
  GLCD.SetDot(CX+X, CY-Y, color); //{point in quadrant 4}
}
« Last Edit: June 24, 2010, 12:50:20 am by maujabur » Logged

Pages: [1] 2   Go Up
Jump to: