PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Grafik Display( EA DOGM132-5 )



Asuro91
25.12.2009, 15:02
Hallo alles zusammen

ich hab mir ein LCD Grafik Display (132*32) gekauft
http://lcds.de/deu/pdf/grafik/dogm132-5.pdf (Datenblatt)
und muss für ein schulprojekt diese display programieren
ich benutze das 1.4 RN-Conrollerbord, das display hat vier daten leitungen
( SI,SCL, A0, CS1B und (Rst /Reset)) ich weiß wie man bei einem Text display in bascom die pins deklariert nur wie mach ich das jetzt bei diesm Grafik display falls jemand damit Erfahrung hat .. ich würde mich über hilfe freuen
lg micha

TomEdl
25.12.2009, 16:25
Hallo!

Du kannst mit diesem Display nicht die herkömmlichen LCD-Funktionen von BASCOM nutzen, da dieses Display per SPI angesprochen werden möchte. Im Datenblatt findest du eine Befehlstabelle.

Am idealsten wäre es, eine eigene Library für dieses Display zu schreiben.

Grüße
Thomas
:)

Asuro91
25.12.2009, 17:11
Hey mhm
ich bin noch recht unerfahren ( ich weiß such mir da nicht gerade das leichteste aus )
falls sich jemand erbarmen will mir des mit "SPI" und der "library" genauer zu erklären wäre ich dieser person sehr dankbar *g*
lg micha

TomEdl
25.12.2009, 17:36
Hi!

SPI bedeutet, das die Daten zum Display seriell versendet werden. Seriell bedeutet, dass dabei ein "Bitstrom" mit einem bestimmtem Takt in das LCD hinein "geschoben" werden.

Eine Lib ist gewissermaßen eine Folge von Befehlen, die in ein Paket gepackt werden, um sie dann vom Programm her direkt ansprechen zu können. Alternativ kommt man natürlich auch ohne Lib aus, allerdings wird dann das Programm unübersichtlicher zu programmieren.

Grüße
Thomas

Asuro91
25.12.2009, 18:09
hey
(sorry wenn ich mit so komischen anfänerfragen komm ich versteh nur gerade nicht sehr viel von dem was su da schreibst ](*,) :( )
wenn ich des richtig verstanden hab kann ich des display mit den vier datenleitungenund dem restet einfach an einen port anschliesen und muss es dann über spi ansteuern ???

@TomEdl fals es dir möglich is könntets du nur so ein grund auf bau von so einm bascom program schreiben das ich einen anhaltspunkt hätte??
lg micha

TomEdl
25.12.2009, 18:20
Hi!

Naja, SPI-Instruktionen findest du in der Bascom-Hilfe. Warum benutzt du kein herkömmliches LCD mit 44780-Controller? Dann wäre die Ansteuerung auch wesentlich einfacher...

Grüße
Thomas

Asuro91
25.12.2009, 18:38
ja ich weiß is nur ss für des projekt was ich verwirklichen will wäre ein grafikdisplay besser , des problem is das ich keine ahnung hab wie ich ansteuer usw...

TomEdl
25.12.2009, 18:39
ja ich weiß is nur ss für des projekt was ich verwirklichen will wäre ein grafikdisplay besser , des problem is das ich keine ahnung hab wie ich ansteuer usw...
Na dann kauf dir doch ein 44780 kompatibles Grafik-Display?

Asuro91
25.12.2009, 18:57
Na dann kauf dir doch ein 44780 kompatibles Grafik-Display?

und des könnte ich dan wie ein text display ansteuern oder was is da der unterschied zu dem grafik display was ich gemeint hab??

TomEdl
25.12.2009, 19:13
Na dann kauf dir doch ein 44780 kompatibles Grafik-Display?

und des könnte ich dan wie ein text display ansteuern oder was is da der unterschied zu dem grafik display was ich gemeint hab??
Ich sag mal, es wäre ähnlich anzusteuern wie ein Text-LCD, da Bascom da eigene Befehle mitbringt. Neben den bekannten Text-Funktionen gibt es da auch noch einige Grafik-Funktionen, die allerdings ziemlich viel Rechenzeit beanspruchen.

Zum Beispiel:



Boxfill(0 , 0) - (200 , 200) , 255

Das erzeugt ein gefülltes Rechteck mit weißer Farbe.

Grüße
Thomas

