Keksdose_Stefan Posted May 21, 2012 Report Share Posted May 21, 2012 (edited) Hallo, ich suche nach einem Treiber für meine Midibox 128. Ich besitze 2 Displays mit einem ST7920 Controller. (DATA-VISION14032 Display) Sie haben eine Auflösung von 140 x 32 Pixel und bieten Text und Grafikmodus. Die Textausgabe läuft einwandfrei. Wechsel des Displays über MIOS32_LCD_DeviceSet(xXx); Aber will ich Grafik ausgeben mit dem Befehl BitmapPrint, kommt da leider nichts sinnvolles. Habe schon die verfügbaren Treiber durchgetestet, bei manchen kommt wildes Zeug auf dem Bildschirm an. Allerdings dann auch nur der erste. lcdbitmap1 = MIOS32_LCD_BitmapInit(bitmap_array, 140, 32, 140, 1); lcdwerte.lcd_type=MIOS32_LCD_TYPE_GLCD_SSD1306 ; <war der letzte Type den ich getestet habe lcdwerte.num_x=18; lcdwerte.num_y=2; lcdwerte.width=140; lcdwerte.height=32; lcdwerte.colour_depth=1; MIOS32_LCD_DeviceSet(0); MIOS32_LCD_ParametersSet (lcdwerte); MIOS32_LCD_DeviceSet(1); MIOS32_LCD_ParametersSet (lcdwerte); Ausgabe: MIOS32_LCD_DeviceSet(0); //LCD 1 MIOS32_LCD_GCursorSet(0, 0); MIOS32_LCD_CursorSet(0, 0); //for (i=0; i<560; ++i) MIOS32_LCD_BitmapPixelSet(lcdbitmap1,i,i>5,1); for (i=0; i<560; ++i) bitmap_array=85; //Fülle Bild mit 01010101 Muster. MIOS32_LCD_BitmapPrint(lcdbitmap1); MIOS32_LCD_DeviceSet(1); // LCD 2 MIOS32_LCD_GCursorSet(0, 0); MIOS32_LCD_CursorSet(0, 0); MIOS32_LCD_BitmapPrint(lcdbitmap1); Aber ich brauche jetzt einen LCD Treiber für ST7920. Mfg Stefan. Mein Projekt besteht aus: 1 x LPC1769, 4 x DOUT, 4 x DIN, 1 x AINSER 64, 2 x LCD. Edited May 21, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
TK. Posted May 21, 2012 Report Share Posted May 21, 2012 Hallo, schoenes Projekt, unbedingt veroeffentlichen sobald es fertig ist! :) Ich habe mal in das Datenblatt reingeschaut (http://www.crystalfontz.com/controllers/ST7920.pdf) Es gibt schonmal keinen GLCD Treiber, den Du hier wiederverwenden koenntest. Das Protokoll ist zum "CLCD" kompatibel (MIOS32_LCD_TYPE_CLCD), und es gibt einen "Extended Mode", mit dem die Grafikfunktionen freigeschaltet werden. Die entsprechenden Kommandos (die Du aus dem Datasheet entnimmst) lassen sich mit APP_LCD_Cmd() absetzen. Mit APP_LCD_Data() schreibst Du dann in das Display-RAM So koenntest Du erstmal herausfinden, ob die Freischaltung des Grafikmodus funktioniert. In das Display-RAM wuerde ich erstmal ein Muster reinschreiben, bspw.: APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80); [/code] so kannst Du bei der Gelegenheit auch gleich die Bildschirm-Orientierung (vertikal oder horizontal) ermitteln - und sobald das klar ist, kann ich Dir sagen, welche GLCD-Routinen sich wiederverwenden lassen (bzw. ich koennte Dir dann mal schnell einen neuen GLCD Typ einrichten) Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 21, 2012 Author Report Share Posted May 21, 2012 (edited) Also mit APP_LCD_CMD(54) geht Grafik an APP_LCD_CMD(128+Y); APP_LCD_CMD(128+X); APP_LCD_DATA(BilddatenByte);APP_LCD_DATA(BilddatenByte);APP_LCD_DATA(BilddatenByte);APP_LCD_DATA(BilddatenByte); er fängt dann wieder links an wenn er rechts raus geht aber in der gleichen Reihe also muß man dann immer neu setzen wenn man tiefer zeichnen will APP_LCD_Cmd(54); // Grafikmodus for (y=0; y<32; ++y) // Y=32 Pixel { APP_LCD_Cmd(128+y); APP_LCD_Cmd(128); for (i=0; i<18; ++i) //X=140 Pixel/8=17,5 { APP_LCD_Data(bitmap_array); b++; } } APP_LCD_Cmd(48);/Textmdous MIOS32_LCD_CursorSet(0, 0); MIOS32_LCD_PrintFormattedString("Stefan"); Dieser Code gibt die Grafik aus und schreibt meinen Text darüber. Edited May 22, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
TK. Posted May 21, 2012 Report Share Posted May 21, 2012 Machst Du bitte mal ein Foto vom Display wenn folgendes Muster ausgegeben wird: APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80);[/code] So kann ich mir besser vorstellen, wie das Display funktioniert. Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 22, 2012 Author Report Share Posted May 22, 2012 (edited) for (y=0; y<32; ++y) { APP_LCD_Cmd(128+y); APP_LCD_Cmd(128); APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80); } APP_LCD_Cmd(128); APP_LCD_Cmd(128); APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80); APP_LCD_Cmd(128); APP_LCD_Cmd(128); for (i=0; i<99; ++i) { APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80); } for (y=0; y<32; ++y) { APP_LCD_Cmd(128+y); APP_LCD_Cmd(128); for (i=0; i<3; ++i) { APP_LCD_Data(0x01); APP_LCD_Data(0x02); APP_LCD_Data(0x04); APP_LCD_Data(0x08); APP_LCD_Data(0x10); APP_LCD_Data(0x20); APP_LCD_Data(0x40); APP_LCD_Data(0x80); } } Am Anfang muß man nur APP_LCD_CMD(54) schreiben um Grafikdmodus anschhalten wenn man sendet APP_LCD_CMD(48) kann man wieder Texte schreiben. Bild und Text verschmelzen dann. Also Grafik und Text bleiben auf dem Bildschirm erhalten. Per Midibefehl kann ich jetzt Grafik und Text übertragen und ausgeben. Edited May 22, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
Hawkeye Posted May 22, 2012 Report Share Posted May 22, 2012 (edited) Coole Sache! Pollin.de bietet die Displays übrigens für 2.95€ an! :-) http://www.pollin.de...n_DG_14032.html Bezüglich der Ausgabe laut Datenblatt werden immer 2 Bytes = 16 Pixel an die aktuelle Adresse geschrieben, wenn Du mal int x, y; for (y = 0; y < 32; y++) { APP_LCD_Cmd(128+y); for (x = 0; x < 18; x++) { APP_LCD_Data(0xFF); APP_LCD_Data(0xFF); } } machst, solltest Du einen "vollen" Screen bekommen, richtig? :-) Ciao und viele Grüße! Peter Edited May 22, 2012 by Hawkeye Quote Link to comment Share on other sites More sharing options...
ilmenator Posted May 22, 2012 Report Share Posted May 22, 2012 Sieht irgendwie etwas "verschmiert" aus, was da auf dem Display zu sehen ist. Liegt das an der Kamera oder ist das Display selbst nicht ganz "scharf"? Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 22, 2012 Author Report Share Posted May 22, 2012 Ja die Grafiksausgabe geht so. Mit den 2 Bytes habe ich auch gewußt. Auf debmn Displays ist noch die Folie drauf und wenn dann liegts an meiner Kamera. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 22, 2012 Author Report Share Posted May 22, 2012 Die Displays habe ich übrigens bei Pollin gekauft. Wenn ich Zuhause bin probiere ich mal nur ein APP_LCD_CMD(128+y) zu schreiben also X weglassen. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 22, 2012 Author Report Share Posted May 22, 2012 (edited) Ich frage mich wie man die Grafikausgabe noch beschleunigen kann für ein Bild sind ca. 1000 Midibefehle nötig. Ich weiß jetzt nur noch nicht woran es liegt. Midi Protokoll zu langsam, bin ja mit USB verbunden, sollte doch 100 mal schneller sein. Grafik an sich wenn ich es direkt mache geht ja sehr schnell. Wenn es nicht anders geht versuche ich die Grafiken so gut wie möglich schon in das Projekt mit reinzuspeichern, so das ich sie dann aufrufen kann und ich möglichst wenig Miditransfer habe für die Displays. Dann ist mir noch wichtig zu wissen wie ich die Specialchars erzeuge und wie ich sie ausgeben kann, bzw. welchen Ascii Code sie haben. Edited May 23, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
TK. Posted May 23, 2012 Report Share Posted May 23, 2012 Du hast vergessen, die Vorgeschichte zu erwaehnen - warum und wie moechtest Du das Display ueber MIDI bedienen? So koennte ich Dir genauere Tips geben. Deshalb erstmal nur ein allgemeiner Hinweis: dein Rechner bremst die Transfers aus wenn zuviele MIDI Events aufeinmal generiert werden, deshalb ist es ratsam, die Display-Befehle zu streamen. Wenn Du bspw. den Display-Inhalt in wenige Sysex-Befehle verpackst, dafuer aber wesentlich mehr Bytes pro SysEx Kommando versendest, sollte der Update ziemlich flott gehen. Unter http://svnmios.midibox.org/listing.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Ftutorials%2F025_sysex_and_eeprom%2F findest Du ein Beispiel, wie eingehende SysEx-Streams verarbeitet werden koennen (siehe sysex.c). Das EEPROM-Geraffel kannst Du aus dem Code entfernen, dann wird er wesentlich uebersichtlicher. Grundsaetzlich wuerde ich empfehlen, nicht mehr wie 512 Bytes in einen Stream zu packen, da groessere Datenmengen vor allem unter Windows (und hier speziell WinXP) manchmal zu Problemen fuehren. Ausserdem musst Du dann noch beachten, dass in der Payload nur 7-bit Daten erlaubt sind. Deshalb ist es ratsam, die Bytes nibbleweise (untere/obere 4 bit) zu uebertragen. Auch das wird im Tutorial gezeigt (SYSEX_FORMAT == 1) Spezialzeichen werden mit APP_LCD_SpecialCharInit() initialisiert, und mit ASCII Code 0..7 ausgegeben (es sind also nur 8 vorhanden). Die werden nur von CLCDs unterstuetzt. Im Graphik-Modus muesstest Du die Zeichen direkt ausgeben, wie bspw. ueber die APP_LCD_BitmapPrint() Funktion Dieser Modus wuerde Dir dann auch weiterhelfen, groessere Bild-Fragmente im Core zu speichern, und ueber einen speziellen SysEx-Befehl zu platzieren. Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 23, 2012 Author Report Share Posted May 23, 2012 Ja im Moment übertrage ich immer 4 Bit Werte für Grafik Quote Link to comment Share on other sites More sharing options...
TK. Posted May 23, 2012 Report Share Posted May 23, 2012 Uebetraegst Du nun einzelne MIDI Events oder SysEx Streams? Mit welchem Programm werden sie gesendet, welches Betriebssystem, welche Updaterate wird angestrebt? Ohne diese Angaben ist es wirklich schwierig, Dir weiterzuhelfen... Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 24, 2012 Author Report Share Posted May 24, 2012 (edited) Noch mache ich es per Midi Events. Ich steuere mein Gerät über Delphi und auch Blitz Basic 3D. Mein Gerät ist eigentlich eine DJ Console. ich kann es mal grob erklären. Mit dem Gerät habe ich die Möglichkeit: - 4 Decks direkt anzusteuern - 2 Touchsensitive Jogwheels (capazitiv) + Beleuchtung (32 Leds die den ungefähren Drehstatus anzeigen) - Patterneditor mit 16x8 LEDs ( sind mit 24 Tasten ansteuerbar 8 Reihe 16 Spalte) - eingebaute (The Maschine) - 33 Encoder (inklusive Tastfunktion) - 16 Touchsensitive Tasten (capazitiv) ich nenne sie Hotpads - 2 Displays - Sampleplayer - fast alle Tasten sind mit Leds bestückt - 2 Helligkeitssensoren - zusätzlich noch Beleuchtung mit warmweißen Ledstripsegmenten am Gerät Alle Ausgänge sind mit Transistoren versehen. Ich habe mal eine alte Konzeptgrafik hinzugefügt. Warscheinlich werde ich 10 Fader statt 5 verwenden. Zum Thema Grafik, ich möchte einfach alle Möglichkeiten ausschöpfen, die es gibt. Die Sysex schaue ich mir noch an, scheint aber einfach zu sein. Mit Hilfe eines virtuellen Midi Treibers kann ich die Console auch mit mehreren Programmen gleichzeitig betreiben. Achso ich verwende Windwos 7 Ultimate 64 Bit. Edited May 24, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
TK. Posted May 24, 2012 Report Share Posted May 24, 2012 Danke fuer die Hintergrundinformationen! Die Hardware sieht ja schonmal ziemlich gut aus! :thumbsup: Ein Tip zum Thema "virtueller MIDI Treiber": der wird zu einer zusaetzlichen Latenz sorgen, die man umgehen koennte, indem USB fuer mehrere MIDI Ports konfiguriert wird. Einfach folgendes in Dein mios32_config.h File einbauen: #define MIOS32_USB_MIDI_NUM_PORTS 4 [/code] kompilieren, aufladen, und danach den USB Stecker raus, und wieder reinstecken. Anschliessend sollten unter Windows 4 getrennte Ein- und Ausgaenge sichtbar sein. Evtl. wirst Du auf den USB MIDI Bug von Win7 stossen, der sich jedoch mit dem Korg USB Treiber umgehen laesst: Fuer mich waere es interessant zu wissen, ob sich die Performance mit diesem Treiber verbessert (auch wenn Du noch nicht auf SysEx umgestiegen bist) Gruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
Keksdose_Stefan Posted May 24, 2012 Author Report Share Posted May 24, 2012 (edited) Werde die Tage neues berichten und auch eine Internetseite bereitstellen über mein Projekt. Das neuste sind die Touchsensoren die ich gebaut habe. Für die Jogwheels und berührungsempfindliche Tasten. Edited June 1, 2012 by Keksdose_Stefan Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.