Categorías
Sen categorizar

Driver ST7036I – Arduino

O driver ST7036I é un driver para pantallas LCD COG moi similar ao ST7032 e a outros da mesma familia da marca Sitronix. Neste caso sendo os dous de 2 liñas, só se diferencian no número de caracteres por liña; os ST7038 e ST7039 serían de 16 caracters x 3 liñas.

As probas foron realizadas coas seguintes pantallas, ambas de 20 x 2 caracteres e coa única diferencia da cor de retroiluminación:

MIDAS MCCOG22005A6W-SPTLYI
MIDAS MCCOG22005A6W-BNMLWI

A diferencia é importante a nivel de luz porque a azul é unha pantalla transmisiva e a verde-amarela transflectiva. Isto fai que a pantalla azul sexa prácticamente imposible de ver o que pon sen a retroiluminación activa, aínda que á vista queda moito mellor.

Os modelos anteriores comunícanse por I2C e pódense alimentar dende 3 a 5VDC, a forma de facelo é a seguinte:

Conexión a 3.0VDC
Conexión a 5.0VDC

Para utilizar esta pantalla en Arduino, necesitase a librería Wire.h para comunicarnos polo porto I2C

A pantalla necesita inicializarse na funcion void setup(){} e cada vez que se encenda, coa configuración que se desexe. Neste caso está para alimentación a 3VDC como detalle importante, o resto pódese consultar no manual para personalizar o funcionamento:

Wire.beginTransmission (ScreenAddressI2C);
Wire.write ( 0x00 ); // Send command to the display
delay(10);
Wire.write ( 0x38 );
delay(10);
Wire.write ( 0x39 );
Wire.write ( 0x14 ); // Set BIAS – 1/5
Wire.write ( 0x70 ); // Set contrast low byte
Wire.write ( 0x54 ); // ICON disp off, Booster on, Contrast high byte
Wire.write ( 0x6F ); // Follower circuit (internal), amp ratio (6)
Wire.write ( 0x0C ); // Display on
Wire.write ( 0x01 ); // Clear display
Wire.write ( 0x06 ); // Entry mode set – increment
Wire.endTransmission ();

Para unha tensión de alimentación de 5.0VDC:

Wire.beginTransmission (ScreenAddressI2C);
Wire.write ( 0x00 ); // Send command to the display
delay(10);
Wire.write ( 0x38 );
delay(10);
Wire.write ( 0x39 );
Wire.write ( 0x14 ); // Set BIAS – 1/5
Wire.write ( 0x79 ); // Set contrast low byte
Wire.write ( 0x50 ); // ICON disp off, Booster off, Contrast high byte
Wire.write ( 0x6C ); // Follower circuit (internal), amp ratio (_)
Wire.write ( 0x0C ); // Display on
Wire.write ( 0x01 ); // Clear display
Wire.write ( 0x06 ); // Entry mode set – increment
Wire.endTransmission ();

Por defecto, nestas pantallas a dirección I2C é a 0x3C

Para enviar os textos desexados uso a seguinte función á que chamo cada vez que quero imprimir algo. Indico os caracteres que desexo imprimir, a fila e a columna na que empezar:

void printscreen (String texto, int row, int col){
int j;
int pos = 0;

if (row==1){
pos = 0x40;
}
pos = pos + col + 128;

Wire.beginTransmission(ScreenAddressI2C);
Wire.write(0b00000000); //Prepara para comando
Wire.write(pos); //Coloca cursor en posicion “pos”
Wire.endTransmission();

Wire.beginTransmission(ScreenAddressI2C);
Wire.write(0b01000000); //Prepara para enviar caracter
for (j=0; j<texto.length(); j++){
Wire.write(texto[j]); //Envía caracter
}
Wire.endTransmission();
delay(1);
}