Banbury / pxt-calliope-oled96

MakeCode blocks for Grove OLED Display 0.96".
MIT License
1 stars 6 forks source link

Deutsche Sonderzeichen #1

Open MKleinSB opened 5 years ago

MKleinSB commented 5 years ago

Hallo Banbury, Habe leider gerade meine OLEDs gekillt aber was bei dir noch gut wäre wären Deutsche Sonderzeichen wie sie Supereugen schon fertig in seinem Projekt hat: https://www.hackster.io/supereugen/graustufen-oled-ansteuern-auch-ohne-pxt-package-a6e95f Mit Writecustomcharacter zwar möglich aber unbequem ;-)

Banbury commented 5 years ago

Das Problem ist, dass der Zeichensatz jetzt schon ungefähr 700 Byte einnimmt. (Bei Supereugen ist es das vierfache, weil Arrays aus Zahlen immer number sind, auch wenn man einen anderen Typ verwendet.) Das ist viel Speicher, der da verbraten wird. Ich hatte sogar daran gedacht die meisten Sonderzeichen und alle Kleinbuchstaben rauszuschmeissen. Da man die Umlaute leicht ersetzen kann, würde ich lieber auf sie verzichten.

Ich lasse den Issue aber mal offen. Falls noch mehr Stimmen für die Umlaute kommen, ändere ich vielleicht meine Meinung. Oder Du machst einen Pull Request.

bee8bit commented 5 years ago

Gäbe es eine Möglichkeit zu konfigurieren, welche Zeichensätze geladen werden? Als Dateien zur Auswahl oder bei der Initialisierung des Moduls? Das böte zudem die Möglichkeit, verschiedene Schriftarten zu nutzen. initFont( 'RAW_FONT_DATA_HERE' );

Banbury commented 5 years ago

@bee8bit Der Zeichensatz müsste ja doch zur Laufzeit irgendwo gespeichert werden, um ihn zu laden. Am Ende läuft es immer daruf hinaus, dass diese Minicomputer sehr wenig RAM haben.

MKleinSB commented 4 years ago

Pimoroni klaut den Zeichensatz scheinbar aus dem DAL https://github.com/pimoroni/pxt-scrollbit Das wäre vielleicht eine Möglichkeit. Dann wäre Speicher für Sonderzeichen frei. Problemchen: lief das Paket nicht mal mit normalen SSD1306-Displays. Ich bekomme es mit Deiner Initialisierung nicht mehr hin.

Banbury commented 4 years ago

Wenn der Calliope genauso wie der MicroBit funktioniert, wäre das natürlich eine Superlösung. Wenn ich die Zeit dafür habe, schaue ich mir das mal an. Aber ich kann leider nichts versprechen.

Was Dein Display betrifft, weiß ich auch nicht, wo das Problem liegt. Ich denke, ich habe auch ein SSD1306 und da hat es funktioniert.

MKleinSB commented 4 years ago

Da ich den Scrollbit am Calliope betreibe müsste das gehen. Ich habe inzwischen eine andere (längere) Initialisierung gefunden mit der es läuft: // initdisplaycodes from https://gist.githubusercontent.com/pulsar256/564fda3b9e8fc6b06b89/raw/4bb559d4088e42f7b4859a8533be920434818617/ssd1306_init.c export function initDisplay(): void { cmd(0xAE); // Set display OFF
cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency cmd(0x80); // Display Clock Divide Ratio / OSC Frequency cmd(0xA8); // Set Multiplex Ratio cmd(0x3F); // Multiplex Ratio for 128x64 (64-1) cmd(0xD3); // Set Display Offset cmd(0x00); // Display Offset cmd(0x40); // Set Display Start Line cmd(0x8D); // Set Charge Pump cmd(0x14); // Charge Pump (0x10 External, 0x14 Internal DC/DC) cmd(0xA1); // Set Segment Re-Map cmd(0xC8); // Set Com Output Scan Direction cmd(0xDA); // Set COM Hardware Configuration cmd(0x12); // COM Hardware Configuration cmd(0x81); // Set Contrast cmd(0xCF); // Contrast cmd(0xD9); // Set Pre-Charge Period cmd(0xF1); // Set Pre-Charge Period (0x22 External, 0xF1 Internal) cmd(0xDB); // Set VCOMH Deselect Level cmd(0x40); // VCOMH Deselect Level cmd(0xA4); // Set all pixels OFF cmd(0xA6); // Set display not inverted cmd(0xAF); // Set display On clearDisplay(); }