Info lcd Ks0108

Prova questo.. comunque è la demo della libreria i2c_graphical_lcd_display.
Si ho provato a cambiare lo sketch... ma penso che il problema sia hardware.

/ Demo of KS0108B graphics LCD screen connected to MCP23017 16-port I/O expander

// Author: Nick Gammon
// Date: 14 February 2011


#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

ok grazie

Riguardo l'idea "PCB", pensavo proprio a qualcosa del genere solo che potremmo integrare anche l'alimentazione commutabile con un jumper e quant'altro si diceva...

Esatto,cercherò però di farla funzionante :grin:
Scherzi a parte farei diverso il pin out,ovvero lo metterei sempre con strip maschio ma messo in modo da poterlo inserire nella breadboard il che rende più semplice i collegamenti per fare delle prove e gli metterei le due R di pull-up sulle linee SDA,SCL.
Quindi ricapitolando:
-7805 per alimentazione esterna,quì sinceramente non metterei jumper ma due/tre diodi e risolviamo la cosa;
-trimmer per il contrasto;
-Mcp23017;
-R di pull-up;
Poi non ricordo (devo guardare)se la libreria gestisce anche la retroilluminazione perchè si potrebbe anche aggiungere un transistor pnp/npn per controllarla.
Nel pomeriggio avrò un po di tempo ed inizierei con il disegno,se ho dimenticato qualcosa ditemelo.

tonid:
Esatto,cercherò però di farla funzionante :grin:
Scherzi a parte farei diverso il pin out,ovvero lo metterei sempre con strip maschio ma messo in modo da poterlo inserire nella breadboard il che rende più semplice i collegamenti per fare delle prove e gli metterei le due R di pull-up sulle linee SDA,SCL.

certamente, quello era solo un esempio, l'importante è prevedere lo strip femmina in modo da rendere staccabile il modulo I2C dal display.

Quindi ricapitolando:
-7805 per alimentazione esterna,quì sinceramente non metterei jumper ma due/tre diodi e risolviamo la cosa;

non puoi, a mio avviso, sul 7805 puoi alzare la tensione per poi compensare la perdita del diodo, ma sui 5V provenienti da Arduino come fai? un jumper fa sì che tu possa devidere se alimentare il display tramite i 5V che porti da Arduino o quelli del 7805 interno, puoi mettere anche un micro-deviatore; io preferirei il jumper a saldare, così nel caso di uno stand-alone, potresti mettere in corto tutti e tre i pad e alimentare anche il micro con l'alimentazione del display :wink:

-trimmer per il contrasto;
-Mcp23017;
-R di pull-up;

ok su tutto

Poi non ricordo (devo guardare)se la libreria gestisce anche la retroilluminazione perchè si potrebbe anche aggiungere un transistor pnp/npn per controllarla.

l'importante è prevedere la limitazione di corrente con una 6,2ohm (corrente standard prevista); il transistor lo metterei e mi porterei la base (tramite R opportuna) su un pin per il controllo PWM, a prescindere dalla libreria, si può gestire no? anche in questo caso prevederei un jumper a saldare che unisca i pad del C e dell'E del TR in modo da mandare direttamente i 5V alla R escludendo di fatto il TR e la R di base che a questo punto si potrebbero non montare, potendo così scegliere facilmente tra le due modalità.

Nel pomeriggio avrò un po di tempo ed inizierei con il disegno,se ho dimenticato qualcosa ditemelo.

mi pare ci sia tutto, buon lavoro XD

@Michele: Ho per le mani dei BC557, se puoi mandami una bozza di schema che lo provo.
grazie

io però non ho tra le mani il display :~ e il mio dubbio è che la foto che hai postato tu tempo fa non c'entra nulla con la disposizione che ho io. Ciò che ho notato e di cui sono ragionevolmente certo che che il pin 2 del mio BC857 (emettitore) andava dritto sul pin V- (o come si chiama, insomma quello che deve erogare -4V); di conseguenza il collettore va sui -4V e la base è l'ultima restante connessione. Prova a controllare il tuo PCB com'è, per verificarne le connessioni, che sono standard....

Ciao a tutti :slight_smile:
Oggi pomeriggio sono riuscito a disegnare,stampare ed incidere il pcb.....ho saldato i componenti,collegato arduino e caricato lo scketch di esempio della libreria I2C e tutto funziona a meraviglia.
Non vedo le righe segnalate da superzaffo.
Per ora ho fatto solo una schedina per poter fare due test vista l'incognita delle righe che si verificavano e visto che avendo solo smd non potevo montare su breadbord per provare direttamente.
@Michele
sulla scheda ho messo un led collegato ad un pin libero del 23017 da utilizzare per fare due test di simulazione sulla retro illuminazione così da non dover usare pin del 328......abbiamo già l'I2C,2 pin liberi del port expander quindi ho pensato di usarne 1.
@sz
Per il transistor confermo quello detto da Michele se non ti è molto chiaro fatti sentire.

