Main Site Documentation

Here is my uLCD driver for the 4dSystems picaso display's


#1

Hello All,

I like to contribute my work for my uLCD display from 4dSystems (http://www.4dsystems.com.au/).
It is a small static class with all the graphic and touch functions that can be used with the
serial communication protocol firmware (http://www.4dsystems.com.au/prod.php?id=87.
This firmware need to be loaded into your display.
Please note that every screen has his own firmware.

for the code see: http://www.fezzer.com/project/183/4dsystems-ulcd-graphic-driver-/

enjoy


#2

Looks nice! How about a video? ;D


#3

Video? Pictures? Wiki project? :slight_smile:


#4

Yeah i working on that :wink:

EDIT: BTW. Gus, i have already tried to start a wiki page but i have no idea how to start a new one. When you have a min, can you drop by the chat and help me in the right direction?


#5

I will help you, give me a sec.


#6

oke here is a demo picture:


#7

Cool display! 8)


#8

Is the domino inside the enclosure?


#9

Seeing the cables coming out of it I would say no :stuck_out_tongue:


#10

Gus: sadly there is no space enough in the bottom section to store a domino look-a-like, im hopping i that a FEZ-mini can fit inside it. But then i need to buy an other FEZ and this time the mini.
I will do that after i have done all development and i only need to place all parts inside the enclosure etc.
here is a small video:

http://www.youtube.com/watch?v=ufaFiaihX4U


#11

I wonder how much you can do with such display and Domino since those displays are expensive!


#12

Very nice, although it would be nice if there were a few comments in that code :wink:


#13

Okay, thank you Chris for your idea.
I have modified first post with some comments.


#14

Very nice. The XML comments look great!


#15

I have modified it slightly to cope with the uOLED-128, which has only byte values for width and height,
on a contentious note - there is a lot of new byte[] { 0x00, (byte)width… etc going on, now that is all very fine for pc .Net, but personally I think you would be better off having a static byte buffer and filling it in each time, that way you dont overstress the GC, depends on how often these things are called of course…


#16

Hello peter,

can you give me a code example how to do this?
then i love to change it that way.

I working now on some nice extensions to display windows etc.


#17

OK, I think that is the way I would structure it, ie have the base 4dclass implement the raw commands and then a much more usable api sitting on top, ie take the DrawLine and Rectangle functions - it is much nicer to call with a point and a size rather than 2 points, as this is more in keeping with the GDI stuff in .NET, but maybe thats what I grew up with…

On an efficiency note, I was just thinking that rather than use a new byte[] for every command to just have a static buffer and fill each position with the byte and then send the array out to the port, Ill send some code when I have finished playing,

Of course that shouldnt compromise your cool extra window stuff should you change the way the raw commands are implemented… thats the beauty of C#

btw…I didnt mean to be critical, just raising a debate to benefit all of us, the code you contributed is nicely done…


#18

Don’t worry about it, i like to learn as much how to program using C# i’m a delphi/PHP programmer.

Can you view me an example of what you mean?


#19

I think I would have something like this…


        // UART doesnt have a PutByte
        // for outputting bytes and int16s
        private byte[] buffer = new byte[ 2 ];

        private void Tx( byte b )
        {
            buffer[0] = b;
            UART.Write( buffer, 0, 1 );
        }

        private void Tx( int i )
        {
            buffer[0] = (byte)(i >> 8);
            buffer[1] = (byte)i;
            UART.Write( buffer, 0, 2 );
        }

        private void Tx( byte[] data )
        {
            UART.Write( data, 0, data.Length );
        }

and for the commands


        static public void Rectangle( int x1, int y1, int x2, int y2, int color )
        {
            //SendData2( new byte[] { 0x72, (byte)(x1 >>8),     (byte)x1, (byte)(y1 >>8), (byte)y1, 
            //                                (byte)(x2 >>8),     (byte)x2, (byte)(y2 >>8), (byte)y2, 
            //                                (byte)(color >>8) , (byte)color} );
            Tx( 0x72 );
            Tx( x1 );
            Tx( y1 );
            Tx( x2 );
            Tx( y2 );
            Tx( color );
            CheckResponse();
        }

This code isnt as pretty but is less wasteful in memory allocations


#20

spot the deliberate mistake, the Tx overloads need to be


        private void Tx( byte b )
        {
            buffer[0] = b;
            UART.Write( buffer, 0, 1 );
        }

        private void Tx2( int i )
        {
            buffer[0] = (byte)(i >> 8);
            buffer[1] = (byte)i;
            UART.Write( buffer, 0, 2 );
        }

otherwise you have to be careful about which overload gets called