Info lcd Ks0108

Allora...partendo dal presupposto che a programmi non sono bravo,mi sembra di aver trovato una possibile strada...
Partendo dallo scketch di esempio della libreria

#include <Wire.h>
#include <SPI.h>
#include <I2C_graphical_LCD_display.h>

I2C_graphical_LCD_display lcd;

// example bitmap
byte picture [] PROGMEM = {
 0x1C, 0x22, 0x49, 0xA1, 0xA1, 0x49, 0x22, 0x1C,  // face  
 0x10, 0x08, 0x04, 0x62, 0x62, 0x04, 0x08, 0x10,  // star destroyer
 0x4C, 0x52, 0x4C, 0x40, 0x5F, 0x44, 0x4A, 0x51,  // OK logo
};


void setup () 
{
  lcd.begin ();  

  // draw all available letters
  for (int i = ' '; i <= 0x7f; i++)
    lcd.letter (i);

  // black box  
  lcd.clear (6, 40, 30, 63, 0xFF);

  // draw text in inverse
  lcd.gotoxy (40, 40);
  lcd.string ("Nick Gammon.", true);

  // bit blit in a picture
  lcd.gotoxy (40, 56);
  lcd.blit (picture, sizeof picture);
  
  // draw a framed rectangle
  lcd.frameRect (40, 49, 60, 53, 1, 1);

  // draw a white diagonal line
  lcd.line (6, 40, 30, 63, 0);
 }  // end of setup

void loop () 
{}  // nothing to see here, move along

aggiungo nel setup()

  Wire.requestFrom(0x20,1);
  byte a=Wire.read();     //memorizzo il byte in a
  Wire.beginTransmission (0x20);  // indirizzo del port expander
  Wire.write (0x12);   // scrivo nel registro 0x12 degli I/O port "A"
  Wire.write (a|0x01);   // faccio un or di ciò che riceve con l'accensione della retro che corrisponde al bit0 del port "A"
  Wire.endTransmission ();

Così si accende la retroilluminazione ma non credo sia una soluzione......Qualche idea?

Diciamo che si avrebbe bisogno di un comando per poter gestire a piacimento un valore pwm, in modo da poter gestire non solo l'accensione e lo spegnimento ma anche l'intensita luminosa; purtroppo io non sono in grado, aspettiamo un programmatore :sweat_smile:

Diciamo che si avrebbe bisogno di un comando per poter gestire a piacimento un valore pwm, in modo da poter gestire non solo l'accensione e lo spegnimento ma anche l'intensita luminosa; purtroppo io non sono in grado, aspettiamo un programmatore

