LCD "Shirt Billboard"

laserhawk64

Senior Member
"Shirt Billboard" is the fancy new name for "Electronic Nametag", or so I hear. Like this.

They're all cumbersome to program, since they rely on a couple buttons to enter the message by incrementing/decrementing through a series of characters, and a (far too short, usually about 5s) delay in input to determine when one is done (rather than a third button plus a long timeout, say 30s, for redundancy). What a pain.

I came up with a similar idea, for myself. A PICAXE 20M2 outputting to a spare LCD I got for a project I'll likely never build. There's a ROM to store some pre-programmed output, easier (in this one case) than bothering with any sort of text input -- particularly since I'd also like to incorporate graphics.

Chips involved are the previously-mentioned 20M2 and a 24LC256 ROM. Each screen is 128px * 128px, monochrome, so it works out to 2kB to fill the screen. I'd like to do a sort of looping slideshow thing here, so the screens would cycle in a predetermined sequence. That can be changed easily via the PICAXE. LCD is a PowerTip (brand) PG-128128A. (Note: this model # can also appear as PG128128-A and PG-128128-A. Same LCD.)

The circuit itself is very simple, despite appearances (image attached, at the bottom of the post). Yes, it looks like a rat's nest -- P2P wiring on perfboard will always do that! The 20M2 is wired directly to the ROM chip and the LCD; the only other components are resistors, pin headers, a diode (circuit runs off 4xAA batts) and of course the programming jack. (The ROM must be removed to be programmed, but that's no big deal -- although a lead on a sub-us$10 USB ROM programmer would be nice!)

LCD pinout is in the diagram, but I'll reproduce it here.

01 GND
02 GND
03 +5V
04 Contrast Adj.
05 WR - Write
06 RD - Read
07 CE - Chip Enable
08 C/D - Command/Data
09 RST - Reset
10 [N/C]
11-18 D0-D7 (Data In)
19 FS - Font Select
20 [N/C]

The PICAXE 20M2 is connected like this --

B.0-B.3 -> D0-D3 [LCD pins 11-14]
B.4 -> C/D [LCD pin 08]
B.5 -> SDA [ROM pin 05]
B.6 -> FS [LCD pin 19]
B.7 -> SCL [ROM pin 06]
C.0-C.3 -> D4-D7 [LCD pins 15-19]
C.4 -> WR [LCD pin 05]
C.5 -> CE [LCD pin 07]
C.6 -> [N/C]
C.7 -> RST [LCD pin 10]

LCD RD line [pin 06] is connected to VCC. LCD Contrast is VCC through a 10k trimpot (the 10k bit can change, easily -- although the LCD datasheet doesn't list a max/min contrast value, so I've no idea what it should be). The 20M2's SERIN and SEROUT lines (pins 2 and 19 on the chip, respectively) are connected to the usual programming circuit. There are a pair of 4.7k pullups on the I2C lines (one resistor per line, of course) per datasheet recommendations -- I've seen indications on SparkFun that these are not needed, but that's with an Arduino, not a PICAXE (!), so I've left them in for now.

The 24LC256 ROM's pins are as follows -- note that the address lines are for the CHIP'S address, nothing to do with the memory locations inside ;)

01 - A0 -> GND
02 - A1 -> GND
03 - A2 -> GND
04 - GND
05 - SDA -> 20M2 B.5
06 - SCL -> 20M2 B.7
07 - WP -> VCC (Write Protect line. IIRC, tying to VCC inhibits write ops.)
08 - +V