Ok.. mi fa molto piacere quello che dici.. Allora probabilmente il problema delle righe è dovuto all'alimentazione... a me su breadboard da quelle righe che hai visto sulla foto...
Si, non ho molto ben capito di quale foto si riferiva Michele ]:smiley:
Quindi tu hai montato il 7660 sul display o sul PCB ? Hai messo anche quindi il transistor per amplificare l' alimentazione negativa...
Mi giri il file eagle ?

Ok.. mi fa molto piacere quello che dici.. Allora probabilmente il problema delle righe è dovuto all'alimentazione... a me su breadboard da quelle righe che hai visto sulla foto...

Si,credo anche io possa dipendere dall'alimentazione

Quindi tu hai montato il 7660 sul display o sul PCB ? Hai messo anche quindi il transistor per amplificare l' alimentazione negativa...

Io ho messo tutto sul display compreso il transistor,sulla scheda ho messo solo trimmer ,23017 ed il famoso led oltre alle R e C che servivano.
Tu non riesci a saldare tutto ciò che serve per l'alimentazione negativa sul display?

Ti dirò che è la prima volta che mi cimento con gli smd... quindi ci provo... sperando che il mio vecchio stagnatore vada bene ]:smiley:
Se hai qualche consiglio a proposito.. ben venga :slight_smile:

@ sz: te stai a rincoglionì? :stuck_out_tongue_closed_eyes: questa foto che tu chiami del circuito originale non c'entra nulla con il PCB del display che ho io ed anche i valori sono differenti; puoi postare una foto del retro del display che stai usando per vedere se è identico al mio? Comunque sia dovrai imparare a saldare i componenti smd sul display, penso sia inutile replicare ora il circuito con i componenti DIP, e sarebbe davvero inutile realizzare un PCB esteso per mettere questi 4-5 componenti quando lì hai tutto bello pronto; comunque anche il PCB di tonid sarà in smd, quindi o ti eserciti o li dividi tra me e tonid (visto ne ne hai una montagna :sweat_smile:) e te li saldiamo noi..., o li mandi tutti a me se tonid non ce la fa, basta che mi lasci il tempo necessario; però per me è l'occasione buiona per attrezzarsi ed imparare!

EDIT: che intendi per vecchio stagnatore? mica gli vuoi sparare qualche 30-40W, che il vetro del display ti fa le bolle tipo Murano! :stuck_out_tongue_closed_eyes:

@ tonid: ottimo; eccellente l'idea di gestire il led per i test sul backlight, ma lì dovrai prevedere un NPN, non credo che il P.E. sia in grado di erogare tutta quella corrente, anche se non ho controllato il ds; e poi non ho capito come lo gestirai via I2C, bisogna mettere mano alla lib?? Quando finisci il PCB, se vuoi gli do' un'occhiata anch'io con Eagle.

@ tonid: ottimo; eccellente l'idea di gestire il led per i test sul backlight, ma lì dovrai prevedere un NPN, non credo che il P.E. sia in grado di erogare tutta quella corrente, anche se non ho controllato il ds; e poi non ho capito come lo gestirai via I2C, bisogna mettere mano alla lib??

Si,ci metterò un NPN mentre per la gestione ora vediamo anche con sz.....volevo provare senza modificare la lib e vedere se disturbava.

comunque anche il PCB di tonid sarà in smd, quindi o ti eserciti o li dividi tra me e tonid (visto ne ne hai una montagna ) e te li saldiamo noi..., o li mandi tutti a me se tonid non ce la fa, basta che mi lasci il tempo necessario; però per me è l'occasione buiona per attrezzarsi ed imparare!

Ci sono senza problemi e la penso come te :slight_smile:

ok, allora facci sapere come va, comunque sta venendo fuori un bel lavoro, merita un bel Tutorial con tanto di foto ed allegati, che poi il nostro sz potrà usare a scopi commerciali per vendere i suoi display, mica vorrà tappezzarsi la casa :stuck_out_tongue_closed_eyes:

@Michele: no aspetta.. quella foto è della base originale in cui la basetta del display che tu hai, andava infilata nei pin... quella era solo la porzione del pezzo in cui c'era il 7660. Il mio è identico al tuo.. non ci sono dubbi.. sono tutti uguali.. ma per qualche arcano mistero l' alimentazione negativa e il trimmer era sulla scheda madre del dispositivo.
Certamente è un ottima occasione per imparare a saldare gli smd... su questo non ci sono dubbi... :smiley:
Voglio dire che ho uno stagnatore forse con la punta troppo grande... domani ti saprò dire...

Grazie per l' idea commerciale ]:smiley: e non solo per quella ....
Sono d'accordo sul fare un bel tutorial.. anche perchè questi display sono molto belli e ci puoi fare di tutto...
Ahh.. ho notato che via SPI è molto più veloce... anche con la cache... chissà.. magari poi proverò fare un pcb anche per SPI...

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.