ST7920 Serial u8glib

Hai un display 128×64 con controller ST7920 Serial u8glib ?

ST7920 Serial u8glib

Ecco l’articolo che stavi aspettando … come controlalre un display basato sull’ST7920 attraveso un protocollo seriale e con la libreria u8glib.

Perché ST7920 Serial u8glib

Motivi per utilizzare questa combinazione potrei scriverne tanti e di certo altrettanti potresti aggiungerli tu, i principali sono:

  • i display grafici 128×64 con controller ST7920 sono molto diffusi;
  • il controllo seriale del ST7920 ti permette di controllare un display con soli 3 cavi + alimentazione;
  • la libreria u8glib è largamente usata per il controllo dei display grafici e molto completa
  • più di un anno fa avevo dedicato a questo tipo di display un articolo controllandolo con una altra libreria, dedicata, e mediante bus parallelo a 8bit: il panorama è cambiato da allora

Ho quindi ho deciso di riprendere il discorso per mostrarti come usare un display grafico con controller ST7920 Serial u8glib.

Collegamenti Serial u8glib

Nell’articolo dedicato al display grafico 128×64 avrai letto che tale display puoi utilizzarlo sia in modalità parallela, ossia con un collegamento a 8 bit e 11 pin + alimentazione + restroilluminazione, sia in modalità seriale con soli 3 collegamenti .. ecco come collegare il display:

ST7920 Serial u8glib schema

come vedi il pin PSB è quello che definisce la modalità di connessione del display: se connesso a +5v l’ST7920 lavora in parallelo, se connesso al Gnd l’ST7920 lavora in parallelo.

I 3 collegamenti verso arduino o genuino, nella modalità seriale sono:

ST7920 Serial u8glib connection arduino

che ho collegato ai pin analogici A2,A3 ed A4 perché usati già dalla libreria u8glib come vedrai in seguito.

Lato display i collegamenti sono verso i pin E, R/W ed RS

ST7920 Serial u8glib connection display

oltre, chiaramente, all’alimentazione +5v, il Gnd, la restoilluminazione e PSB connesso al Gnd.

Lo sketch

Lo sketch del progetto ST7920 Serial u8glib scrive i numeri “123” con il carattere massimo possibile sul display 49punti:

ST7920 Serial u8glib 123

puoi cambiare la grandezza del carattere ed il font per scrivere più informazioni sul display.

Ecco lo sketch che ho realizzato partendo dal classico “Hello World”:

#include "U8glib.h"

U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: en=18,rw=16,di=17

void draw(void) {
  u8g.setFont(u8g_font_fub49n);
  u8g.drawStr( 0, 56, "123");
}

void setup(void) {
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(void) {
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  delay(50);
}

procedendo linea per linea dalla linea 01: includi la libreria u8glib.h;

linea 03: definisci i collegamenti tra display e arduino / genuino;

linea 05: crea la funzione draw() il cui scopo è disegnare, nel nostro caso scrivere, sul display quando richiamata;

linea 06: imposta il font come fub49n, puoi utilizzare uno dei font disponibili nella font wiki della libreria u8glib, il font scelto da me è il Free Universal Bold da 49 punti;

linea 07: imposta la posizione del testo alla colonna 0 e riga 56, per centrarlo rispetto al display dalla formula: (64 – ((64-49)/2)) = 56,5 arrotondata per difetto;

linee 10-23: in funzione del valore restituito dalla funzione u8g.getMode() imposti il colore del testo, nel mio caso è unmonocromatico;

linea 26: all’interno della funzione loop() pulisci il display con il metodo u8g.firstPage();

linee 27-29: crei un ciclo do..while ossia un ciclo in cui prima esegui le istruzioni specificate all’interno delle parentesi graffe e solo successivamente controlli la validità della condizione nel while, che in questo caso è il risultato dell metodo: u8g.nextPage();

linea 31: attendi 50 millisecondi prima di eseguire nuovamente la funzione di loop()

Il risultato finale che otterrai è simile alla schermata seguente:

ST7920 Serial u8glib 123

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/st7920-serial-u8glib.html

37 pings

Skip to comment form

  1. […] la modalità di funzionamento del display è di tipo Seriale, già descritta in un mio precedente articolo, ed i pin interessati […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.