PDA

View Full Version : EA DOGM128-6 Display with SPI



Clemens
01-19-2008, 07:10 AM
Hi all,

this will be a loooong question, so if you're in a hurry I advise you to ignore this posting.
Thanks to all those who take the time to read it.
I'm stuck with my EA DOGM128-6 Display.
http://www.electronic-assembly.de/eng/dog/dog.htm
I bought it because I like the friendly Triceratops in the adds.

http://www.secondpage.de/images/external/dogm2.jpg

I'm stuck mainly because I don't know if I got the hardware setup right so I don't know if I can even expect to get something on the screen when trying out some code.
I interpreted the datasheet (http://www.electronic-assembly.de/eng/pdf/grafik/dogm128e.pdf) that I have to make the following connections:
SI and CLK to two propeller pins. CS to ground (it says Chip select: active low) Is that correct? A0 also to ground for command input, which i thought would be enough for testing by initializing the display and setting all pixels to black:
http://www.secondpage.de/images/external/dogm3.jpg

http://www.secondpage.de/images/external/dogm.jpg

Now I must admit that I'm stuck with SPI just the same.
I read a couple of articles (http://en.wikipedia.org/wiki/Spi) but it sais that SPI is two way communication, but the display doesn't have an output.
I also found an SPI Object on the german forum and it is even for another Dogm Display http://propellerforum.sps-welt.de/viewtopic.php?t=26, but I couldn't get it to work when I tried things like·putting these commands in the init section:




Write_cmd($40)
Write_cmd($A1)
Write_cmd($C0)
Write_cmd($A7)
Write_cmd($A2)
Write_cmd($2F)
Write_cmd($F8)
Write_cmd($00)
Write_cmd($27)
Write_cmd($81)
Write_cmd($16)
Write_cmd($AC)
Write_cmd($00)
Write_cmd($AF)
Write_cmd(%10100101)



I also looked at the SPI example "Assembly Code Examples for the Beginner: SPI Engine Demo"
http://forums.parallax.com/showthread.php?p=601870
but it is also two way communication, right?

So you see I'm totally lost. This may be a too big step for me right now, I now. But if you have any suggestions other than "put that thing in the drawer and don't take it out until someone has written an object for it" I would really appreciate it...
Thanks for reading,·http://forums.parallax.com/images/smilies/smile.gif

Clemens
·

mirror
01-19-2008, 07:37 AM
Chip select is Important!!!

It needs to be driven in accordance with the data sheet - it tells the device where the start of the command is.

So the sequence is: (for every command)
- Chip select ON
- Send 1 command - not 1 byte, but 1 whole command sequence.
- Chip select OFF

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔

deSilva
01-19-2008, 08:08 AM
Clemens, I have a similar display on my desk for some days now.... but shifted it's connection to the weekend, still hoping I have so many caps http://forums.parallax.com/images/smilies/smile.gif

I am sure we will get it working tomorrow... you will know what time it is now around Greenwich http://forums.parallax.com/images/smilies/smile.gif

Post Edited (deSilva) : 1/19/2008 1:13:59 AM GMT

Clemens
01-19-2008, 08:28 AM
Thanks Mirror, i thought it could be just·pulled·to ground because that's how it looks like in the SPI object from UWE on the german forum:
http://propellerforum.sps-welt.de/viewtopic.php?t=26
I just had a look at the ST7565R datasheet (http://www.lcd-module.de/eng/pdf/zubehoer/st7565r.pdf) on page 64 and I'll try to understand this. I'm a little confused that the timing is so flexable.

Thanks deSilva I was hoping you have one since it was your posting from a couple of weeks ago where I first saw the dogm.
So now there's hope that I'll get this thing running. good.

http://forums.parallax.com/images/smilies/smile.gif

Clemens

deSilva
01-19-2008, 09:00 AM
UWE's code is no good for this display. It is much simpler..
But good night now ..

OzStamp
01-19-2008, 05:41 PM
Hi Clemens.

How much do these display's cost ? With the SPI interface.

The interface chip these units use is a sistronics 7036 I think..
It has a 4 wire SPI protocol..

Cheers Ron Mel OZ

deSilva
01-19-2008, 05:54 PM
They use the Sitronix ST7565R.
Despite their high WAF, they are extremely low cost,
128x64 around 22 Euro
132x32 around 14 Euro

Clemens
01-19-2008, 06:06 PM
Plus another 5 to 10 Euros (depending on the color) for the backlight. There is also a touchpanel for it.
Yes, I'm starting to understand why it said 4-wire SPI and not just SPI. http://forums.parallax.com/images/smilies/wink.gif

deSilva
01-20-2008, 05:22 AM
Sorry Clemens,
I should have posted something long ago... But it turned out to be a little bit tricky... The commands are NOT well documented...

Edit:
improved version in next posting.. http://forums.parallax.com/images/smilies/smile.gif

Post Edited (deSilva) : 1/20/2008 12:16:50 AM GMT

Clemens
01-20-2008, 06:27 AM
Thank you so much, DeSilva!
Just tried it but couldn't get it to work so far...
http://forums.parallax.com/images/smilies/shakehead.gif
I think I have the four wires connected correctly, but no luck so for.
But thanks anyway at least now I know that it must be something wrong with my setup...

Clemens

Clemens
01-20-2008, 06:37 AM
Stupid question: Do I have to connect the reset pin of the display?

deSilva
01-20-2008, 07:03 AM
Clemens:
Do you have any reactions at all? Looking at your photograph the caps look fine... You have to connect CS of course.
RESET was WRONG at GND!
It is NON-RESET http://forums.parallax.com/images/smilies/smile.gif

Clemens
01-20-2008, 07:15 AM
No, no reactions at all.

Yes, I connected:
SI (36) to pin 0
CLK (37) to pin 1
Reset (38) nowhere
A0 (39) to pin 2
CS (40) to pin 3

I'm confused that there are no "waitcnt"'s in the program.
does this mean it works at the highest possible spin-speed?
Do I have t set :
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
?

deSilva
01-20-2008, 07:19 AM
Clemens RESET is 39 and A0 is 38 !!!
It works with all speeds! I tested without crystal, and with 80 MHz,,,

Clemens
01-20-2008, 07:21 AM
oh, sorry, I connected it right though, it was just a typo in the post.

deSilva
01-20-2008, 07:38 AM
:-(
So, again:

36 -> I/O 0 (= pin 1)
37 -> I/O 1
38 -> I/O 2
39 -> plus 3V
40 -> I/O 3 (=pin 4)

Should work! Well, MUST work!! Just run the program...

Clemens
01-20-2008, 08:01 AM
yes that's how it is connected, and yet it doesn't work :-(
I didn't have reset connected to plus 3V but did so now - still nothing happens when I load the program.
I'm sorry to take up your time like this.

Clemens
01-20-2008, 08:18 AM
Waahhhnsinn! Danke, spitze!

Oh, sorry, my german breaks through when I'm getting emotional... http://forums.parallax.com/images/smilies/wink.gif
I just changed the Initialization to the defaults in the datasheet:


BYTE $A1 'ADC reverse
BYTE $C0 'reverse COM
BYTE $A6 'normal display
BYTE $A2 'set bias 1/9
BYTE $2F 'set Booster
BYTE $F8, $00 'set Booster x4
BYTE $27 ' change here for contrast: $24..$27
BYTE $81, $16 'set contrast ($3f to $00)
BYTE $AC, $00 'no static indicator
BYTE $AF ' Display ON

and now it's working!
Thanks DeSilva, I'm in deep debt, I would have never gotten there myself...
... and the funny thing is, I almost understand every part of your program.
this will keep me occupied for a while.
Cool.

Clemens

deSilva
01-20-2008, 08:19 AM
It is extremely useful time - I had to connect this display anyhow - But I cannot understand why it doesn't work with you..

I made some changes in the contrast setting... Maybe you will change them back to the recommended values...
But that cannot be the reason... If the contrast is bad, the display should look "black" - that's how it started with me 4 hours ago http://forums.parallax.com/images/smilies/smile.gif

Clemens
01-20-2008, 08:21 AM
haha, yeah yeah yeah.

deSilva
01-20-2008, 08:24 AM
Great! I suspect the contrast values $24..$27 have to do with the capacitance... As I had not 0 1µF I used 4.7 µF... This is within the limits, but it turned the display black.. So I had to adjust for it...

I will post a minor update of the test program in 10 minutes, so you can see some more of the commands in action...

Clemens
01-20-2008, 08:27 AM
yes it is the contrast. there is nothing visible with a setting of three. maybe its the background lighting. In the datasheet it sais that the contrast needs to be set individually so probably it varies form display to display. Who cares - its working, haha.

Clemens
01-20-2008, 08:27 AM
our postings do overlap again...

deSilva
01-20-2008, 09:09 AM
Last Update for tonight:


'' MPE_SPI_DOGM_005
'' DOGM 4-PIN 2008-01 by deSilva

' ----- The following routine is a test routine
pub checkOut | line , scroll
init

' slow wipeout
REPEAT line FROM 0 TO 7
clearLine(line)


spiWrite(string($B0,$10),3,0)
REPEAT 16
spiWrite(string($01,$03,$07,$0f,$1f,$3f,$7f,$ff),8 ,1)


spiWrite(string($B1, $10),3,0)
REPEAT 16
spiWrite(string($18,$3c,$7e,$ff,$10,$08,$10,$08),8 ,1)

spiWrite(string($B2,$10),3,0)
REPEAT 16
spiWrite(string($01,$03,$07,$0f,$1f,$3f,$7f,$ff),8 ,1)

spiWrite(string($B6, $10),3,0)
REPEAT 16*8
spiWrite(string($FF),1,1)

aString(string("Regards:",10,"deSilva!"))


REPEAT 32*5
scroll++
scroll &= 63
scroll |= $40
spiWrite(@scroll,1,0)
waitcnt(CNT+clkfreq/20)


REPEAT
spiWrite(string($A6),1,0)
waitcnt(CNT+clkfreq)
spiWrite(string($A7),1,0)
waitcnt(CNT+clkfreq)

PUB aString(s) | n, g, p
n:= -16
p := 0
REPEAT WHILE g := BYTE[s++]
IF g == 10
p := 4 ' next line
n :=-16
ELSE
aGlyph(g, n+=16, p)


'----- Here starts the driver

CON
#0,SD,SCL,A0,CS ' using I/O 0..3 change whenever appropriate
PUB spiWrite(dataAddr, nmbBytes, thisA0): data

outa[CS]~
outa[A0] := thisA0
REPEAT WHILE nmbBytes-- > 0
IF dataAddr
data := BYTE[dataAddr++] >< 8 'revert each byte
REPEAT 8 'transfer from D7 to D0
outa[SCL]~ 'clock goes low
outa[SD] := data
outa[SCL]~~ 'transfer at rising edge
data >>= 1
outa[a0]~
outa[CS]~~



DAT
initDOGM BYTE $40 'Start line =0
BYTE $A0 'ADC reverse
BYTE $C8 'reverse COM
BYTE $A6 'normal display
BYTE $A2 'set bias 1/9
BYTE $2F 'set Booster
BYTE $F8, $00 'set Booster x4
BYTE $25 ' change here for contrast: $24..$27
BYTE $81, $03 'set contrast ($3f to $00)
BYTE $AC, $01 'no static indicator
BYTE $AF ' Display ON
initDOGMend BYTE

clearDOGM BYTE $B0 ' set line
BYTE $40
BYTE $10 ' set low nibble
BYTE $00 ' set high nibble
clearDOGMend BYTE

PUB init
OUTA[CS]~~
OUTA[SCL]~~
DIRA[SD..CS]~~
' SpiWrite(string($E2),1,0) ' internal reset
SpiWrite(@initDOGM, constant(@initDOGMend-@initDOGM) , 0)

PUB clearLine(line)
clearDOGM &= $f0
clearDOGM |= line
spiWrite(@clearDOGM, constant(@clearDOGMend-@clearDOGM) , 0)
spiWrite(0, $80, 1)



PUB aGlyph(glyph, dPos, startPage) | posString, shift, shift0, c, cBase , page, row
cbase := $8000+ glyph/2*128
shift0 := glyph//2
posString.byte[ 2] := $00 + dPos&15
posString.byte[ 1] := $10 +(dPos>>4)
REPEAT page FROM 0 to 3
posString.byte[ 0] := $B0 + page+startPage
spiWrite(@posString,3,0)
REPEAT shift FROM shift0 TO 31+shift0 step 2
c :=0
REPEAT row FROM 0 to 7
c |= ((LONG[cBase][row+page*8]>>shift)&1) << row
spiWrite(@c,1,1)

Post Edited (deSilva) : 1/20/2008 2:33:01 PM GMT

Clemens
01-20-2008, 09:18 AM
nice scrolling, but the glyphs are scrambled. will post a picture tomorrow..

deSilva
01-20-2008, 08:02 PM
I post this simple application as it also shows how to use COGs...

The driver (version 5) is in the enclosed ZIP. Sorry I changed some conventions:
spiWrite is now called write
init has a parameter ("upside down", FALSE or else)
clearLine is now called clearPage

I have a low cost 32 lines display only. however it contains full 64 lines RAM and can be scrolled !



'' MPE_SPI_GOLEM_001 (modified twice)
'' A GameOfLife for the DOGM 4-PIN 2008-01 by deSilva

' A most simple implementation, the status is kept in bytes
' in a "lines" x 128 array ("lines" are 32 or 64 resp.)
' It can be experimented with "divide and conquer"; computing
' the next generation is split to another, or 2 or even 4 COGs

' It shows that the SPIN implementation of SPI is NOT a bottleneck
' for this kind of algorithms

_clkmode = xtal1 + pll8x ' change here!
_xinfreq = 10_000_000 ' change here!

LINES = 32 ' change to 64 for full display
PARTS = 4 ' number of additional COGs working in parallel (1, 2 or 4)
' -1 (rather than epected "0") indicates NO parallelism
ledPin = 6 ' idle indicator

OBJ
gdogm : "MPE_SPI_DOGM_005"

VAR
BYTE complete[||PARTS] ' feed back of COGs when completed
BYTE GOL[128*lines] ' new generation is assembled here
BYTE upperBorder[128] ' border, just zeros
BYTE GOLB[128*lines] ' old generation to read and to display from
BYTE lowerBorder[128]

PUB golem | x, i, completed, part, aStack[20*||PARTS]

DIRA[ledPin]~~ ' will indicate main COG idle

gdogm.init(0)

X:=CNT
REPEAT i FROM 0 to constant(128*LINES-1)
GOL[ i] := (?X)&1


REPEAT

LONGMOVE(@GOLB, @GOL, constant(128/4*LINES))

IF PARTS<1 ' no parallel COGS!
nextGeneration(0, @complete)
ELSE
REPEAT part from 0 to PARTS-1 ' recruit some COGs for the dirty work
cognew( {
} nextGeneration(part*constant(128/||PARTS), @complete+part), {
} @aStack+20*4*part)

displayGOL ' displays old GOLB!

outa[ledPin]~~

REPEAT ' wait for all COGs ready
completed~
REPEAT part FROM 0 to ||PARTS-1
completed += complete[part]
UNTIL completed == ||PARTS
outa[ledPin]~

PRI nextGeneration(offset, completePointer) |i,c
longfill(@GOL+offset*lines,0, constant(128/4/||PARTS)*lines)
BYTE[completePointer]~
REPEAT i FROM offset*lines to (offset+constant(128/||PARTS))*lines-1
c := GOLB[i-1]+GOLB[i+1]+GOLB[i-lines]+GOLB[i+lines]+GOLB[i+1+lines]+ {
} GOLB[i-1+lines]+GOLB[i+1-lines]+GOLB[i-1-lines]
IF c == 3 or (C==2 and GOLB[ i])
GOL[ i] := 1
BYTE[completePointer]:=1


PRI displayGOL |page, posString,col, c, cc[128/4],refAddr

posString.byte[ 2] := $00 '+ dPos&15
posString.byte[ 1] := $10 '+(dPos>>4)
REPEAT page FROM 0 TO constant(lines/8)-1

posString.byte[ 0] := $B0 + page
gdogm.write(@posString,3,0)
REPEAT col FROM 0 to 127
c :=0
refAddr := col*lines+page*8
REPEAT 8
c := (c<<1) + GOLB[refAddr++]
BYTE[@cc+col] := c><8
gdogm.write(@cc,128,1)
'=== The End



Edit:
Sory I had to modify this again for a grave - but not noticeable - error in the COG completion logic ...

Post Edited (deSilva) : 1/20/2008 3:02:36 PM GMT

Clemens
01-20-2008, 08:12 PM
here is the image:

http://www.secondpage.de/images/external/dogm4.jpg (http://www.secondpage.de/images/external/dogm4.jpg)

I see that the scrambling is because you have the 132x32, right? (*overlapped post again*)

But don't tell me what to change, this is a good exercise for me!
I'll report back as soon as I figured it out.
Cool, it also shows how to use the internal font!

This must go to the wiki or Object Exchange as soon as it is finished.
Thank you,

Clemens

deSilva
01-20-2008, 09:17 PM
Interesting: It shows that yours display also has 132 columns, 4 of them not advertised http://forums.parallax.com/images/smilies/smile.gif I had changed the clearPage routine for this already ($84 rather $80)

The scrambling is unclear....
Can you try the GOLEM please http://forums.parallax.com/images/smilies/smile.gif

deSilva
01-20-2008, 09:33 PM
Clemens,
I think it was my fault: When you have just copied the code from the browser window - WITHOUT FIRST getting the true contents with "respond to message" - some brackets might have got lost! [ 0], [ 1] , [ 2] http://forums.parallax.com/images/smilies/smile.gif

Best use the driver 005 in the zip!

Clemens
01-20-2008, 10:00 PM
Everything is fine now. No scrambled text in your MPE_SPI_DOGM_005 anymore.
Life is forming on my display. Beautiful!
http://forums.parallax.com/images/smilies/smile.gif

I will try to get·a smaller font running·(starting with a bitmap font like the hydra-people do for their games.)
Unfortunately I still have some work to do, or there will be some very unhappy customers tomorrow. LOL
Thank you so much again, this was a giant step for me, I've learned a lot this weekend.

Clemens

Clemens
01-27-2008, 07:27 AM
Hi,

Here is my small Dogmfont. It is non-mono-space, so characters have different widths between one and five pixels. This way if you're lucky you can get 30 Characters per line.
It requires deSilvas driver "MPE_SPI_DOGM_005.spin" (5 posts up).

I tried my best to program this like the pros do - but any criticism is very welcome. http://forums.parallax.com/images/smilies/smile.gif
Next I will try to get one bit images from an SD-Card to the screen. Guess I'll take a look at Rayman's website to see how to do that...

Cheers,


Clemens

http://www.secondpage.de/images/external/dogm5.jpg

deSilva
01-28-2008, 03:40 AM
This is just a fun application http://forums.parallax.com/images/smilies/smile.gif


' A DOGM Textreader v001

_clkmode = xtal1 + pll8x ' change!
_xinfreq = 10_000_000 ' change!


OBJ
gdogm : "MPE_SPI_DOGM_005"
font : "dogfont_1"

PUB main|n, addr
gdogm.init(0)
REPEAT
scrollAndSetLine(string("DOGM Textreader v01 by deSilva"),30)
REPEAT 7
scrollAndSetLine(string("?"),0)
waitcnt(cnt+clkfreq)

addr := @theText
REPEAT

REPEAT N from 0 to 40 ' max characters
IF byte[addr+N] == 13 or N == 30
scrollAndSetLine(addr, N)
addr += N+1
QUIT


PRI scrollAndSetLine(pos, bytes)| delimiter, posStr, page
posStr := string($B0,$10,$FF,$40)

page := (byte[posStr]+1)&7
byte[posStr] := page|$B0 ' scroll through pages
byte[posStr+2] := 0
byte[posStr+3] := (byte[posStr+3]+8)&63|$40 ' scroll through pages


gdogm.clearpage(page)
gdogm.write(posStr, 4, 0)


delimiter:= BYTE[pos+bytes]
BYTE[pos+bytes] := 0

font.aString(pos)

BYTE[pos+bytes] := delimiter
waitcnt(CNT+clkfreq/4)

DAT
theText BYTE
FILE "dogfont_1.spin"



Edit:
Exchanged two lines!

Post Edited (deSilva) : 1/27/2008 10:41:10 PM GMT

deSilva
01-28-2008, 04:02 AM
@Clemens: Can you please shift your last posting frim IR ti this thread?
Hiwever, I do not understand the image write routine... You take each 8th byte only???

Clemens
01-28-2008, 04:44 AM
Yes, sorry I posted this too early and in the wrong thread. (I have removed it and will post it here as soon as it is more advanced...)
I took every 8th byte starting from byte 1 in the 8th line, starting from byte 2 in the 7th line, starting from byte 3 in the 6th line and so on.
So the first 8 bytes form the first column the second 8 bytes the second column and so on. (The image in the dat is thus displayed rotated by 90 degrees.)
It worked and I thought it is smart because I don't have to switch rows after each byte.
I guess I better think this over... ...just delete it, please. http://forums.parallax.com/images/smilies/wink.gif
The text-scrolling you posted does not work on my display. It just shows half of the "v" and the "a" of "deSilva" for a second and then turns to blank.
Did you change the "MPE_SPI_DOGM_005" since you last posted it?

Sorry for the confusion. http://forums.parallax.com/images/smilies/smile.gif

deSilva
01-28-2008, 05:46 AM
Tis was extremely stupid of me... I exchanged two lines I don't know when and why...
Corect is:


gdogm.clearpage(page)
gdogm.write(posStr, 4, 0)


I corrected it above.

But during that debugging I found that you inititalize in your driver:
$A1 and $C0 as byte 2 and 3..

I had changed this to $A0 and $C8, and changing it with the "upsideDown" flag only inside the INIT routine, to $A1 and $C6... I must still see why it is $C6 rather than $C0...

Nevertheless I have no strong feelings about what's upside and what's down... We should do the same though... What is the standard orientation from the manufacturer?

Clemens
01-28-2008, 06:36 AM
Now it's working! Thank You. Very Nice indeed.
Actually wether to use it upside down or regular depends on the usage according to the manual. The angle from where I was taking the pictures is the "better" angle, the display is readable almost until you look flat across it. But I thing the overall readability is really good, so I don't mind either. But when I change the settings to upside down it cuts off the first 4 pixelcolumns and I havn't figured out why that is, yet. So much to learn. And another working day tomorrow...

Clemens
01-28-2008, 06:54 AM
I just noticed a little bug, that may not be visible on the 4-Line display. A new line is first displayed on the top line and then on the bottom line scrolling up. So the scrolling order is: "0,7,6,5,4,3,2,1" instead of "7,6,5,4,3,2,1,0"
I didn't notice at first because I was confused by the fast scrolling, but now that I made it slower, it is obvious.

deSilva
01-28-2008, 07:09 AM
(a) I shall look into it; it in fact is "hidden" in the invisible part of my half-display http://forums.parallax.com/images/smilies/smile.gif
(b) So I shall configure your angle as normal, and turn my display http://forums.parallax.com/images/smilies/smile.gif
(c) The display has 132 columns.. Maybe only 128 are useable when writing in the backwards direction... This might explain why they advertise only 128 pixels. The smaller display is advertised as "132 pixel" and does not have such an issue.. But I shall look into it next weekend http://forums.parallax.com/images/smilies/smile.gif

Oj
04-12-2008, 03:56 AM
Hi all,

I've just got myself one of the DOGM128-6 displays and have been struggling to find any info on how to use it, so finding this thread is a great relief.

The small font from Clemens looks really nice. Is there a library of a slightly larger font too? Ideally I would like to have a few sizes at my disposal in order to be able to prioritise information on screen.

With larger fonts that run through more than one 'page' (i think this is how the rows are referred to) would it still be possible to scroll the text?

Thanks

Oj

Clemens
04-12-2008, 05:07 AM
Hi Oj,

take a look at this thread: http://forums.parallax.com/showthread.php?p=708332
those fonts are generated by scaling down the internal rom font, so they don't look perfect but use up little memory.
At the moment I'm trying to learn assembler by making a driver with screen buffer for the dogm, so one can mix graphics and text.
I am new to assembler (and programming in general) so I guess it will take a long time till I'll have something worth posting.

I have attached another experimental version I made of DeSilva's driver that can display underlined negative bold and regular font.
But please note that this is far from beeing optimized...

Cheers,

Clemens

Peter Verkaik
04-13-2008, 08:43 PM
Question on backlight control (since it is seperated from the display):
Does the DOG control the C1 and C2 (leds cathode connections) or does it need
to be controlled externally, eg. open collector switch to GND ?
The datasheet for the displays specifies No Connection on pins A1, C1, A2 and C2.

regards peter

Clemens
04-13-2008, 09:45 PM
That's right, those pins are not connected to the actual Display electronically, they are just glued or melted onto the transparent plastic on top.
So there is no command to control the backlight, you have to sacrifice another pin like you suggested.

Rayman
04-13-2008, 11:26 PM
That's a nice looking display... Is it only sold in Europe? I don't see it sold in the US...

Post Edited (Rayman) : 4/14/2008 5:16:25 PM GMT

Clemens
04-14-2008, 11:37 PM
Hi Ray,
Just got a reply to an email to Electronic Assembly, because I wanted to know when the touchscreen sticker for the display (as shown in the datasheet) will be available. I also asked if they have a US-Distributor.
They say they are currently negotiating with Mouser and Allied Electronics. They also have a canadian distributor:
BIRDE Marketing Inc.
CA-Ontario
Phone +1-905-477-7722
Fax +1-905-477-7813
email: toronto@birde.ca

They didn't answer my first question though... :-( Never ask two questions in one email... :-D

I have a very badly programmed asm driver running now. The display accepts SPI at full asm speed. - So I think it is possible to get some greyscales...

Fred Hawkins
04-15-2008, 05:35 AM
Wonder how much it costs to ship from EU land? I find two hits, SOS has it at $21.96 and MMS-e (uk) has it at £12.99.

http://www.mmselectronics.co.uk/lcdgraphicdog.htm
http://www.soselectronic.com/?str=319&producer=ELECTRONIC%20ASSEMBLY

both have the spec sheet in english.

richardc
06-27-2008, 04:56 PM
Hi All,

My first post to your forum, as yours is the only one I have found with any info on the practical use of the Dog displays.

Am just building my own using the DogL 128x64 unit, using Pic assembler, - and after seeing Clemens excellent pictures - it just raised one question regarding the RST pin 39.

He has tied it to VDD, being the condition for normal operation, however the controller manual states that after power on the RST should be held low to complete a full Hardware Reset at power on.

Clemens display clearly works, but just wondered if any extra code was used when not doing a hardware reset ? or if in general use it has been found beneficial or necessary to do a hardware reset at power on ?

thanks

Richard

Clemens
06-27-2008, 07:36 PM
Hi Richard,

You're right, if you can spare one extra pin it's a good idea to use it to do a hardware reset on startup.
When I restart the propeller while the dogm is receiving data it sometime crashes and I have to turn the power off and on to reset it. This can be quite annoying because the dogm seems to get enough current from the usb-connection to not reset, so I have to disconnect the prop-plug too. It is only a problem while I am programming and debugging of course and no problem at runtime.
Good luck with your project,

Clemens

richardc
06-27-2008, 09:22 PM
Hi Clemens

Thanks for you quick and helpful reply.

As you say, your way is probably fine for testing etc. - hopefully a resistor and capacitor across the RST pin will act as the power on pulse generator rather than wasting an i/o line - will give it a try, when I have the software sorted.

Just another little point - don't know if you have seen it - the chip controller data sheet , page 54, says that you should Refresh the Dram 'regularly' but unable to find any specification as to how often that should be ?? - Do you 'refresh' the dram ?

thanks

Richard

richardc
07-17-2008, 10:55 PM
Hi Clemens,


Thought you might be interested in the link below showing my Dog unit - without using an i/o line for the Reset.

Although coded in Pic assembler, you might be able to make use the RS glcds, particularly the Black and White one, which is very good and clear in direct sunlight.


Richard


http://www.electro-tech-online.com/micro-controllers/40676-glcds-pic-18f-assembler.html

Peter Jakacki
07-22-2008, 07:50 PM
Hi,

I'm designing a DOGM128 with touchscreen into a product although I am a little confused about some minor aspects of this product. I am considering using the display in a portrait mode which should be ok I guess (software!) but I'm not sure about the viewing angle. Also, is the touchscreen available for this yet and has anybody used it? I'm trying to figure out whether the screen contacts are on the bottom of the flex etc.

The touch-screen controller chip I'm thinking of using is the TSC2046PW which is readily available. The reason for portrait mode is it makes it easier to display a standard numeric keypad.

Clemens,
What is your overall impression of the display, is it good enough to use in a commercial product? Sure would help if EA had distributors here in Oz as well plus the only way to find out about price and availability is by contacting them.

*Peter*

Clemens
07-22-2008, 09:44 PM
@ Richard:
Conratulations for getting your driver done.
I never refreshed the Dram as far as I know ... http://forums.parallax.com/images/smilies/wink.gif
I have a dirty but working assembler driver for the display but still a lot of cleaning up to do.
I hope one day it will be good enough for the Object Exchange....

@Peter:
I havn't seen the touchpad for sale anywhere yet and Electronic Assembly seems to be interested in big business only :-(
For my current project I used some ordinary buttons, but I plan to get another dogm (hopefully with the touch pad) soon.
I'm very happy with the display. It is very well readable in the dark (with back light) and also in bright sunlight, which is important for me as I am using it on an automated panorama photography tripod head. I'm very satisfied with the viewing angle, but I cannot really supply any numbers in degrees.

I was not successful in producing grayscales however. You can feed the display fast enough (full asm speed) to get a very high framerate but if you try to do grayscales by toggling pixels they won't respond fast enough and tend to be darker next to black pixels, so I guess it is just not meant to be used that way.

It really depends on what you have in mind to judge if it is suitable for a commercial product. It cannot compete with mobile phoene displays in terms of resolution and colordepth, but it is much better readable in sunlight.
Do you thing the touch pad could be read directly with the propeller using Sigma Delta, or is this complete nonsense? I have no understanding of how these devices work (yet).

Post Edited (Clemens) : 7/22/2008 11:11:03 PM GMT

richardc
08-04-2008, 04:06 AM
Hi

Re Peter and Clemens comments about touch screens for the EA DogL units - their official stick-on touch screen for the 128 x 64 DogL is a 4 wire Analogue unit, that will require some extra hardware and software.

However EAs 5x3-A touch screen is a 'Digital' switch type that can be fed into any micro port with just a pull up resisistor, and it will just fit onto a DogL unit with a bit of care.
It needs a smd 10 way connector but the pins are on 1mm spacing, so can be hand soldered with a fine point bit.

I purchased my touch screen for £8.50 net from MMSe here in the Uk, and having visited and chatted to the owner Marc, he already ships one off, small orders to diyers worldwide. http://www.mms-e.co.uk/


hth

Richard

Clemens
08-04-2008, 04:00 PM
hm, the datasheet of the DogL states that the "official" touchscreen behaves just like two pots for horizontal and vertical position, so I was hoping I could read it with sigma-delta.
http://www.electronic-assembly.de/deu/pdf/grafik/dogl128-6.pdf·(Sorry, German)
Still no way for me to find out yet because they don't sell it to unimportant people like me... http://forums.parallax.com/images/smilies/smile.gif

richardc
08-04-2008, 05:01 PM
Hi Clemens

Quote - "Still no way for me to find out yet because they don't sell it to unimportant people like me.. "


Assume from the time you are somewhere in the Americas ?

Do contact Marc at MMSe here in the UK, he told me he does already export small orders to people like us - http://www.mms-e.co.uk/.

He does stock, both the DogL 4 wire X Y Analogue screens as well as the EA 5x3 'digital switch' matrix like the one I showed / purchased.
They are both about the same price. - make sure you purchase the matching little connector as well.

You might find the following thread and code interesting - http://www.mikroe.com/forum/viewtopic.php?t=11953&highlight=touchscreen
- see also Circuit Ed - glcd / touch screens for similar info.

hth

Richard

richardc
08-04-2008, 11:50 PM
Hi again,

Forgot in the previous post to attach this touch screen pfd that Marc from MMSe sent me on the general use of the 4 wire screens.

Thats why I opted for the simpler 'digital switch' type ! - think trying to code for the 4 wire type in assember a bit beyond my abilities ! - perhaps easier for you ?


Richard

spepe
04-15-2009, 01:35 PM
Hello everybody!

I just would liked to say: thank you for this thread! :)

I bought one of this type of LCD and had some problems making it work.
This thread helped me a lot! So thanks to everybody who wrote anything in this thread. :)

Bye!

Nick D
09-24-2009, 02:17 AM
Guys, I understand Clemens and Desilva wrote a font for the 128x64? How do I make a font for the eadogm128x64?
Also, could someone explain the flowchart needed to put text on one line? If I can understand the principal, I can finish the rest of it. Thanks so much for the help.
Nick D

Håvard
09-24-2009, 10:54 PM
the display is logically arranged as 128 columns * 8 pages. So the first write, starting at 0,0 of the display writes 8 rows of pixels, then increments the column address.
Also note, it never increments the page address without sending it a command to do so, even if the column address exceeds 127.

Since you can't read the displays memory with spi, and you'll have to shift pixels up and down 2 pages in 8bit writes, it's a bit annoying to use.


I've attached a very basic driver I wrote, just to make the display usable for my purposes, it's a xor graphics driver, in spin, manual refresh, gobbling up 256longs of memory just to save the display state.
The font is clemens monospace, and the spiwrite and init routine is desilvas (neat trick putting a $00 string in the dat section by the way)

Nick D
10-01-2009, 10:30 PM
I'm using the EADOGM-128x64 display. Does anyone know of a command for clearing the display? I know there's one for the 162 and 163. Right now, I'm just using the space character to clear the display, but I would think there's a better way. It takes a while to run through the Ram address by using the space character.
Thanks.

Håvard
10-01-2009, 11:11 PM
As far as I know, no clearscreen command.
You could try the adc reverse or reset command. If I remember correctly display RAM is unaffected, so it probably won't work

You probably end up iterating through all 8 pages, and write "0" 128 times for each page.
desilvas driver has an example of this, take a look at the clearpage statement, and cleardogm in the dat section.

rubicon
10-29-2009, 05:17 AM
I am in desperate need of help.... I am using the PIC 32 with the EA DOGM128-6 display with the SPI. Right now I am having trouble configuring it to the SPI. I don't know if its an SPI interface problem or an initialization problem. I will show you my code if someone here has some expereince with it. Thanks.

Mike Green
10-29-2009, 05:34 AM
@rubicon - We can't help you with the PIC code. You'll have to struggle through that yourself or see what help you can get from various PIC support forums. You're welcome to use what you find out here about the use of the DOGM128-6 with the Propeller, but this is a Propeller support forum after all.

Nick D
10-29-2009, 05:11 PM
I can try and help you, Rubicon. Evidently, we're on the wrong post. Can you give me your email?
Nick

rubicon
10-29-2009, 09:17 PM
I'm sorry about that, I've just been searching for information on the EA-DOGM128-6 and this I was lead to this forum. Though I understand this forum is for another use.... my email address is ruben.loganantharaj@smartfield.com ..... Thank you Nick D for the help, please email me so I can show you my code.

EADOGM162L-A
01-07-2010, 08:29 PM
i am trying to get the EADOGM162 display to start using SPI interface.after successfully interfacing the display to board and sending the correct data sequence to the display from the MOSI pin(checked in scope), the display is still dead.I am confused as to what might be the problem during initialization.

the data i sent from spi MOSI is using standard SPI function for the board SPI_I2S_SendData(SPI2, byte);

the byte is transmitted successfully and i scoped the MOSI output.but the lcd doesnt start.

in the LCD part of the code is it necessary to do any coding prior to the initialization like addressing registers and all?i just started sending commands through MOSI to SI pin of display.should i do some coding for shifting the registers in display for data? am i doing something wrong?
Reply With Quote

Nick D
01-07-2010, 09:20 PM
This is some of my initialization code:

#define EADOGM_ROWS 2
#define EADOGM_INIT_BIAS_SET 0X14
#define EADOGM_INIT_POWER_CONTROL 0X55
#define EADOGM_INIT_FOLLOWER_CONTROL 0X6D
#define EADOGM_INIT_CONTRAST_SET 0X78
#define EADOGM_INIT_FS1 0X39
#define EADOGM_INIT_FS2 0X38
#define EADOGM_INIT_CLEAR_DISPLAY 0X01
#define EADOG_INIT_ENTRY_MODE 0X06
#define EADOGM_CURSOR_ON 0b00001010
#define EADOGM_CURSOR_OFF 0
#define EADOGM_DISPLAY_ON 0b00001100
#define EADOGM_DISPLAY_OFF 0

void eaDogM_Initialize(void)
{
EADOGM_RST=1;
Time_1ms(10);
EADOGM_RST=0;
Time_100ms(1);
EADOGM_RST=1;
EADOGM_CS=1;
EADOGM_RS=0;
Time_100ms(2);
//these are all commands. RS=0
printf("%c",EADOGM_INIT_FS1);
printf("%c",EADOGM_INIT_BIAS_SET);
printf("%c",EADOGM_INIT_POWER_CONTROL);
printf("%c",EADOGM_INIT_FOLLOWER_CONTROL);
printf("%c",EADOGM_INIT_CONTRAST_SET);
printf("%c",EADOGM_INIT_FS2);
printf("%c",EADOGM_INIT_CLEAR_DISPLAY);
printf("%c",EADOG_INIT_ENTRY_MODE);
EADOGM_RS=1;

Make sure you trigger the CS line. Even though it's the only display, you still have to use it. Make sure RS is low for commands and high for data.
Nick

Nick D
01-07-2010, 10:11 PM
The Printf calls putch and SPI:
void putch(char c)
{
int i;
int count;
int dots;
if(EADOGM_RS)
{//if this is on, then the data is in the font table
i=(c-32)*8; //get ascii equivelent of char, subtract 32 for table address
for(count=0;count<8;count++)
{
dots=font1[i+count];
spi(dots);
}
current_col=current_col+8;
}
else
{ //must be a command
spi(c);
}
}
//-------------------------------------------
void spi(int d)
{
EADOGM_CS=0;
RXdata=SSPBUF;
if(!DEBUG)
{//skip this section if debugging
do //clear collision flag, send data, check collision and repeat if wcol=1
{
SSPBUF=d; //send data
}while(WCOL);
while(!BF);
}
RXdata=SSPBUF; //clears BF flag
//Time_1ms(2);
EADOGM_CS=1;
//Time_1ms(1);
}

You realize you need a font array to display, correct? I have the bitmap for a font if you need it. send me your email address and I'll send it to you.

phillip_oye
04-23-2012, 08:30 AM
Hi fellas,

I am sharing my code in c++ that is actually writing something on the display, but I would like to use a font editor to make it easier to control bytes written on the display and I don't have USB-TEST BOARD EA 9780-1USB. Have you got any general advice how to approach the working with fond editor on graphic displays in c++? I'm using AVR studio and working on atmega88.
cheers!

Rayman
04-23-2012, 10:51 AM
First, I'd ditch the AVR and atmega and get a Parallax Propeller (this is the Propeller forum after all).

Second, I'd look for an open source MFC Visual Studio font editor on the web.
I've looked, but haven't found one. Would be a nice find though...
I think most fonts these days are adobe or ttf scaleable fonts and not the simple fonts we need.
I do have some old Palm Pilot tools that might work though...