Display LCD TFT con Touch e SD

Ultimamente sto giochicchiando molto con alcuni display TFT con Touch Screen e lettore SD, sviscerandoli un pochino, e avendo l' esigenza di qualche piedino in piu' mi e' venuto questo dubbio.
Sia il Display, che il Touch che l' SD utilizzano un piedino "CS" che viene utilizzato per abilitare il dispositivo all' occorrenza.
Per l' SD e' utile in quanto viene richiamata quando serve, mentre per il Display e il Touch io li utilizzo in continuo, non li interrompo mai, quindi presumo che i 2 piedini siano sempre attivi (LOW)........allora perché sprecarli in questo modo?
Visto che vanno dichiarati nelle librerie che utilizzo non posso metterli direttamente a massa per poterli liberare, pero' potrei liberarne almeno 1 collegando i segnali CS dei 2 dispositivi su di un unico piedino e dichiarare nel software lo stesso pin per entrambi i dispositivi. In pratica con 1 solo pin comandero' i "CS" dei 2 dispositivi, che comunque sono sempre attivi.
Che ne pensate?
E' fattibile?

Mi ricordo in un giornale di computer un articolo di 30 anni fa dove suggerivano di togliere i zeri da un numero binario perché non contenevano informazioni alla fine di risparmiare spazio. :wink: :wink:

Ogni dispositivo che é attacato al SPI deve avere il suo pin CS e deve essere attivato quando vuoi comunicare con lui. Se hai 2 dispositivi come vuoi fare a definire che n dato va al uno o al altro e come vuoi evitare conflitti sul MISO se tutti due i dispositivi devono mandare dati?

Ciao Uwe

:slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:
perdonami, ho dimenticato di specificare (dando erroneamente per scontato che si conoscesse la struttura dei display TFT) che tutti e 3 i dispositivi utilizzano pin differenti, nessuno in comune. Solo la SD utilizza la SPI Hardware, gli altri dispositivi utilizzano altri pin digitali (che oltretutto possono essere assegnati a proprio piacimento).
Non sono proprio cosi' sprovveduto....... XD

Come posso risponderti se non dici quali Display hai e come vengono pilotati. Fin ora só solo che non sono collegati al SPI hardware.
Ciao Uwe

il display e' questo : http://www.sainsmart.com/sainsmart-3-2-tft-lcd-display-touch-panel-pcb-adapter-sd-slot-for-arduino-2560.html
le librerie che uso (anche se in parte le ho modificate, ma le modifiche non interessano la domanda fatta) sono tutte qui: Electronics - Henning Karlsen

Solo la SD utilizza la SPI Hardware, il display e il touch utilizzano altri pin, che e' possibile dichiarare nell' inizializzazione....

nulla?
mi assemblo tutto su bredboard e provo direttamente? nessuno mi eviterebbe questa prova?

A me pare strano che 2 dispositivi abbiano un CS e poi non lo usino. Se non lo usano allora non dialogano con SPI.
Per condividere la comunicazione SPI, ogni dispositivo deve avere un CS e solo 1 alla volta attivo (ovvero LOW, in quanto il CS è negato).
Perciò se i dispositivi sono SPI allora il pilotaggio dei vari CS è obbligatorio, se solo uno è SPI, allora gli altri CS non servono a nulla.

Se parliamo di SPI Hardware e' solo 1 dispositivo che lo usa, la SD!
Gli altri 2 dispositivi (display e Touch Screen) probabilmente utilizzano uno protocollo software che non sono andato a astudiarmi, ma sara' proprietario.....utilizzano altri pin digitali, nessuno in comuna tra loro 3!!
ad ogni modo hanno un PIN denominato CS ciascuno che probabilmente viene usato dalla libreria per abilitare o disabilitare il dispositivo stesso.
Siccome a me non interessa disabilitare ne il display ne il touch vorrei metterli entrambi direttamente a GND (quindi sempre attivi), ma comunque non posso liberare entrambi i pin perché nell' inizializzazione del dispositivo devo comunque assegnare un I/O, quindi l' idea era di assegnare lo stesso pin ad entrambi i CS dei 2 dispositivi e quindi liberarmi 1 I/O....
al massimo potrei abilitare o disabilitare i 2 dispositivi contemporaneamente (display e touch)....ma non mi interessa farlo...
comunque appena posso metto su bred...e provo...

La libreria del display ha anche un file pdf Requirements e dice quali pin usare.
Dentro mi sembra di capire che parla di 3 tipi di collegamenti:

  • seriale (secondo me SPI) e quindi i pin MOSI,MISO... etc.
  • I2C e quindi SDA, SCL
  • terza modalità che credo sia quella che usi tu, i pin sono qualsiasi quindi al 99,99% non mi pare SPI :grin:
    Perciò io direi si, quei CS puoi lasciarli sempre attivi. Logicamente non ci posso mettere la mano sul fuoco.

Unica cosa. Per lo SPI il CS è negato, attivo quando LOW. Per questo altro protocollo bisogna capire se quel CS è negato oppure no.
EDIT: nel codice della libreria ci sono molti cbi(clear bit) e sbi(set bit) sul CS

cbi(P_CS, B_CS);
setXY(x1, y1, x2, y2);
sbi(P_RS, B_RS);
_fast_fill_16(fch,fcl,((long(x2-x1)+1)*(long(y2-y1)+1)));
sbi(P_CS, B_CS);

Pare che per prima cosa abilta CS negandolo (cbi) e quindi anche CS è segnale attivo=LOW

si, in base al display che si usa (la libreria e' generica) varia il pin out, se a 8 bit, a 16 bit o seriale I2C.
Mentre per la SD e il Touch i pin son quelli....
Faccio qualche prova su bread e ti dico, hai ragione anche sul discorso del CS se LOW o HIGH...ma credo sia attivo in LOW (leggendo nella libreria).

Si infatti avevo notato anche io il Clear Bit quindi avevo intuito che fossero a logica negativa.
Ho montato tutto su Bred...ho fatto un po di prove con oscilloscopio e come pensavo posso liberare 1 pin.
Il CS del display va il LOW nel momento in cui deve visualizzare qualcosa, in questo modo e' possibile mettere in parallelo (tree state) tanti display e scrivere solo su quello voluto abilitando il suo CS, visto che io ho solo 1 display posso porlo fisso a massa...
il CS del Touch si attiva nel momento in cui si tocca il touch e abilita la lettura, anche qui e' utile in caso di piu' touch, ma nel mio caso posso porlo fisso a LOW...
In teoria potrei liberarli entrambi, ma visto che vanno per forza assegnati nell' inizializzazione ho assegnato ad entrambi i dispositivi lo stesso pin per il CS, collegando i2 pin fisicamente in parallelo sul pin che ho assegnato. In questo modo quel pin sara' attivo (LOW) nel caso toccassi lo schermo o nel caso invio dati al display. Cosi' facendo evito di tenere sempre attivi i 2 dispositivi anche quando non serve, non si sa mai in caso di interferenze sui bus dati...
Ho provato a lungo e funziona perfettamente.. XD
domani se riesco provero' l' inversione del bus come altra discussione :wink: