Search Programmazione WxWidgets CodeBlocks Android Elettronica Arduino 1-Wire

AA

A

Aug

05
2013

Arduino, display HD44780 compatibile e 74HC595
Arduino, Elettronica Add comments

69.164.218.62 Utente non autenticato Registrati Collegati

In un precedente articolo avevamo visto come collegare e controllare un display HD44780 compatibile con Arduino, sia
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

Italiano English

pdfcrowd.com

utilizzando la libreria LiquidCrystal che andando ad operare manualmente sulle uscite di Arduino. Oggi vediamo come ridurre considerevolmente il numero di pin utilizzati andando a sfruttare un 74HC595 che abbiamo già studiato in un precedente articolo. Il concetto è semplice, infatti anzichè collegare tutti i pin in parallelo facciamo una trasmissione seriale e poi tramite il 74HC595 smistiamo i segnali per tutti i pin. Se avete letto i precedenti articoli, questo vi sembrerà quasi banale. Andiamo infatti ad utilizzare 3 pin digitali che corrisponderanno al clock register, storage register e serial data, in questo modo inviamo i dati al 74HC595 che a sua volta convertirà in un segnale parallelo che distribuisce ai pin del display. Il collegamento è riportato qui sotto. Da una parte abbiamo Arduino che comunica con lo shif register e questo che con le sue uscite si interfaccia con il display.
RSS McMajan Libreria Ss_TFT Arduino, relè e infrarossi. IteadStudio 2.8 TFT Display shield: Una nuova libreria Arduino e RS485: piccoli approfondimenti Arduino – cos’è? (per principianti e anche meno)

Categories Elettronica (36) 1-Wire (8) Arduino (30) Programmazione (26) Android (7) CodeBlocks (9) wxWidgets (11) Senza categoria (1)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

WEB (1) Wordpress (1) Elettronica Sito ufficiale Arduino Programmazione HomePage Code::Blocks HomePage wxWidgets Blog QR Code Qui sotto anche lo schema elettrico: open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com .

A questa complessità si aggiunge quella di inviare i dati in maniera seriale. ma il vantaggio di risparmiare 3 pin digitali non è cosa da poco quando le risorse hardware scarseggiano.com . Se avete letto la parte in cui è spiegata in dettaglio l’inizializzazione del display. rigida e sicuramente cervellotica. per cui esiste una versione modificata della LiquidCrystal che permette di lavorare direttamente attraverso il 74HC595 senza ulteriori open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. ricorderete che la procedura è non tanto complessa quanto un po’ lunga. LiquidCrystal modificata Come sempre qualcuno è già passato prima di noi attraverso questa problematica.La cosa più complessa è quella di gestire correttamente l’uso dei pin connessi al display.

scervellamenti. Il supporto al protocollo SPI porta però ad una limitazione. Ci basti sapere che è un protocollo nato per far comunicare dispositivi diversi attraverso tre conduttori. Qui sotto vi incollo l’esempio HelloWord che trovate nella libreria a cui ho modificato unicamente il latch pin e l’impaginazione. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. tecnica di cui non abbiamo ancora mai parlato e che quindi per ora tralasceremo. Rispetto a quanto visto nel primo articolo sui display lcd cambia unicamente l’istanzializzazione dell’oggetto LiquidCrystal in quanto andiamo a specificare unicamente il pin usato come latch (nell’esempio il 10). Il latch pin invece può essere lasciato al valore base (10) o essere modificato con uno qualsiasi dei restanti pin. e tra i molti possibili dispositivi con questa interfaccia esistono anche alcuni display. Potete scaricarla da questa pagina (alternativamente la trovate qui). Una volta fatti i collegamenti e sostituita la libreria originale non dobbiamo far altro che programmare la sketch.com . La stessa libreria modificata permette anche l’utilizzo di display con connessione SPI. dopodiché andate a sostituire quella originale con questa modificata (nella cartella libraries del software Arduino). ossia siamo costretti ad utilizzare il pin 13 per il clock ed il pin11 per i dati (MOSI).