Things that worry me with this circuit, right off the bat --
(1) I should probably put a voltage-sense in there, or SOMETHING fairly idiot-proof (a switch doesn't pass that test) so that if someone uses rechargeable batteries, the then-unnecessary voltage-drop diode is bypassed. (Would a Zener work here? What wattage do you folks think I need?)
(2) Not sure I need the pullups on the I2C line (see above).
(3) That ROM chip has a 64B buffer -- rather small for what I want to do, as it's 1/32 of a screen, and I want to display one whole screen at a time (at least to the unaided eye -- I could care less about cameras and camera-phones).
(4) I would LOVE to know what that contrast spec is -- PowerTip doesn't publish it... hmmm... might have to email them...

Any thoughts, suggestions, or other comments?

Er, to get that predictable first one out of the way -- I'm trying to think of something simple and creative to do, to 'break the ice' with my 08M starter kit. I'll start a separate thread for that, in a little bit. But THIS will not be my first project!
 

nick12ab

Senior Member
PICAXE isn't very fast and is irritatingly slow for GLCDs. However since you are just loading a pattern straight from an EEPROM it should be faster since you don't have the overhead of having to process the data into characters.

Have you thought about how you're going to get the data on the EEPROM? You're not going to manually create 512 bytes of data for each screen are you?

That ROM chip has a 64B buffer
The datasheet shows that it has 8K ram.

I would LOVE to know what that contrast spec is -- PowerTip doesn't publish it... hmmm... might have to email them...
The contrast on GLCDs is quite good but that's only if you're looking at it from one angle. If you need to look at it from multiple angles then the contrast is quite poor.
 

laserhawk64

Senior Member
@Bill.b -- I'd rather build my own, lol.

@nick12ab -- a few things. When I said "contrast spec" I was actually referring to the fact that they don't tell you in the datasheet the voltage range for the contrast adjustment pin. Sorry for the confusion.

8K RAM is glorious -- if that's kilobits (which I suspect) it's still enough for half a screen at a time. If that's kilobytes it's way overkill and will never be filled -- but I don't mind overkill here!

I was hoping that there was --somewhere-- a way to convert an image from eg JPG or PNG into something the screen could use. If not, I don't mind becoming friends with binary -- should be simple. I can draw it out on paper (I'm like that) and type it in without much trouble. Each pixel is either 0 or 1, on or off, black or white. Not hard. Just takes a long time.

Seeing as I'll likely have to email PowerTip about the contrast adjustment problem -- I might as well talk to them about an image converter as well. Or perhaps there's a universal one for monochrome LCDs of that size, that could be used?
 

nick12ab

Senior Member
@nick12ab -- a few things. When I said "contrast spec" I was actually referring to the fact that they don't tell you in the datasheet the voltage range for the contrast adjustment pin. Sorry for the confusion.
The datasheet isn't very clear, but there is a table that tells you what the contrast voltages are at different temperatures (but it says Vop not Vo which I think that is to indicate that it isn't the same as Vo but actually Vo+Vdd) and the absolute maximum rating for this pin is stated as Vdd-22V so the voltages in the table are probably negative and in relation to Vdd, which is how it is on every GLCD I've used.

This other GLCD datasheet (for a 128x64 LCD) says that it needs a voltage of around -9V and in relation to Vdd for a 128x64 GLCD that is about right. So it looks like your display requires about -20V in relation to Vdd, or -15V in relation to Vss - so you'll need to Google some circuits to produce this.

However before you do that, you should contact the manufacturer to make sure! If they don't help, then create a negative voltage by using a couple of 9V batteries and connect the negative voltage to the Vo pin through a pot (ends of track to negative voltage and Vss, wiper to Vo) and slowly adjust it to adjust the voltage from Vss to the negative voltage and see if anything appears. Measure the voltage at Vo, and you know the best voltage setting. Build a charge pump that can create a voltage of greater magnitude than that just in case component tolerances cause the maximum output voltage of the charge pump to be lower than expected.

ADDED:
I might as well talk to them about an image converter as well. Or perhaps there's a universal one for monochrome LCDs of that size, that could be used?
This can generate table/lookup/eeprom commands based on a bitmap you draw in the program but you'll have to do it in blocks that are eight pixels high i.e. you can't do the entire 128 pixel high area at once, but you can do 128 pixels wide at once. A PICAXE can be programmed with the table/lookup/eeprom command and some other code to transfer the data to an external EEPROM. You can also import the table/eeprom/lookup command later if you want to edit an existing drawing.

If you need to be able to see all 128 rows at once then you could make your own program based off the freely available source code for my program.
 
Top