Asuro91
26.12.2009, 10:15
hey
des bringt mich alles nicht so recht weiter wie @TomEdl wie hast du das gelernt ich hab gestern ziemlich lange nach informationen gesucht wie ich mein grafik display anschließ und wie ich des mit der programmierung mach aber da gibts einfch keine anleitungen kann mir da niemand helfen wie ich das oben genannte display anschließ und ansteuer

TomEdl
26.12.2009, 16:27
hey
des bringt mich alles nicht so recht weiter wie @TomEdl wie hast du das gelernt ich hab gestern ziemlich lange nach informationen gesucht wie ich mein grafik display anschließ und wie ich des mit der programmierung mach aber da gibts einfch keine anleitungen kann mir da niemand helfen wie ich das oben genannte display anschließ und ansteuer
Such doch einfach mal nach SPI-Interface und sieh in der Bascom-Hilfe nach, wie man Seriell Daten asugibt.

Grüße
Thomas

Asuro91
09.05.2011, 12:10
Hallo alle zusammen,
Ich hab letzt in meiner Bastel Kiste das Display gefunden und nachdem ich jetzt schon mit Textbasierenden Displays gearbeitet hab möchte ich es jetzt noch mal probieren mit diesem Grafikdisplay
…..
Ich versuche wie oben schon in der Überschrift zu lesen ist mit einen mega32 das Grafikdisplay EA DOGM132-5 anzusteuern. Das ganze funktioniert über SPI.
Mein erstes Frage ist, da ich das Controllerbord 1.4 von Robotik-Hardware für den Testaufbau verwenden will und meinen Mikrokontroller mit USB ISP sind die Pins für den Hardware SPI schon belegt durch die ISP ;-)….ich werde dann wohl die Software SPI nehmen. Hat es irgendwelche Nachteil wenn ich die Software SPI nehm? Der Vorteil ist ja das ich die Pins selbst bestimmen kann.
Zum zweiten Problem der Initialisierung. Ich will in Bascom programmieren. Ich hab schon einige Threads gelesen und die Bascom Hilfe durchgeschaut doch mir ist noch nicht alles so klar.
Ich benutze bei dem Display die Low Power Schaltung.


http://www.lcd-module.de/deu/pdf/grafik/dogm132-5.pdf


In dem Fall sieht die Initialisierung folgendermaßen aus (siehe auch Seite 6).


A0 | Hex
-------------------
0 | $40
0 | $A1
0 | $C0
0 | $A6
0 | $A2
0 | $2F
0 | $F8
0 | $00
0 | $23
0 | $81
0 | $1F
0 | $AC
0 | $00
0 | $AF



Nun weiß ich nicht so recht wie ich die einzelnen Bytes zum Display schieb.
Mach ich das mit dem Befehl spimove oder spiout oder ist das egal