print(millis()/1000). 1). line 1 // (note: line 1 is the second row. ora vedrò di implementare in modo diretto i comandi al display. lcd. } void loop() { // set the cursor to column 0.begin(16. Se il vostro scopo è usare questa tecnica nel modo più semplice possibile avete già tutte le informazioni necessarie a creare il vostro piccolo progetto per cui potete fermarvi anche a questo punto. world!"). // Print a message to the LCD.h> // initialize the library with the number of the sspin //(or the latch pin of the 74HC595) LiquidCrystal lcd(10). Se invece volete approfondire ulteriormente. // set up the LCD's number of columns and rows: lcd. since counting begins with 0): lcd.#include <LiquidCrystal.com . open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. void setup() { lcd. 2). // print the number of seconds since reset: } Fin qui nulla di particolarmente difficile.print("hello.setCursor(0.

ma se non conoscete bene la teoria che ci sta sotto non riuscirete mai a convertire il vostro progetto.esattamente come avevamo fatto nel precedente articolo. Nella scorsa puntata le due funzioni si presentavano in questo modo: open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Un altro motivo potrebbe essere che i pin 11 e 13 vi servono già per altri motivi e volete usarne di altri. Vi chiederete perché perdere tempo ad implementare qualcosa che troviamo già funzionante ma le risposte non sono difficili da trovare. Implementazione passo a passo Rispetto a quanto visto nel precedente articolo dobbiamo andare a modificare la funzione che settava i pin del display e quella che alzava il pin Enable con le corrette tempistiche al fine di far interpretare al display il comando inviato (PulseEnable). Allo stesso modo potreste decidere di abbandonare Arduino per passare ad un PICC. Ad esempio oltre al display potreste voler gestire in serie anche delle uscite digitali aggiungendo altri 74HC595 ma non mi risulta esista alcuna libreria pronta in grado di farlo.com .

digitalWrite(pin_D6. D6). //Pin connected to latch pin (ST_CP) of 74HC595 const int clockPin = 11. digitalWrite(pin_D4. //Pin connected to Data in (DS) of 74HC595 open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.bool D4) { digitalWrite(pin_D7. delayMicroseconds(1).void SetCommandPin(bool D7. delayMicroseconds(1). // >450ns digitalWrite(pin_E.bool D5. // > 37us } Invece il listato iniziale di prova per la dimostrazione del funzionamento dello shift register si presentava così: const int latchPin = 12.bool D6. } void PulseEnable(void) { digitalWrite(pin_E. D4). D5). HIGH). LOW). D7). //Pin connected to clock pin (SH_CP) of 74HC595 const int dataPin = 13. LOW). delayMicroseconds(100). digitalWrite(pin_D5. // >450ns digitalWrite(pin_E.com .

