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:
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);
}