Mein Initialisierungsprogramm würde dann so aussehen (ich weiß das es falsch ist ich will es nur posten das ihr mir alle sagen könnt was ich falsch gemacht hab ). :( :(




$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600



'Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 16 , Noss = 0
Config Spi = Soft , Din = Pinc.7 , Dout = Pinc.6 , Ss = Non , Clock = Pinc.5

Config Portc.4 = Output
Lcdreset Alias Portc.4

Config Portc.3 = Output
A0 Alias Portc.3



Dim Y As Byte


Dim 1command As Byte
Dim 2command As Byte
Dim 3command As Byte
Dim 4command As Byte
Dim 5command As Byte
Dim 6command As Byte
Dim 7command As Byte
Dim 8command As Byte
Dim 9command As Byte
Dim 10command As Byte
Dim 11command As Byte
Dim 12command As Byte
Dim 13command As Byte
Dim 14command As Byte


Dim Lcdon As Byte
Dim Lcdoff As Byte

1command = &H40
2command = &HA1
3command = &HCO
4command = &HA6
5command = &HA2
6command = &H2F
7command = &HF8
8command = &H00
9command = &H23
10command = &H81
11command = &H1F
12command = &HAC
13command = &H00
14command = &HAF

Lcdon = &HAF
Lcdoff = &HAE


Lcdreset = 1
Waitms 40
Lcdreset = 0
Waitms 40
Lcdreset = 1


A0 = 0


Spiinit

Y = Spimove(1command)
Y = Spimove(2command)
Y = Spimove(3command)
Y = Spimove(4command)
Y = Spimove(5command)
Y = Spimove(6command)
Y = Spimove(7command)
Y = Spimove(8command)
Y = Spimove(9command)
Y = Spimove(10command)
Y = Spimove(11command)
Y = Spimove(12command)
Y = Spimove(13command)
Y = Spimove(14command)


A0 = 1
Y = Spimove(lcdon)

Wait 3

Y = Spimove(lcdoff)




End



Ich hoffe ihr helft mir auch wenn ich mich en bissel dumm anstelle.:confused:


Lg Micha

Asuro91
10.05.2011, 00:18
Hey Leute,
hat gar niemand ne Ahnung oder will mir niemand helfen. Ich hab jetzt selbst noch mal en bissel rum probiert und den Code verändert leider weiß ich nicht wirklich wie das mit dem Array funktioniert (und hab auch nirgends was gefunden wo es gescheit erklärt war) ich wäre euch echt dankbar wenn ihr mir sagen könntet wie ich die Bytes mit der SPI ausgeb damit ich mein Lcd-Display initialisiert wird.






$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Dim Commandbefehl(14) As Byte



Commandbefehl(1) = &H40
Commandbefehl(2) = &HA1
Commandbefehl(3) = &HCO
Commandbefehl(4) = &HA6
Commandbefehl(5) = &HA2
Commandbefehl(6) = &H2F
Commandbefehl(7) = &HF8
Commandbefehl(8) = &H00
Commandbefehl(9) = &H23
Commandbefehl(10) = &H81
Commandbefehl(11) = &H1F
Commandbefehl(12) = &HAC
Commandbefehl(13) = &H00
Commandbefehl(14) = &HAF



Config Spi = Soft , Din = Pinc.7 , Dout = Pinc.6 , Ss = Non , Clock = Pinc.5



Spiinit

Spiout Commandbefeh(1) , 14



End



Bitte Bitte :( :confused:

Lg micha

wkrug
10.05.2011, 06:43
Leider progge ich selber nicht in Bascom, kann Dir aber zu deinen Fragen eventuell ein paar Antworten geben.
Üblicherweise läuft eine SPI so ab.
Zuerst wird das CE ( SS ) Signal des entsprechenden Zielchips vom Controller aus aktiviert.
Dann wird das erste zu übertragende Bit auf MOSI ( D-OUT vom Controller ) gelegt.
Nun wird ein CLK Impuls erzeugt.
Dann kommt das nächste Bit, ein CLK usw. Das ganze Spielchen geht so lange, bis alle gewünschten Bits für ein komplettes Komando übertragen sind.
Dann wird das CE wieder deaktiviert.
Ob die Pegel nun High oder Low aktiv sein müssen, sollte im Datenblatt deines Displays stehen.

Ich hab nun nicht das Datenblatt deines Displays gewälzt, aber üblicherweise muß so ein Display Initialisiert werden. Ausserdem wird es Steuersequenzen geben, die z.B. die Adresse des aktuellen Pixels aus zu wählen.
Alle diese Informationen müssen über SPI übertragen werden.
Die SPI ist in Bascom anscheinend schon implementiert, das Problem also gelöst.

Üblicherweise hat so ein Display auch keinen eingebauten Zeichensatz.
Das bedeutet, Du musst zumindest einen Zeichensatz programmieren.
In diesem Zeichensatz werden dann die aktiven Pixel für jedes gewünschte Zeichen abgespeichert.
Sinnvollerweise orientiert man sich dabei am ASCII Zeichensatz.
Bei manchen deutschen Umlauten ist das manchmal etwas schwierig ( verschiedene Codepages ).
Im Hauptprogramm wird dann die Startadresse ( Also das gewünschte Zeichen ) dieses Tabelenabschnittes übergeben und eine ( Library- ) Routine überträgt dann alle nötigen Bytes an das Display.

Auch die Funktionen für Kreise, Linien und Rechtecke braucht man noch.

Alle diese Funktionen schreibt man dann in eine sog. Library, die man dann bequem von der Hauptroutine aus ansteuern kann.
z.B. write_char('A',0,16) würde den Buchstaben A, ganz links in die 16 Zeile schreiben ( C-Syntax! ).
Ich würde an Deiner Stelle versuchen eine fertige Library für das von dir verwendete Display für Bascom zu kriegen ( Andere Projekte, Bascom Forum ?!? ).
Eventuell ist da ja auch was passendes in der neuesten BASCOM Version drin?
Wenn Du so eine Library selber schreiben willst, wird etwa 50% der Zeit für das Projekt dafür drauf gehen.
Für die Konvertierung von Zeichensätzen aus dem PC gibt es kleine Hilfsprogramme, die aber üblicherweise Code für AVR GCC generieren.
Die Zeichentabellen selber sollten aber auch für Bascom brauchbar sein.
Die Syntax und die Präprozessor Direktiven müssten halt angepasst werden.

Ich denk nicht, das sich jemand hier die Zeit nehmen wird eine komplette Library zu proggen, wenn er diese nicht selber braucht.

Noch was... Gib mal die Suchbegriffe EA DOGM132 bascom library bei Google ein. Da kommen ein paar Vierversprechende Ergebnisse raus.

Asuro91
10.05.2011, 20:18
hey
danke für die Antwort....
ja wie ich die Spi in Bascom konfiguriere weiß ich und das ich um Texte auszugeben des am besten mit einer library schreibt auch ( die umsetztung wird da auch noch mal anderst aussehen ;-)).
...Ich hab auch schon danach gesucht da gibst en paar Sachen mein Problem ist noch bei der Initialisierung und ich hoffe mir kann da einer helfen der in Bascom programmiert. Ich hab die Befehle für die Initialisierung, nur wie oben genannt weiß ich nicht wie ich die 14 Befehle ( ein Byte nach einander ) an das Display sende also wie das im Befehl aussieht. Ich hab ja im obigen Beispielprogramm die Initialisierung drin also die einzelnen Bytes. Mein Problem ist, dass ich nicht richtig weiß wie ich des mit spiout ausgeb. Könnte mir vieleicht einer nur en Tipp geben in Bascom??
Danke
lg Micha

Asuro91
11.05.2011, 13:48
Hey alle zusammen wollt nur mal Bescheid geben. Ich denk ich habs jetzt hin bekommen, zumindest tauchten schon mal auf dem Display viele Pixel auf ;-) . Ich hab mal testweise einfach alle Pixel gesetzt und wieder ausgemacht. Den Befehl dazu hab ich vom Datenblatt. Alle Pixel auszustellen geht auch einwandfrei nur bei alle Pixel setzten werden nicht alle angezeigt sondern nur immer mal wieder welche es sieht so aus wie bei einem fernsehe wenn er kein empfang hat. Hat jemand von euch ne Ahnung woran des liegen könnte? Weil der befehl is aus der Befehlstabelle vom Datenblatt oder is des en Anzeichen dafür das des Display nicht richtig initialisiert wurde.
MFG Micha





$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600



'Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 16 , Noss = 0
Config Spi = Soft , Din = Pinc.7 , Dout = Pinc.6 , Ss = Pinc.5 , Clock = Pinc.4

Config Portc.3 = Output
Lcdreset Alias Portc.3

Config Portc.2 = Output
A0 Alias Portc.2



Dim Command1 As Byte
Dim Command2 As Byte
Dim Command3 As Byte
Dim Command4 As Byte
Dim Command5 As Byte
Dim Command6 As Byte
Dim Command7 As Byte
Dim Command8 As Byte
Dim Command9 As Byte
Dim Command10 As Byte
Dim Command11 As Byte
Dim Command12 As Byte
Dim Command13 As Byte
Dim Command14 As Byte




Dim Lcdon As Byte
Dim Lcdoff As Byte
Dim Setall As Byte
Dim Alloff As Byte


Command1 = &H40
Command2 = &HA1
Command3 = &HCO
Command4 = &HA6
Command5 = &HA2
Command6 = &H2F
Command7 = &HF8
Command8 = &H00
Command9 = &H23
Command10 = &H81
Command11 = &H1F
Command12 = &HAC
Command13 = &H00
Command14 = &HAF

Lcdon = &HAF
Lcdoff = &HAE

Setall = &HA4
Alloff = &HA5


Spiinit

Lcdreset = 1
Waitms 100
Lcdreset = 0
Waitms 100
Lcdreset = 1

A0 = 0


Spiinit

Spiout Command1 , 1
Spiout Command2 , 1
Spiout Command3 , 1
Spiout Command4 , 1
Spiout Command5 , 1
Spiout Command6 , 1
Spiout Command7 , 1
Spiout Command8 , 1
Spiout Command9 , 1
Spiout Command10 , 1
Spiout Command11 , 1
Spiout Command12 , 1
Spiout Command13 , 1
Spiout Command14 , 1


Do


Wait 1

Spiout Alloff , 1


Wait 2

Spiout Setall , 1

Loop



End