Such doch einfach mal nach SPI-Interface und sieh in der Bascom-Hilfe nach, wie man Seriell Daten asugibt.Zitat von Asuro91
Grüße
Thomas
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.Zitat von Asuro91
Grüße
Thomas
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).
Code: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 ).![]()
Code:$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.
Lg Micha
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.
Bitte BitteCode:$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![]()
Lg micha
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.
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
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
Code:$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
Lesezeichen