E siamo in due =(

Pensando al pwm,non possiamo gestirlo direttamente in I2C con il port expander.
Però si potrebbe,sfruttando tutti e due i pin rimasti liberi al 23017, usare un ATtiny x5 che controlla lo stato dei pin del 23017 ed in funzione di quelli fargli generare 4 valori diversi di pwm.

ma no, così ci incasiniamo inutilmente, allora va benissimo il solo riuscire ad accendere o spegnere il display.

@Tonid: In effetti quella è anche un po' come lavora la libreria... infatti sto lavorando su di essa per poter inserire due comandi _on e _off.
Oggi vedo di iniziare a fare qualche prova su un led, dopo che ho saldato i componenti smd sul display.

Non penso che l' expander possa gestire nei pin il pwm (sarebbe bello).
Oppure si prende un altro pin dall' arduino per gestire in pwm i led della retroilluminazione... (ho detto un cavolata ? ) :astonished:

Oppure si prende un altro pin dall' arduino per gestire in pwm i led della retroilluminazione...

No.non è una cavolata ma una possibile soluzione.....
Io pensavo ad un ATtinyx5(25,45,85) pechè si può usare per generare un pwm con la funzione analogWrite() facendogli semplicemente controllare i due pin rimasti liberi sul MCP23017 che sono i bit0 e bit1 del port A....Aggiungi si un chip da 1 euro ma mantieni solo il bus I2C senza usare altri pin del 328.
Però si può vedere dopo questa cosa, inizierei aggiungendo il controllo della retro via sw e poi in un secondo momento,visto che ho dei ATiny85 ,proverò a vedere se torna utile un pwm sulla retro.........
Si potrebbe anche creare un pwm in base al valore letto da un sensore di luminosità e fare in modo che la retro si comporti di conseguenza.
Comunque sono idee che si possono vedere dopo :slight_smile:

Appena hai novità fammi un colpo :wink:

superzaffo:
Non penso che l' expander possa gestire nei pin il pwm (sarebbe bello).

Ho letto il datasheet dell'expander e non c'è la gestione del PWM. :sweat_smile:

suggerisco di non incasinarci vita e PCB con questa cosa della retroilluminazione. Al più possiamo integrare due diverse possibilità, ma senza altro hardware:
1 - tramite I2C gestiamo ON/OFF, pilotando un NPN con luminosità stabilita in modo fisso dalla R di limitazione sul collettore.
2 - oltre a 5V-GND e i due pin I2C, prevediamo un pin (switchabile col solito jumper, in modo da decidere con cosa pilotare l'NPN) che vada direttamente ad Arduino, e quindi ad un pin pwm qualsiasi, pilotandolo poi via software.

Se cominciamo a mettere LDR e addirittura un micro scadiamo pesantemente nel tamarro, poi fate come volete, ma io mi dissocio da questa cosa..... nel tutorial la aggiungerò come "Appendice T(amarra)" descrivendola in modo molto colorito, quindi vedete di non provocarmi ]:smiley:

Ah AH ah... Michele... mi piace l' appendice "Tamarra" :smiley:
Allora.. io ho saldato i componenti al pcb, tutto bene a parte che il contrasto è basso rispetto a come pilotavo dall'esterno.
Io ho un trimmer da 500ohm...
Inoltre mi rimangono ancora quelle righe... ma io, a differenza di tonid, sono su breadboard.

Io ho un trimmer da 500ohm..

Mettigli un valore più alto,almeno 5K,meglio 10K......con 500ohm lasci scorrere troppa corrente e abbassi di conseguenza il livello di tensione negativa generata dal 7660.

@Michele
Sono solo idee,realizzabili ,ma idee :slight_smile:

Chiarisco la questione trimmer: come detto il circuito eroga circa 4V, praticamente siamo al limite della gestione del contrasto, infatti bisognerebbe studiare il ds del 76600 per vedere se si riesce ad alzare il livello di tensione, sicuramente ho notato che i due condensatori polarizzati più sono alti di valore e meglio fanno; succede che il trimmer da 10k lavora praticamente al limite, mentre quello da 1k si comporta meglio e l'assorbimento non è comunque significativo per l'IC. MA 500 ohm sono davvero pochi.

Riguardo le idee niente da dire, le idee sono idee, ma ci sono idee ed idee, ed ognuno ha le proprie idee :grin:

Allora, cambiato il trimmer con uno da 1k e i condensatori con valori 4.7mF.
Edit: Scusate.. non da 4.7 ma da 47.. errore di battitura.

Effetivamente va molto meglio.. ma continuo avere quelle righe strane che tonid non ha...
Appena ci passa il file eagle, provo anche io con il pcb.

ma hai usato due condensatori da 47µF?? mi sembrano un tantino esagerati, considerando che sui display il massimo valore visto finora è 10µF, comunque se non ti danno noie....
Quanto misuri sul pin V- del display ora?
Non sono per niente convinto che queste strisce dipendano dalla breadboard, semmai da un errore, a quest'ora dopo tanto tempo e tane prove, a forza di muovere tutto qualcosa sarebbe cambiato ogni tanto.

Ho guardato attentamente il mio display e c'è un piccolo errore sul numero 5,ho controllato nei font ma li è giusto....
Ho provato poi a stampare quà e là delle stringhe di testo e l'errore non si presenta.
@sz
prova anche tu a fare una cosa del genere e vedi se le righe ti spariscono.

spiegati meglio tonid, che significa un piccolo errore sul numero 5?

spiegati meglio tonid, che significa un piccolo errore sul numero 5?

Quando carichi l'esempio della libreria di nick compaiono a display caratteri,numeri ed immagini.....
Dove ci dovrebbe essere il numero 5 mi ritrovo un numero che a prima vista sembra un cinque ma guardando bene i pixel non lo rappresentano come si deve.
Se stampo invece a display vuoto il numero cinque in parti diverse dello schermo ,compresa la zona dove prima mi dava quell'errore,vedo il numero ben fatto.....Quindi non credo che il problema di sz sia legato a collegamenti e breadboard ma non saprei come risolverlo.

Adesso siete in due desaparesidos... ]:smiley:

Adesso siete in due desaparesidos...

No,no,ci sono ma sono moooolto impegnato e devo per forza finire dei lavori :astonished:......quindi non posso andare avanti finchè non son libero :slight_smile:

sz: hai ragione ed io non voglio nascondermi dietro tonid, anch'io sono incasinatissimo, stai seguendo il Topic del 644/1284, lo vedi da te che sono stato qualche ora in lab nel fine settimana scorso, ora non so se riuscirò ad andarci da venerdì in poi, purtroppo non riesco a programmare nulla in questo periodo e tra poco sarà ancora peggio. Detto questo io la mia prova l'ho fatta subito (montaggio componenti e test alimentazione negativa) portando anche risultati efficaci ed utili; resta ora la questione I2C, onestamente sto apettando il disegno del PCB di tonid, visto che si è impegnato a farlo, inutile montare tutto su bread quando da un momento all'altro è possibile preparare uno stampato; se poi lui dovesse risultare incasinato al punto da non poter portare a termine la cosa, allora l'impegno me l'assumo io, e questa diventerà la 1001 cosa da fare.
Potremmo anche cambiare un po' le cose e spartirci il lavoro con tonid: se lui si prende la briga di disegnare almeno lo schema elettrico, avendolo già realizzato su bread, io potrei disegnare il PCB, visto che questa seconda parte è quella più lunga, ma io ormai ne ho fatti tanti e posso muovermi in tempi decenti.
Se tonid è d'accordo aspetto lo schema elettrico, diversamente aspettiamo che finisca tutto lui, per me è indifferente, continuo a garantire il mio apporto.