i<8. } } Ora dobbiamo fondere le due tecniche per creare un progetto unico.i++) { digitalWrite(latchPin.void setup() { pinMode(latchPin. OUTPUT). HIGH). A questo punto sorge una piccola difficoltà. pinMode(clockPin. clockPin. LOW). OUTPUT). 1<<i). digitalWrite(latchPin. shiftOut(dataPin. Di ques’ultimo listato teniamo sicuramente la definizione dei tre pin e il loro settaggio come output nel setup. siamo costretti ad inviare tutti i valori. pinMode(dataPin.com . delay(90). OUTPUT). Ne consegue open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Usando lo shift register ogni volta impostiamo tutti i pin per cui anche nel caso in cui dobbiamo modificarne solamente uno. MSBFIRST. } void loop() { for (int i=0.

Per fare ciò usiamo una variabile. Vi faccio notare che nello schema sopra proposto abbiamo Q0 e Q2 liberi. ad esempio potremmo controllare l’accensione e spegnimento della retroilluminazione tanto per fare un esempio. Per settare e leggere i singoli bit possiamo sfruttare le comode bitWrite e bitRead incluse fra le funzioni base di Arduino.bool D4) open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. su Q1 abbiamo RS. siamo costretti ad inviare tutti i valori. Se ora voglio modificare la funzione SetCommandPin andrò prima a modificare i singoli bit della variabile dopodiché invio il tutto attraverso lo shift register.bool D6.com . In particolare i pin 0 e 2 liberi del nostro 74HC595 ci permettono di aggiungere funzioni extra. Da quanto detto la nuova SetCommandPin potrebbe diventare così: void SetCommandPin(bool D7. su Q3 il pin Enable e da Q4 a Q7 i pin D4-D7. non collegati. più nello specifico possiamo usare un semplice char che con i suoi 8 bit è in grado di contenere il valore di tutti i singoli pin. Ne consegue che indipendentemente dal pin da settare il nostro software deve tenere traccia anche dei valori dei restanti pin. Ho usato questo schema per mantenere la compatibilità con la LiquidCrystal modificata.bool D5. ma se non avete intenzione di usarla siete liberi di fare tutte le modifiche che volete.uno.

bitWrite(serialdata. digitalWrite(latchPin. MSBFIRST. serialdata). Non ci rimane che modificare la PulseEnable sostituendo le chiamate dirette digitalWrite con il settaggio del relativo bit sulla variabile serialdata ed il relativo invio allo shifregister per il quale ho creato la sottofunzione Send595 come prima open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.D5). shiftOut(dataPin.{ bitWrite(serialdata. } Nulla di nuovo: nelle prime quattro istruzioni settiamo i bits dal 4 al 7 nella variabile serialdata.6. bitWrite(serialdata. Visto che l’invio allo shift register sarà un’operazione molto sfruttata. digitalWrite(latchPin.4. dopodichè spediamo questa allo shiftregister nello stesso identico modo visto nel precedente articolo. possiamo spostare le relative istruzioni in una sottofunzione che possiamo richiamare in tutte le funzioni che hanno bisogno di comunicare con il 74hc595.D6).5. HIGH). LOW).D7).D4).com . clockPin.7. bitWrite(serialdata.

// setta il pin enable a low Send595(). delayMicroseconds(1).3.detto. MSBFIRST. } void PulseEnable(void) { bitWrite(serialdata.LOW).HIGH). LOW). digitalWrite(latchPin. // setta il pin enable a high Send595(). delayMicroseconds(1).com . // >450ns bitWrite(serialdata. // >450ns bitWrite(serialdata. // setta il pin enable a low Send595(). serialdata).3. delayMicroseconds(100). shiftOut(dataPin. La nuova funzione e la Send595 saranno simili a quanto segue : void Send595(void) { digitalWrite(latchPin.3. HIGH). clockPin.LOW). // > 37us } open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.

//Pin connected to Data in (DS) of 74HC595 char serialdata=0.1. void setup() { pinMode(latchPin. ossia passare da comandi a dati e viceversa. // comando con RS=LOW open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. //procedura di reset delayMicroseconds(50000). //Pin connected to latch pin (ST_CP) of 74HC595 const int clockPin = 11. pinMode(dataPin.40ms ( ho usato tempi abbonda bitWrite(serialdata. //Pin connected to clock pin (SH_CP) of 74HC595 const int dataPin = 13. OUTPUT).. OUTPUT).A questo punto dobbiamo preparare la fase di inizializzazione che però è identica a quanto già visto nel pregresso articolo. // attesa iniziale.com ... dobbiamo prima settare la variabile serialdata e poi eseguire un Send595. pinMode(clockPin. OUTPUT). L’unica cosa a cui dobbiamo stare attenti è che ogni volta che abbiamo l’esigenza di modificare il pin RS.LOW). La sketch finale sarà: const int latchPin = 12.

1. // 4.0. // .com .0. // reinvio 0011 PulseEnable().1.0).1).3.1. delayMicroseconds(150).0. i restanti quattro per settare font e righe PulseEnable().1.1).0. // primi 4 open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. // in realtà le due sopra non servivano visto che serialdata era SetCommandPin(0.settiamo i 4 bit.bitWrite(serialdata... // invio 0011 PulseEnable(). delayMicroseconds(4500). // 100us SetCommandPin(0...0.0. // . SetCommandPin(0.LOW).0).1. // accendo il display SetCommandPin(0..1ms SetCommandPin(0.0.. // mi accerto che il pin E sia allo stao LOW pri Send595().1)...0.1. // reinvio 0011 PulseEnable().0)..0).. PulseEnable(). // . SetCommandPin(0.finalmente possiamo inviare il comando complet PulseEnable(). SetCommandPin(1.

// 37us delay(1000). //ultimi 4 diplay acceso.1). // ultimi 4 PulseEnable(). // porto RS ad HIGH per indicare l'invio di DAT Send595(). //clear SetCommandPin(0. delayMicroseconds(50).PulseEnable(). SetCommandPin(1.0).1.0. // primi 4 PulseEnable().1. cursore presente e lampegg PulseEnable().1.0.0.HIGH).0.0).0. SetCommandPin(0.1.com . } void loop() { // scrivo una lettera bitWrite(serialdata.0.0). PulseEnable(). SetCommandPin(1.0. SetCommandPin(0. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. // primi 4 PulseEnable().1).

LOW).HIGH).D4). bitWrite(serialdata. } void Send595(void) { digitalWrite(latchPin. bitWrite(serialdata. digitalWrite(latchPin.5.D7).6.3.D6). clockPin. delayMicroseconds(1). // setta il pin enable a high open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Send595(). MSBFIRST.} void SetCommandPin(bool D7.bool D6. // >450ns bitWrite(serialdata. } void PulseEnable(void) { bitWrite(serialdata.4. HIGH). bitWrite(serialdata.D5).bool D5.3.7.bool D4) { bitWrite(serialdata. serialdata). // setta il pin enable a low Send595().com . shiftOut(dataPin. LOW).

Vi passo però alcuni spunti interessanti. ma per ora non è pronto nulla per cui vi lascio con la curiosità di sperimentare questa tecnica anche con i vostri progetti. A questo punto il lavoro di base è completo. Share! open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.Send595(). Be Sociable.com .LOW). // setta il pin enable a low Send595(). delayMicroseconds(1). Ad esempio perchè non usare due 74HC595 in serie per comandare due display in contemporanea? Allo stesso modo potete aggiungere delle uscite digitali sempre impiegando gli stessi tre pin digitali. // > 37us } Come per l’articolo precedente viene eseguita la procedura di inizializzazione e poi “scritta” una “H” sul display. delayMicroseconds(100). Probabilmente scriverò una libreria apposta per gestire uscite digitali e display attraverso multipli 74HC595. // >450ns bitWrite(serialdata.3.

3. Arduino e 74HC595: libreria per display HD44780 compatibili e uscite digitali. 4. Arduino e display HD44780 compatibile 2. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Display HD44780 e caratteri personalizzati.com . 74HC595 e 74HC165: un aggiornamento sugli shift register 5.Tw eet 0 Like 0 0 Share Articoli correlati: 1.8 TFT Display shield sia su Arduino UNO che su Mega 2560 Related posts brought to you by Yet Another Related Posts Plugin. IteadStudio 2.

medico radiologo Programma in C dalla fine degli anni 80. HD44780. php. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd. Ha conoscenze discrete di C++. Bazzica con l'elettronica e unisce le diverse passioni in un progetto di domotica. idraulico.com . display. infissi e quant'altro vi venga in mente. lcd Leave a Reply You must be logged in to post a comment. dal rivestimento termico. html. javascript.Stefano Stefano Smania. l'impianto elettrico e domotico. Ha realizzato da solo un piano della propria casa. sql. Scrive questi articoli nella speranza che servano a qualcuno Posted by Stefano at 19:45 Tagged w ith: 74HC595. Possiede approfondite conoscienze sullo standard DICOM. Gli piace cucinare ma ha poco tempo per applicarvisi. arduino. ai muri interni. riscaldamento a pavimento. Controllare Arduino con gli infrarossi e usare Arduino come telecomando Display HD44780 e caratteri personalizzati.

com .© 2011 McMajan Suffusion theme by Sayontan Sinha open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.