Zobrazení znaku na oled displeji s SSD1306 čipem

Najjednoduchšie sa to spraví tak, že si v MCU vyhradiš 1kB na tzv. maliarske platno. Tam si nakresliš čo len chceš. Ako písal Balú, aj písmenká. Sú to v podstate iba obrázky s nejakou veľkosťou v smere X a v smere Y.
Určite si rýchlo spravíš rutiny na vykreslenie kruhu, obdĺžnika, písmenok a iných ikoniek na toto plátno.
A tak ako ich pudeš postupne vykreslovať na to 1kB plátno (128*64/8 = 1kB) môžeš si tam ešte doplniť rutinky, že keď vkladáš nejaký útvar, či sa má s pôvodným podkladom OR-ovať, XOR-ovať a tak podobne.
No a keď to všetko máš, spustíš rutinu, ktorá ten celý 1kB pošle do displeja.

Obrovská výhoda tohto prístupu je, že pri použití iného displeja použiješ iba inú rutinu na zápis do iného LDC/OLED displeja. Alebo kľudne aj rutinu, ktorá bude dáta z maliarskeho plátna pravidelne posielať na VGA výstup napríklad pre zobrazenie 256x256pixlov v 16color zobrazení. Jasné, že plátno musí byť “trochu” väčšie, ale systémom použitým v ZX Spectre zas nie až o moc (256x256/8 na pixle a 32x32 na farebnu paletu = 9216B).

S ATmegou na 18MHz som musel dokonca prekreslovanie do LCD 128x64 brzdiť, lebo už dochádzalo k interferenciám medzi obnovovacou frekvenciou displeja a posielaním údajov doň. Tak som zistil, že rýchlejšie ako 3x za sekundu nemá ani zmysel meniť na bežnom LCD displeji (EADOG128x64).
komunikoval som cez SPI rozhranie, ktoré som simuloval softwarovo. Popri tom samozrejme bežalo nejaké riadenie, nejaká komunikácia cez RS linku, zber údajov, atď atď

Pre zobrazovanie na VGA výstupe sa na nejakú tú prácu dal využiť iba čas cez vertikálny zatemňovací impulz. No na konci každého behu v čase horizontálnej synchronizácie som stihol prijať/odvysielať bajt cez nejaké hw rozhranie. Použil som ATmegu 1284 na (20MHz) kvôli väčšej pamäti a jeden z UARTOV v móde SPI na generovanie VGA signálu na prepínač (74HCT157) farba pozadia/farba popredia.

Uvádzam to len ako námet na spôsob práce s softvérom ako niečím modulárnym. Aj pri obládaní LCD i VGA mám použitý rovnaký sw na vykresľovanie pixlov na vnútorné plátno.