FEZ Panda II with HD44780 controlled LCD

Panda II with HD44780 LCDSecond test: displaying text on a 20×4 LCD controlled by a HD44780 compatible driver chip. As you can see, it’s working 🙂

After Eric VDB pointed me to Codeshare in a comment on a previous post, I couldn’t resist searching for something that could help me get started.

And I found something useful here. Although the example that came with it was targeted for a Gadgeteer Extender Module (which I don’t have), I had no problems getting it to work. I created an additional constructor that would accept pin numbers, like this:

SerialLCDDisplay lcd = new SerialLCDDisplay(
                     FEZ_Pin.Digital.Di21, // RS
                     FEZ_Pin.Digital.Di23, // ENABLE
                     FEZ_Pin.Digital.Di25, // DB4
                     FEZ_Pin.Digital.Di27, // DB5
                     FEZ_Pin.Digital.Di29, // DB6
                     FEZ_Pin.Digital.Di31); // DB7

It took me some time to figure that out, but within the hour I had the LCD running. I added an endless loop with an increasing counter and a delay of 1 second and let the sketch program run; at the time I took the picture it had been running for more than 4 hours.

One thing I noticed was that the LCD sometimes displayed garbage when the Panda was rebooted; after that everything worked OK, but startup looked a bit ugly. Maybe give the hardware connected to the Panda some more time to settle? I don’t know yet; we’ll see about that later. Another thing I need to have a look at is the fact that this SerialLCDDisplay class was apparently written for an LCD with 2 lines; cause line 0 (first line on the LCD) and 1 (second line on the LCD) were OK, but output destined for line 2 were shown on the first line of the LCD again – probably a minor issue.

And since I’ll have to change the class code for that anyway, I’ll also add 2 additional parameters with which I can set the number of rows and columns of the LCD – cause I have both 20×4 as well as 16×2 LCDs!

Oh, and I saw these automatically generated Debug messages appearing in the Debug output window in Visual Studio on my PC:

GC: 4msec 12132 bytes used, 52248 bytes available
Type 0F (STRING              ):     96 bytes
Type 11 (CLASS               ):   1596 bytes
Type 12 (VALUETYPE           ):     60 bytes
Type 13 (SZARRAY             ):    108 bytes
Type 15 (FREEBLOCK           ):  52248 bytes
Type 17 (ASSEMBLY            ):   7560 bytes
Type 18 (WEAKCLASS           ):     48 bytes
Type 19 (REFLECTION          ):     24 bytes
Type 1B (DELEGATE_HEAD       ):     72 bytes
Type 1D (OBJECT_TO_EVENT     ):    168 bytes
Type 1E (BINARY_BLOB_HEAD    ):    156 bytes
Type 1F (THREAD              ):    384 bytes
Type 20 (SUBTHREAD           ):     48 bytes
Type 21 (STACK_FRAME         ):    828 bytes
Type 27 (FINALIZER_HEAD      ):    168 bytes
Type 31 (IO_PORT             ):    252 bytes
Type 34 (APPDOMAIN_HEAD      ):     72 bytes
Type 36 (APPDOMAIN_ASSEMBLY  ):    492 bytes

This must be some diagnostic information from the GC process kicking in. 12 KB used? Woow… that’s 20%. But what’s the baseline of used memory, e.g. what does a program with an ’empty’ main() use in terms of memory? Sounds like a good subject for another post..

Tagged , . Bookmark the permalink.

3 Responses to FEZ Panda II with HD44780 controlled LCD

  1. Eric VDB says:

    One thing I noticed was that the LCD sometimes displayed garbage when the Panda was rebooted

    Thats due to the fact that you can’t control the io’s during startup. One solution is to add pull-down resistors on the datalines, that should prevent the garbage you are seeing.

    Also, once you feel the driver is in a good shape, feel free to contribute back and place the driver on codeshare.

    The 12kb used is not only your program, but includes also the netmf dll’s used by your program deployed to the panda.
    I still have to see the 1st person on the forum that ran out of memory (with code only, you will run out of memory if you try to read a file from the sd card with a streamreader, instead use the filestream method to read in small chuncks)


  2. Eric VDB says:

    Keep an eye on this thread for the 4 lines: http://www.tinyclr.com/forum/topic?id=7109

  3. Eric,
    I just posted a solution over there, thanks for your help.
    Found it in the Arduino LiquidCrystal lib BTW; I knew I’d seen it somewhere sometime 😉

Leave a Reply

Your email address will not be published. Required fields are marked *