Monitor GLCD Graphics cambiare pin interfaccia arduino

Salve popolo arduiniano,
seguendo i vostri post di tanto in tanto ho pensato di creare un progettino che "condiziona" una stanza.
ma ho un problema dettato da un monitor GLCD (cinese) in quanto preleva dei pin (6,7,8 e 9) per funzionare, pin che attivavano/disattivano dei relè.

Quindi mi chiedevo se era possibile cambiare i pin nelle librerie? e se sì qual'è il file e le variabili da cambiare?

Qualcuno può aiutarmi in qualche maniera?

Display_GLCD.pdf (415 KB)

Semmai e' un Display.. e non un monitor.

Si che si puo' fare, pero' ( a parte che non menzioni una libreria ) normalmente quei pin sono quelli usati per il valore DATI, su due diversi nibble.
Quindi forse e' meglio se cambi sul tuo sketch l'assegnazione ai pin dei Rele'.

e' piu' facile

Grazie brunello della risposta,
per i relè utilizzo questo shield relè
la libreria che utilizzo per il GLCD è la ks0108.h, ho sfruttato questo link per testarlo

adesso però per poter collegare lo schermo e lo shield devo inventarmi qualcosa e l'elettronica non è proprio il mio forte :frowning:

... proposte? :stuck_out_tongue:

[nota]
l'intento è quello di inserire un dht11, un ricevitore ir come input ed un xbee, un GLCD e lo shield relè per l'output.
volevo implementarci anche un pcf8563 (TRC) ma penso di aver terminato i pin utilizzabili :frowning:
da remoto, oppure da telecomando vorrei gestire 3 di questi relè i quali comandano (un climatizzatore per il freddo, uno "scaldino" per il caldo, ed un deumidificatore (che a casa mia stiamo al 66% d'inverno :O).

uhmmm il GLCD si porta via 13 Pin sui 20 disponibili .
l'Xbee usa Rx e Tx .. e siamo a 15
avanzano il Pin 2,3,12,13,A5(19).
Potresti spostare l'EN del GLCD

#define R_W 16 // R/W Bit
#define D_I 17 // D/I Bit
#define EN 18 // EN Bit
//#define RES 19 // Reset Bit // uncomment this to contol LCD reset on this pin

su un'altro pin ( ad esempio il 12 ) e cosi' potresti usare la I2c
E in I2C collegarci... l' RTC ( il PCF8563 o un DS1307 ) , un PCF8574 che ti serve per comandare la scheda rele' ( chiaramente non la usi piu' come shield)
Il DHT11 sul pin 2.
l'IR sul pin 3

ti avanza il pin 13

In alternativa usi una MEGA

per il TCR ho già risolto, in quanto il pc trasferisce la data (e l'arduino può tenersela per una 50ina di giorni circa).
in quello straccio di codice ci sono già arrivato, ma lì mi si intrecciano gli occhi :stuck_out_tongue:
devo spostare (se dentro la libreria ks0108_arduino.h o altrove non so) i pin 5,6,7 e 8 (o almeno 3 su 4), i quali dovrebbero essere collegati ai pin D5,D6,D7 e D0.
nel codice ho trovato anche queste info, ma da qui non so muovermi. :frowning:

/* option: uncomment the next line if all command pins are on the same port for slight speed & code size improvement */
#define LCD_CMD_PORT		PORTC		// Command Output Register for pins 14-19

/* Arduino pins used for LCD Data 
 * un-comment ONE of the following pin options that corresponds to the wiring of data bits 0-3 
 */
#define dataPins8to11   // bits 0-3 assigned to arduino pins 8-11, bits 4-7 assigned to arduino pins 4-7
//#define dataPins14to17 //bits 0-3 assigned to arduino pins 14-17, bits 4-7 assigned to arduino pins 4-7. (note command pins must be changed)
//#define dataPins0to3  // bits 0-3 assigned to arduino pins 0-3 , bits 4-7 assigned to arduino pins 4-7, this is marginally  the fastest option but  its only available on runtime board without hardware rs232.

/* NOTE: all above options assume LCD data bits 4-7 are connected to arduino pins 4-7 */

Marbi:
Salve popolo arduiniano,
... ho un problema dettato da un monitor GLCD (cinese) in quanto preleva dei pin (6,7,8 e 9) per funzionare, ...

mi scuso per l'errore dei pin nel precedente messaggio

non e' cosi' semplice..
Come ti dicevo, usano un nibble della porta D ( pin da 4 a 7 ) e della porta B ( pin da 8 a 11 ) e vengono usate delle funzioni logiche per scriverci i dati.

Non avendo Arduino altre porte a disposizione ( perlomeno usabili allo stesso modo ), la modifica e' moltooo complessa.
Quindi la cosa piu' semplice rimane quella di usare un'altra scheda rele', in cui puoi scegliere i pin interessati. Oppure quella shield, ma non posizionata sopra ad Arduino, ma usata come scheda esterna

Comunque

per il TCR ho già risolto, in quanto il pc trasferisce la data (e l'arduino può tenersela per una 50ina di giorni circa)

dipende da che errore tolleri da un RTC software. In un mese puoi anche sballare di un'ora
E se manca alimentazione si azzera

arduino viene alimentato a batterie proprio per evitare il reset, volevo utilizzare la funzione millis, ma se mi dici che con tale funzione potrei sballare 1 ora al mese cerco altre vie di fuga.
lo shield lo scollego e collego i pin relè direttamente ai pin di mio interesse su arduino, sperando di riuscire a tirar fuori qualche ragnetto dal buco :frowning:

nota: pensavo che la funzione millis fosse molto precisa, devo distruggermi un mito?

la funzione Millis e' precisa... per quanto e' precisa la frequenza dell'oscillatore da 16 Mhz

allora scusami, ma non capisco come possa sballare quella famosa ora!!!

l'oscillatore quarzato non e' di una precisione assoluta.
O meglio, dato che non c'e' un sistema di regolazione della frequenza, e' legata alla qualita' di costruzione ( alla temperatura di lavoro etc etc )
Quindi se il quarzo da 16.000 Khz, come quello su Arduino, oscilla ad esempio a 15.999 Khz, se fai un semplice calcolo vedi che sballa di 5 secondi al Giorno.

Quindi la Millis non dura 1 ms, ma 0,99993 ms

Non prendere per verita' assoluta i calcoli, era solo per rendere l'idea

Ma che batteria hai per durare circa 50gg ?

l'idea è di collegare 4 batterie AA ricaricabili. comunque grazie all'XBee ogni qualvolta accendo il pc, in automatico dovrebbe reimpostare l'ora, quindi una volta al giorno è assicurato :P.

cmq grazie, proverò a collegare lo shield "esternamente" all'arduino, il problema è collegare tutti i pin giusti :stuck_out_tongue:

non so se lo sai, ma io sono quello che chiede in giro se si è sicuri di dover collegare tutte le masse assieme senza il rischio di una catastrofe nucleare!!! :open_mouth:

Salve ragazzi,
mi aggancio alla vostra conversazine.....
io non posso cambiare i pin nel programma perchè ho fatto un casino di collegamenti..
ma ho davvero bisogno di cambiare i pin di assegnazione nella libreria del ks0108 e non ho la +
pallida idea di come si faccia.... premetto che non so tanto di informatica quindi, scusate, ma se si puo'
fare qualcuno me lo potrebbe spiegare come si spiega ad uno stupido????

grazie a tutti!

pulsebox72:
... qualcuno me lo potrebbe spiegare come si spiega ad uno stupido????

Dipende molto dalla libreria.
Se guardi quella al link segnalato da @Marbi vedrai che usa: #include <ks0108.h>
Ma i comandi di quella libreria (di solito un comando iniziale o la dichiarazione di un oggetto di quella libreria) non chiedono in input quali pin.
Nella pagina di quella libreria è spiegato (in inglese) che la definizione di quali pin sono usati è dentro un file .h :

  • ks0108_arduino.h <- this is for ATmega168 and ATmega328 boards
  • ks0108_mega.h <- for the Arduino Mega (ATmega1280/2560)
    Perciò per modificare i pin per questa libreria bisogna aprire con l'editor il file giusto (a seconda di quale Arduino usi).

Altre librerie invece quando le si "inizializza" bisogna dirgli quali pin utilizzano.
Esempio la stepper per i motori passo-passo: #include <Stepper.h>
devi dichiarare un oggetto:

Stepper motor(200, 10,11,12,13);

e i parametri 10,11,12,13 indicano che usi quei pin.
Altro esempio è la SoftwareSerial.h libreria che permette di usare 2 pin per comunicazione seriale, diversi da quelli standard.
Naturalmente cosa richiede la libreria? Di creare un oggetto e di dirgli quali 2 pin userai:

SoftwareSerial Connessione ( iPinNum_RX , iPinNum_TX);

ma ho davvero bisogno di cambiare i pin di assegnazione nella libreria del ks0108 e non ho la +
pallida idea di come si faccia..

Se ben ricordo, ma e' da un po' che non uso piu' quella libreria, i pin 4,5,6,7 e 8,9,10,11 non si toccano ( perche' non basta editare la libreria e cambiare assegnazione, ma va' riscritto mezzo codice della libreria )

sugli altri mi pare si possano modificare

ciao... scusatemi.. ma potete comandare quei display via I2C o via SPI.
Guardate questo link. Gammon Forum : Electronics : Microprocessors : Connecting a graphical LCD via a I2C/SPI using a 16-bit port expander
In questo modo risparmiate un sacco di pin.
Eventualmente trovate anche qualche mio topic su questo tema.

ciao