Arduino Forum

International => Italiano => Megatopic => Topic started by: smania2000 on Aug 19, 2013, 10:22 pm

Title: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 19, 2013, 10:22 pm
Ciao a tutti. Durante lo sviluppo di un progettino, mi sono imbattuto nello "studio" degli shif register, in particolare del 74HC595. Inizialmente l'ho usato per espandere le uscite digitali di Arduino. Successivamente ho usato lo stesso chip per "risparmiare" pin nel collegamento di un display LCD 16x4. Il problema è che non ho trovato nessuna libreria in grado di gestire entrambe le cose sulla stessa serie di 745HC595, infatti c'è una versione modificata della liquidcrystal per comandare i display attraverso lo shift register, ma non permette di gestire in contemporanea le uscite digitali oltre al fatto che i pin utilizzabili sono limitati. Visto che non ho trovato nulla di pronto ho dedicato alcuni giorni alla scrittura di una libreria fatta apposta per questo scopo.
Permette di gestire fino a 256 shift register in serie, usando qualunque pin di Arduino; su ogni singolo 74HC595 potete metterci un display oppure sfruttare le 8 uscite digitali. Ho scritto un articoletto sul mio blog per spiegarne il funzionamente, per ora solo in italiano, per cui non vi annoio con ulteriori dettagli. Lo trovate qui:

http://www.mcmajan.com/mcmajanwpr/?p=1604

In fondo all'articolo c'è il link per il download della libreria.

Non ho idea di quante persone possano essere interessate a questo tipo di libreria, comunque se c'è qualche anima pia che ha voglia / tempo di provarla, mi farebbe un grosso favore se mi desse un feedback per farmi avere osservazioni su eventuali bachi, richiesta di nuove funzioni, compatibilità con i vari display.

Come da richiesta riporto qui la pagina di mantenimento della libreria, creata dopo questo post e i vostri suggerimenti: www.mcmajan.com/mcmajanwpr/?page_id=1636

Ciao,  Stefano
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 19, 2013, 11:25 pm
Quando mi serve un lcd uso sempre uno shift register per risparmiare pin, ti faccio volentieri da tester.
Attuamente uso la libreria shiftlcd, funziona bene ma non permette di collegare altri shift register in cascata.
Un altro grosso difetto consiste nel fatto che non riesce a gestire il controllo della retroilluminazione anche se è previsto nella libreria; appena si prova a spegnere o ad accendere il led il display inizia a dare di matto visualizzando caratteri strani. Per ora l'unico rimedio per gestire la retroilluminazione è sacrificare un altro pin di arduino.

Vedendo i tuoi collegamenti ho notato che il led per la retroilluminazione del display non è collegato allo shift register nonostante ci sono 2 uscite libere (Q0,Q2).
Sarebbe davvero utile se si potesse sfruttare un'uscita per gestire la retroilluminazione, basterebbe aggiungere un NPN (con una resistenza) allo schema e due funzioni alla libreria, ad esempio setBacklightOn e setBacklightOff.
Pensi sia fattibile?
Intanto mi scarico la libreria e ti prometto di fare un pò di test, ho un progettino caldo caldo ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 20, 2013, 12:08 am
Ottimo. Il bello di condividere con gli altri il proprio lavoro è proprio il condividere punti di vista diversi. Ho lasciato Q0 e Q2 liberi per rendere lo schema di collegamento compatibile con la LiquidCrystal modificata, in questo modo è possibile cambiare sketch senza variare i collegamenti hardware.
Anche se non c'è una funzione specifica puoi comunque sfruttare le due uscite libere, se parti dall'esempio che ho messo nel mio articolo ti basta fare:
  My595.bitWrite(Buffer[X],Y,LOW);
  My595.Send595();
Dove X indica il numero di shift register (lo 0 è il primo, poi 1,2,....), Y è l'uscita libera da controllare (o / 2) e LOW / HIGH è il livello di uscita. Con Send595 vengono inviati tutti i dati alla catena di shift register per cui viene aggiornato lo stato dell'uscita.
A parte la compatibilità hardware c'è un'altro motivo per cui non ho ancora pensato cosa fare delle uscite 0 e 2. Non ho ancora provato, ma in teoria se allo stesso shift register collego tre display usando gli stessi collegamenti ma collegando  il pin Enable dei due display aggiuntivi alle uscite 0 e 2, dovrei essere in grado di comandare ben tre display con un solo shif register....peccato che non ho i display e non posso provare :-)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 20, 2013, 07:59 pm
Ciao, complimenti per il lavoro svolto e grazie per averlo condiviso. Spero che più di qualcuno possa fare dei test impegnativi, ma il nostro BUD Pelletta è già un validissimo tester, in modo da confermare la piena funzionalità, a quel punto bisognerebbe fare in modo che la lib non si perda assieme a questo Topic, tra qualche giorno; a mio parere sarebbe cosa eccellente inserirla nel PlayGround, anche se personalmente non ho mai lavorato sulla piattaforma.
Riguardo il test che vuoi fare, gli LCD non gradiscono ricevere dati prima di essere pronti a trattarli, per cui se li spegni alla riaccensione facilmente vanno in blocco, diverso dovrebbe essere il discorso del pin ENABLE, che dovrebbe avere proprio la funzione di disabilitare la visualizzazione di dati comunque in arrivo. La cosa è interessante, appena riesci a provarla facci sapere.
:)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leouz on Aug 20, 2013, 09:35 pm
Mi interessa molto la parte uscite digitali!
mi sa che in questi giorni ci dedicherò del tempo.

per sapere magari hai fatto già delle prove.. c'è un limite per la distanza tra un 74HC595 e l'alto? nel senso che se li collegassi con 1,5m di cavo schermato ci sono grossi problemi? magari di latenza?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 20, 2013, 11:40 pm
Per me è un piacere condividere il lavoro che ho fatto con tutti voi, dopotutto le conoscenze di elettronica che ho vengono da chi ha condiviso i prorpi lavori in rete. Anche il tuo tutorial sui bootloader, Michele, è fra le cose che ho imparato grazie alla condivisione in rete. Se dopo i vostri scrupolosi test mi direte che ne vale la pena posso metterla volentieri nel playground, non ho idea di come si faccia ma ci penserò quando sarà ora.

Per quanto riguarda la domanda di "Leouz", non ho provato, ma anche se questi tipi di connessioni non sono certo pensate per collegamenti "a distanza", credo che fino a 1.5 metri si possa riuscire a far funzionare il tutto, con un buon cavo twisted schermato...se ho l'occasione di fare una prova simile ti faccio sapere, magari con l'oscilloscopio potrei vedere quanto rumore passa
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 20, 2013, 11:49 pm
Credo sia meglio prolungare i pin delle uscite piuttosto che i pin di gestione... eventuali interferenze potrebbero far commutare le uscite ad minchiam :smiley-sweat:
Non ho mai fatto delle prove di lunghezza, li ho sempre messi vicini nella stessa scheda.

@smania2000: ho iniziato a vedere la libreria, la reputo molto utile.
Intanto ti ringrazio per averla condivisa, appena la testo per bene ti farò sapere come si comporta.
Sto preparando appositamente un pcb per testarla per quanto mi piace ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: brunello22 on Aug 20, 2013, 11:54 pm
bel lavoro.

Aggiungi nella libreria anche una cartella  Examples, ci semplifichi ancora di piu' la vita

Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 21, 2013, 08:40 pm
@Pelletta: wow, adirittura un pcb apposta :-) ... mi fa piacere ti piaccia, spero si comporti bene. Mi raccomando il condensatore di disaccopiamento sui 74HC595, non so se hai letto il mio articolo, ma senza metterlo a random dopo diverse migliaia di cicli di funzionamento, sui display avevo isolati errori di interpretazione che portavano a shiftare l'area del display e a far comparire caratteri indesiderati in giro per lo schermo (sapessi quanto tempo ho perso per capirlo!!!)


@brunello: ottimo suggerimento, nonostante la prima cosa che io faccia con le librerie degli altri è aprire gli esempi, non ho minimamente pensato di scrivere nulla per la mia, mi sono limitato a descrivere il funzionamento nell'articolo. Appena ho un attimo metto degli esempi e li allego alla libreria.

Grazie a tutti.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 21, 2013, 09:18 pm
Tranquillo, ho messo un condensatore da 100nF sugli shift register con gli lcd.
Sto per saldare i pcb e iniziare i test; intanto mi sono permesso di aggiungere due funzioni alla libreria che mi fanno molto comodo.
Non interferiscono con il resto del codice. Una serve per gestire la retroilluminazione dei display:
Code: [Select]
void hc595::SetBacklight(unsigned char numeroDisplay,unsigned char pinRetro,bool statoRetro)
{
  bitWrite(Buffer[numeroDisplay],pinRetro,statoRetro);
  Send595();
}

Il primo parametro è relativo allo shift register dove è collegato il display, il secondo è l'uscita disponibile dello shift register dove è collegato il transistor (0 o 2) e il terzo è un valore booleano che rappresenta lo stato della retroilluminazione quindi LOW spenta e HIGH accesa.
Esempio:
Code: [Select]
My595.SetBacklight(0,2,HIGH);// accende la retroilluminazione del display collegato all'uscita 2 del primo shift register
Appena inizializzato il display però la retroilluminazione resterebbe spenta, quindi andrebbe accesa subito dopo l'inizializzazione del display.
Allo stesso modo con l'istruzione ResetDisplay della libreria la retroilluminazione si spegne involontariamente quindi ho aggiunto una seconda funzione per pulire il display senza perdere lo stato della retroilluminazione:
Code: [Select]
void hc595::clean(unsigned char lcd)
{
  SendLcdCommand(LCD595_DISPLAY_CLEAR,lcd);
}

L'unico parametro da passargli è lo shift register dov'è collegato il display.

Dato che sto ancora usando l'ide 0.022 ho anche fatto in modo di renderla compatibile con le vecchie versioni:
Code: [Select]
#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif


Ovviamente sei libero di ignorare queste due funzioni, io le tengo per comodità.
Vado a saldare le schedine per i test, ho un display 16x4 e alcuni 16x2; di questi ultimi ne ho diversi modelli quindi avrò un bel da fare
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 21, 2013, 10:05 pm
GRANDIOSO!!!!
Non mi sarei mai sognato di trovare tanta disponibilità.

Mi sembra che le tue siano ottime proposte che andrò ad inserire nel codice finale. Se puoi solo farmi un favore: hai detto che la ResetDisplay spegne la retroilluminazione: la "colpa" dovrebbe essere la "Buffer[num]=0" che trovi dentro la funzione. Potresti provare a commentarla e vedere se fà il reset senza interferire con la retroilluminazione? Se così fosse possiamo cancellarla. Comunque la proposta di usare una funzione "clean" apposita mi sembra ragionevole visto che deve fare un sacco di operazioni in meno.

Grazie mille, aspetto con ansia i risultati.

NB: posso citarti sul mio blog quando farà gli aggiornamenti del caso?


Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 22, 2013, 01:15 am
Ho provato due lcd 16x2 e un display 7 segmenti, per adesso tutto bene.
Domani mattina provo i caratteri custom e le cose che mi hai suggerito per il reset.
I primi test li ha superati alla grande, hai fatto un ottimo lavoro!
Per la citazione sul tuo blog non c'è problema, se vuoi ti posso anche fornire qualche immagine e gli esempi che uso per i test
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 22, 2013, 01:24 pm
Aggiornamento:
funziona tutto senza sorprese, anche il display 16x4 s'è comportato bene. Al primo tentativo le scritte sulla terza e quarta riga erano spostate a dx di 3 spazi, è bastato impostare a 2 il terzo parametro della funzione  "SetCursor" per allineare tutto.
Ho provato a cancellare i display con la funzione "ResetDisplay"; commentando "Buffer[num]=0" i display tornano vuoti e la retroilluminazione non viene alterata. Tuttavia la scritta scompare, riappare e scompare di nuovo, fa una specie di lampeggio prima di cancellare definitivamente i display.
I caratteri custom li visualizza in modo corretto.
Le funzioni che ho aggiunto non danno problemi.

Promossa a pieni voti!
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 22, 2013, 10:43 pm
Ottimo, mi fa piacere che sia funzionato tutto al primo colpo. Ora faccio qualche piccola modifica al software sulla base dei tuoi suggerimenti e aggiungo gli esempi. Se hai fatto delle foto mandamele pure che le pubblico volentieri. Sto preparando una pagina sul mio blog per tenere traccia dei vari aggiornamenti e della documentazione.

Grazie ancora.


Stefano
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 24, 2013, 12:49 am
Eccomi, scusate l'assenza ma quando faccio le notti al lavoro faccio fatica a riprendermi. Come promesso ho preparato una paginetta per mantenere gli aggiornamenti della libreria, se vi interessa la trovate qui: http://www.mcmajan.com/mcmajanwpr/?page_id=1636

Nella paginetta ho riportato lo schema di collegamento e l'elenco delle funzioni principali. Le modifiche apportate rispetto alla versione che vi ho proposto alcuni giorni fà sono:
1) Estesa la compatibilità alle vecchie IDE
2) Ho aggiunto un esempio nella cartella della libreria così è richiamabile direttamente dall'IDE
3) Aggiunta la funzione Lcd_SetFreePin(pin,valore,sr) per pilotare l'uscita dei pin 0 e 2 che restano liberi sullo shift register quando connettete un display. pin può valere 0 o 2, valore è HIGH o LOW ed sr è il numero di shift register a cui è connesso il display.
4) Per giustizia a Pelletta ho messo anche la funzione SetBackLight (occhio che la disposizione dei parametri è diversa da quella da te proposta per mantenere come standard su tutti i comandi l'uso dell'ultimo parametro per il numero di shift register; poi ho messo la L maiuscola). In realtà NON è una funzione aggiuntiva, non ho fatto altro che mettere un #define che la rimanda alla Lcd_SetFreePin, in questo modo riduco il peso della sketch.
5) Aggiunta la funzione DisplayClean(sr), l'unico parametro è lo shift register. Anche in questo caso ho sfruttato un #define per ridurre la lunghezza del codice finale.
6) Per omogeneità dei nomi delle funzioni ho modificato ResetDisplay con DisplayReset
7) Ora la DisplayReset non interferisce più con i pin 0 e 2 liberi.

Credo di aver raccolto tutti i suggerimenti, se manca qualcosa fatemi sapere. Ho già qualche idea nuova ma per qualche giorno sono impegnato....vi aggiornerò...

Stefano
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 24, 2013, 09:33 am
Gran bel lavoro, complimenti, per fare una cosa per bene metti il link anche nel primo post del Topic. Ora propongo lo spostamento in MegaTopic  ;)
Ah, una cosa ancora, il mitico Pelletta (con 2 "l") è assolutamente un LUI, niente dubbi  XD, quindi correggi appena puoi questi errori.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Aug 24, 2013, 10:05 am
Complimenti per il lavoro, karma +1  :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 24, 2013, 10:07 am

Complimenti per il lavoro, karma +1  :)

E bravo Test, mi stai facendo prendere dalla gelosia, ed io che credevo di esserti stato utile :smiley-mr-green:
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Aug 24, 2013, 10:09 am
Scusa mike, sarò ancora assonnato, si sono a letto  :) ma non riesco ad interpretare la tua risposta  :)
A cosa ti riferisci ?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Aug 24, 2013, 10:12 am
Spetta, è per il karma ?
Dei tuoi 390, 300 sono miei  :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 24, 2013, 10:24 am

Spetta, è per il karma ?
Dei tuoi 390, 300 sono miei  :)


ma che dici? ti concedo al massimo una metà dei 90 :D ma comunque scherzo; come ho sempre detto è una cosa che fa piacere ma alla quale non bado; invece curiosamente mi hanno scritto un paio di "nuovi" dicendomi di avermi dato un karma ma il contatore sembra bloccato, ho risposto di non badarci, sono stati i MOD che cercano di raggiungermi (e superarmi) e non avevano altro modo ]:D
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 24, 2013, 02:23 pm
Funziona tutto, usatela che dà molte soddisfazioni.

Ai moderatori: per me potrebbe stare benissimo nella sezione megatopic ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 24, 2013, 02:38 pm
Ai programmatori incalliti: ho fatto una prova al volo commentando tutti i vari delayMicroseconds presenti nella libreria e con 3 shift register non ho notato differenze, funziona tutto regolarmente.
Dato che sono intervalli di tempo trascurabili e lasciandoli nel codice non portano rallentamenti degni di nota, vi chiedo: sono realmente necessari?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Aug 24, 2013, 11:41 pm
Non so bene cosa sia un "MegaTopic" ma sembra una roba da fighi :-) .... scusate ma ho frequentato poco il forum per ora, ero troppo impegnato ad assorbire informazioni prima di cominciare a camminare sulle mie gambe. Pelletta.....il bello è che ho guardato bene quante doppie mettere prima di scriverlo, ma ho sbagliato ugualmente....il dubbio fra Lui o Lei deriva dal fatto che nel suo profilo ho messo "female", forse è un po' confuso :-)

Per quanto riguarda la domanda di Pelletta posso rispondere direttamente io: i "delay" che trovi sono quelli che trovi nel datasheet e che trovi anche nella LiquidCrystal (ho cambiato solo l'ultimo delay della funzione PulseEnable perchè secondo me è sbagliato). Non rispettare quei timing non significa che non funzioni, anzi, nel 90% dei casi funzionerà ugualmente (avevo già fatto dei test in proposito). Ma al variare delle condizioni di temperatura e alimentazione (oltre che display diverso) può capitare che l'eliminazione dei delay porti ad errate interpretazioni da parte dell'LCD motivo per cui non si possono cancellare. Si potrebbe fare in modo che con un #define si possa forzare il funzionamento senza delay ma è rischioso, potresti trovarti con dei malfunzionamenti saltuari di cui non riusciresti a fare un facile debug. Ovviamente se qualcuno ha idee diverse sono ben disposto ad ascoltare, ma mi sono documentato a lungo prima di scrivere la libreria in quel modo. In teoria si possono limare un po' ma avrei dovuto fare alcuni calcoli su quanto influisce il ritardo di comunicazione a causa del 74HC595, ma ho i neuroni stanchi in questo periodo :-) :-)

Grazie a tutti per il vostro supporto.

Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 25, 2013, 12:29 am

Non so bene cosa sia un "MegaTopic" ma sembra una roba da fighi :-) ....  Pelletta.....il bello è che ho guardato bene quante doppie mettere prima di scriverlo, ma ho sbagliato ugualmente....il dubbio fra Lui o Lei deriva dal fatto che nel suo profilo ho messo "female", forse è un po' confuso :-)

come come come? ma che caruccia la nostra "Budina", e dire che la credevo un'omaccione tale e quale al suo Avatar, ecco perché tanta dimestichezza con i ferri da stiro :smiley-yell: :smiley-yell: un bacetto (hihh se te vedesse papà!)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Aug 25, 2013, 12:45 am
Non ho capito se scherzate o meno, io conosco pelletta, era mia compagna di banco alle superiori,ha sempre fatto sbavare tutti i ragazzi, di nome fa Samantha
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Pelletta on Aug 25, 2013, 01:35 am
Pensavo si capisse che sono un lui, comunque nonostante i miei capelli lunghi vi garantisco che ho tutti i fuse settati in modo corretto XD

Testato, samantha è la mia sorellina gemella. Per farsi distinguere purtroppo ha dovuto radersi la barba. Ora non se la fila più nessuno

Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Aug 25, 2013, 10:28 am
:smiley-yell: :smiley-yell: :smiley-yell:
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Aug 25, 2013, 11:11 am
Se continuate a riempire 'sta discussione di spam, col cavolo che la sposto in Megatopic.. State aumentando il numero di post con bischerate apposta, vero?  ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 25, 2013, 12:07 pm
Domanda seria: ma da MOD tu non puoi ripulire un Topic dai post bischeri?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Etemenanki on Aug 25, 2013, 01:57 pm
Se non ricordo male, sulle board gestite da SMF un mod, pur avendo autorizzazioni inferiori a quelle degli admin, puo (dovrebbe poter) comunque rinominare, cancellare, spostare unire o dividere yopics, e potergli assegnare la classe "sticky" ... ovviamente dipende se i permessi per il gruppo mods sono di default ;)  

Anche in caso contrario sarebbe comunque sufficente, prima di spostarlo in megatopic, se lo decidete, chiedere agli utenti di cancellare i post che non c'entrano ...
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Aug 25, 2013, 03:50 pm
Posso cancellare post, certamente.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Aug 25, 2013, 06:51 pm

Posso cancellare post, certamente.


Quindi, se e quando si deciderà che questo Topic si può spostare, potrai fare pulizia direttamente ;) certo se li facciamo diventare centinaia giustamente ti scassi i cartoni, speriamo di aver finito, va! :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 11:50 am
Salve a tutti.
Sono molto interessato a questa libreria e faccio i complimenti all'ideatore  :D
Ho scaricato la versione 1.01 da qui (http://www.mcmajan.com/mcmajanwpr/wp-content/plugins/download-monitor/download.php?id=16) e per provarla ho utilizzato lo sketch di esempio:
Code: [Select]

#include <HC595.h>

hc595 My595(12,11,13,2); // latch,clock,data,number of 74hc595
unsigned char Leds;

void setup()
{
Leds=0;
  My595.DisplayReset(LCD595_BASIC_DISPLAY_INIT | LCD595_MORELINES ,0); // multiline display
My595.SetCursor(0,0,1,0); // cursor at 0,0, display type 1 on first 595
My595.DisplayWrite("Setup is OK...",0); // Write string
delay(1500); // waiting for...
My595.DisplayClean(0); // clear display

}

void loop()
{
  My595.SetCursor(Leds%13,Leds%2,1,0);
  My595.DisplayChar(32+Leds%96,0);
  Leds++;
  delay(800);
}


Ma durante la compilazione sono usciti una marea di errori:

Code: [Select]

/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:3: error: 'hc595' has not been declared
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:3: error: ISO C++ forbids declaration of 'hc595' with no type
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'int hc595(unsigned char, unsigned char, unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:5: error: 'latchPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:6: error: 'clockPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:7: error: 'dataPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:8: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:8: error: 'malloc' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:10: error: 'OUTPUT' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:10: error: 'pinMode' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:13: error: 'num_595' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:16: error: expected constructor, destructor, or type conversion before '::' token
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:22: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void PulseE(unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:24: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:24: error: 'LOW' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:24: error: 'bitWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:25: error: 'Send595' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:26: error: 'delayMicroseconds' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:27: error: 'HIGH' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:35: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void Send595()':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:38: error: 'latchPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:38: error: 'LOW' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:38: error: 'digitalWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'num_595' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'dataPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'clockPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'MSBFIRST' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:39: error: 'shiftOut' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:40: error: 'HIGH' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:48: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void Send595Pin(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:50: error: 'Set595Pin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:55: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void Set595Pin(bool, bool, bool, bool, bool, bool, bool, bool, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:57: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:57: error: 'bitWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:67: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void Set595Pin(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:69: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:72: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void Lcd_SetFreePin(unsigned char, bool, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:74: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:74: error: 'bitWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:79: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void DisplayReset(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:81: error: 'LCD595_BASIC_DISPLAY_INIT' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:81: error: 'LCD595_USEFONT_5X10' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:81: error: 'LCD595_MORELINES' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:83: error: 'delayMicroseconds' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:86: error: 'SetLcdPin' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:101: error: 'SendLcdCommand' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:102: error: 'LCD595_DISPLAY_ON' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:103: error: 'LCD595_DISPLAY_CLEAR' was not declared in this scope
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 11:52 am
Continuo in questo altro post perchè avevo finito i caratteri:
Code: [Select]

/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:112: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void DisplayWrite(const char*, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:114: error: 'strlen' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:116: error: 'DisplayChar' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:120: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void DisplayChar(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:123: error: 'HIGH' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:123: error: 'SetLcdRS' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:124: error: 'SetHLcd' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:126: error: 'SetLLcd' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:128: error: 'delayMicroseconds' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:131: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetLcdPin(bool, bool, bool, bool, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:133: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:133: error: 'bitWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:141: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetCursor(unsigned char, unsigned char, unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:149: error: 'SendLcdCommand' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:153: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetDDRAM_Address(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:156: error: 'SendLcdCommand' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:159: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void CreateChar(unsigned char, unsigned char*, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:162: error: 'SendLcdCommand' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:167: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SendLcdCommand(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:169: error: 'LOW' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:169: error: 'SetLcdRS' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:170: error: 'SetHLcd' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:172: error: 'SetLLcd' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:174: error: 'delayMicroseconds' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:175: error: 'LCD595_DISPLAY_CLEAR' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:175: error: 'delay' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:178: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetLcdRS(bool, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:180: error: 'Buffer' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:180: error: 'bitWrite' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:184: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetHLcd(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:186: error: 'bitRead' was not declared in this scope
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: At global scope:
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:189: error: 'hc595' is not a class or namespace
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp: In function 'void SetLLcd(unsigned char, unsigned char)':
/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:191: error: 'bitRead' was not declared in this scope


Volevo sapere se anche a qualcun altro era successa una cosa simile.
Vi ringrazio per la disponibilità.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Sep 28, 2013, 12:12 pm
ho provato a compilare anche io e non ci sono errori.
vedo che hai ubuntu, io ho rpovato su win7-64
l'ide arduinica l'hai installata manualmente ? prova a prenderla dal repository, magari linuxiani piu' esperti possono fare una controverifica, attualmente non ho macchine virtuali installate

Quote

Dimensione del file binario dello sketch: 3.360 bytes (su un massimo di 32.256 bytes)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 03:14 pm
Ho provato su Arch, con IDE 1.0.5 e toolchain Atmel.
Anche a me non compila ma si limita a questo errore:

Code: [Select]
/home/leo/sketchbook/libraries/HC595/HC595.cpp:1:19: fatal error: hc595.h: No such file or directory
compilation terminated.


Il problema nasce dalla riga indicata. Lì c'è questo codice:
Code: [Select]
#include <hc595.h>

Ma il file si chiama HC595.h, e giustamente il compilatore non trova il file. Perché su Linux i nomi dei file sono sensibili alle maiuscole e hc595.h non è lo stesso file di HC595.h

Prova quindi ad aprire il file HC595/HC595.cpp ed a cambiare quell'include mettendo
Code: [Select]
#include <HC595.h>

Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Sep 28, 2013, 05:10 pm
Domanda banale: ma l'hai copiata la libreria fra quelle di Arduino, ossia nella directory Libraries? Dagli errori sembra che non sia riuscito ad includere la libreria, in particolare quando ti dice "/home/utente/arduino-1.0.5/libraries/HC595/HC595.cpp:112: error: 'hc595' is not a class or namespace" significa che non conosce la classa hc595, motivo per cui desumo che l'inclusione non è andata a buon fine. Controlla per favore che la libreria sia insieme a tutte le altre, forse ti dico una banalità ma non so quali siano le tue conoscenze e quella è la cosa più probabile che mi viene in mente.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 05:30 pm
Intanto vi ringrazio a tutti per le celeri risposte.
Premetto subito che adesso funziona anche a me, ma mi dilungherò a raccontare come ho fatto nel caso qualcun altro avesse lo stesso problema.
La mia versione 1.0.5 non è quella dei repository.
Inizialmente ho fatto una prova con la versione 1.0 dei repository e trovato lo stesso errore di Leo72, ovvero problemi di maiuscole/minuscole.
Ho quindi creato una copia del file "HC595.h" e l'ho chiamata "hc595.h" e magicamente la versione 1.0 non dava più errori!
La versione 1.0.5 continuava però a dare quella sfilza di errori!
Ho banalmente risolto riavviando il computer :D
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Sep 28, 2013, 05:49 pm
quindi il case sensitive di linux crea librerie compatibili solo su windows, altro punto a favore per il vecchio Bill  :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 06:40 pm

altro punto a favore per il vecchio Bill  :)


Non ti permettere sai ]:)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Sep 28, 2013, 07:13 pm
...ok, ottimo, al più presto modifico il nome della libreria in minuscolo per evitare problemi agli utenti linux.

Grazie.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 07:22 pm
Se Windows non sa distinguere fra HC595.h e hc595.h non è un prego ma un difetto  ;)

@Gono:
io ho compilato con l'IDE 1.0.5 senza problemi.
Se tu hai fatto la copia del file ad IDE aperto, è l'IDE che non ha ricaricato il nuovo file e continuava ad avere in memoria quello vecchio. Dovevi chiedere e riaprire l'IDE, non serviva riavviare il sistema  :smiley-sweat:
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 07:32 pm

io ho compilato con l'IDE 1.0.5 senza problemi.
Se tu hai fatto la copia del file ad IDE aperto, è l'IDE che non ha ricaricato il nuovo file e continuava ad avere in memoria quello vecchio. Dovevi chiedere e riaprire l'IDE, non serviva riavviare il sistema  :smiley-sweat:


Ti posso assicurare di aver chiuso l'IDE 1.0.5 più di una volta con esito negativo. Ho dovuto proprio riavviare il sistema! Se devo essere sincero anche a me pare strana la cosa.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 07:35 pm
NOn so che dirti. Probabilmente c'era qualche altro problema perché, come vedi, il messaggio di errore che ho avuto io era di 1 unica riga e completamente diverso dal tuo. A te diceva che non riconosceva hc595 come classe o namespace. Ma avevi editato il file, per caso, nel tentativo di sistemare il problema?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: testato on Sep 28, 2013, 07:41 pm

Se Windows non sa distinguere fra HC595.h e hc595.h non è un prego ma un difetto  ;)

e' tutto soggettivo, in questo caso ha vinto windows  :)
Ma che tu sappia e' stata una scelta di Bill o un limite ereditato dal passato ?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: Gono on Sep 28, 2013, 07:42 pm
Il file non lo avevo toccato. Comunque l'importante è che funzioni  :)
Molto probabilmente mi si era impallato qualcosa da me.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 07:55 pm


Se Windows non sa distinguere fra HC595.h e hc595.h non è un prego ma un difetto  ;)

e' tutto soggettivo, in questo caso ha vinto windows  :)

Posso pubblicare questo commento sotto licenza CC SA-BY-NC oppure preferisci la GPL3.0?  ;)

Quote

Ma che tu sappia e' stata una scelta di Bill o un limite ereditato dal passato ?

Deriva dal vecchio DOS, neanch'esso faceva distinzione fra maiuscole e minuscole.
Mentre Linux, che appartiene alla famiglia *nix, ha nel suo DNA questa cosa.
Che è più giusta, perché se ci fai caso anche molti linguaggi di programmazione fanno distinzione fra lettere minuscole e maiuscole.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: gpb01 on Sep 28, 2013, 08:21 pm

[OT] ... su Mac, quando formatti un disco, puoi dirgli se il filesystem è case-sensitive o meno. Quasi tutti lo fanno NON case-sensitive.[/OT]

Guglielmo
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 08:23 pm


[OT] ... su Mac, quando formatti un disco, puoi dirgli se il filesystem è case-sensitive o meno. Quasi tutti lo fanno NON case-sensitive.[/OT]

Guglielmo

Secondo me è sbagliato.
Se ho 2 programmi, uno che si chiama mioprogramma, ed uno che si chiama mioProgramma, posso tenerli entrambi.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: gpb01 on Sep 28, 2013, 08:45 pm


[OT] ... su Mac, quando formatti un disco, puoi dirgli se il filesystem è case-sensitive o meno. Quasi tutti lo fanno NON case-sensitive.[/OT]

Secondo me è sbagliato.
Se ho 2 programmi, uno che si chiama mioprogramma, ed uno che si chiama mioProgramma, posso tenerli entrambi.


... mah ... non credo che una scelta sia migliore dell'altra, essenzialmente è... questione di abitudine ;)

Se vieni da Linux lo metterai case-sensitive, se vieni da Win, sicuramente no ...

Guglielmo

P.S. : è vero, potresti averli entrambi, ma non dirmi che non creano confusione ... ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Sep 28, 2013, 09:20 pm
E' vero che si crea confusione ma poi i programmatori prendono brutte abitudini, come nel caso della lib chiamata HC595.cpp e poi inclusa come hc595.cpp.  ;)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 03, 2013, 10:41 pm
In realtà in c/cpp non vai certo ad includere hc595.cpp, semmai hc595.h, ma l'ambiente di sviluppo Arduino porta alcune semplificazioni fra le quali la direttiva include che non funziona in modo identico a quanto avviene in c/c++ tant'è che il file incluso compare magicamente nella linea di comando. Questa è la prima libreria che scrivo per Arduino per cui posso fare degli "errori di gioventù", davo per scontato che l'ide di Arduino non fosse "case sensitive". La prossima release è comunque tutto in minuscolo.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Oct 04, 2013, 09:44 am

In realtà in c/cpp non vai certo ad includere hc595.cpp, semmai hc595.h,

Svista mia.

Quote

Questa è la prima libreria che scrivo per Arduino per cui posso fare degli "errori di gioventù",

Nessuno ti ha fatto un processo  ;)
La mia era una battuta, ho messo un'emoticon a sottolineare la cosa  :P

Quote

davo per scontato che l'ide di Arduino non fosse "case sensitive". La prossima release è comunque tutto in minuscolo.

E' anche il SO che è case sentivite, siccome Arduino ha un'IDE multipiattaforma devi pensare che altri SO si comportino in modo diverso del tuo.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: lexip on Oct 06, 2013, 12:06 pm
Ciao smania2000,
complimenti per il lavoro... ti assicuro che a brevissimo la proverò nel mio progetto "centralina acquario". Nel progetto ho fatto uso degli shift ed ho collegato, in quanto non era possibile fare diversamente, due shift collegati a rispettivi 3 pin di Arduino. Uno shift gestisce LCD l'altro le uscite per la scheda a relè. Con la tua Libreria, potrei sviluppare una nuova versione della centralina (a breve avrò due acquari) e risparmiare pin preziosi! In teoria dovrei risparmiare qualcosina in termini di memorie dato che farò uso di una sola libreria... speriamo...

grazie ancora
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: LeonidRusnac on Oct 06, 2013, 05:00 pm
ciao, oggi ho dato un'occhiata alla libreria in quanto voglio scrivermi una cosa simile per il mio progetto, sempre per dei 74hc595 solo che senza display, devo dire che hai fatto un bel lavoro ma volevo chiedere un paio di cose:
- da quanto ne so io, fare un digitalWrite è abbastanza complesso per l'arduino, non sarebbe meglio agire direttamente sul portb? quindi con bitSet(PortB, arduinoPin-8)
- stessa roba per la funzione ShiftOut, non sarebbe meglio gestirla più a basso livello la comunicazione SPI?

alla fine so che magari non ci sono differenze però se bisogna mettere tanti shift registers in serie inizia ad essere  un po pesante

P.S. prendilo come una mia riflessione personale sul possibile miglioramento della libreria :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 06, 2013, 08:11 pm
Eccomi qui, rispondo a tutti insieme:
@Leo72: tranquillo, non mi sento sotto processo, anzi, ho visto il tuo blog, d'ora in avanti quando mi vedranno ridere da solo sarà perchè ripenso alla "Sindrome di Gundam"....son ancora qui che mi spancio dalle risate. Per quanto riguarda Linux nel mio blog trovi articoli di programmazione multiplatform, per cui so benissimo che è case sensitive, come tutti gli OS tranne win  :smiley-eek: Mi aspettavo però che l'IDE di Arduino fosse in grado di "correggere" il nome del file proprio perchè è multiplatform, infatti se pensi la cosa all'inverso potresti fare due librerie simili, una in maiuscolo ed una in minuscolo che però su win non funzionerebbero (in realtà non potresti nemmeno metterle sulla stessa cartella per cui in realtà il problema non sussiste  :~). Posso chiederti che plugin di wp hai usato per gli articoli in 2 lingue sul tuo blog?
@Lexip: Facci sapere come va, magari a progetto finito una bella foto dell'acquario la puoi condividere con tutti noi.
@LeonidRusnac: Tranquillo, io prendo in considerazione i suggerimenti di tutti, il bello di essere una cominità è proprio quello di poter condividere iddee, esperienza, capacità. Per quanto riguarda il settaggio diretto delle porte è vero e sbagliato nello stesso tempo. Proprio ieri ho letto l'articolo sul blog di Leo72 il suo articolo su questo argomento il che mi ha spinto a pensare un po'. La gestione diretta delle porte hai i suoi vantaggi in termini prestazionali, specialmente nelle applicazioni più critiche, ma una libreria deve funzionare su QUALUNQUE scheda Arduino per cui io devo essere sicuro che quel che facciamo con la Uno funzioni anche sulla Due, la Tre e la Yun. Ma siamo sicuri che la mappatura di quelle schede e delle future funzionino allo stesso modo? Poi uno dei vantaggi della mia libreria è la possibilità di scegliere qualunque pin della scheda, ma un utente potrebbe scegliere un pin su una porta e un'altro su un'altra per cui la gestione del software diventa un po' complessa. Arduino nella digitalWrite usa delle funzioni di più basso livello per mappare porta e bit relativi ad uno specifico pin di ogni scheda supportata per cui ho provato a scrivere una funzione simile alla digitalWrite, ma che non perde tempo a disattivare il pwm e non si dilunga a disattivare e poi riattivare gli interrupt. Purtroppo però la mia libreria ha solo 2 chiamate alla digitalWrite per cui il risultato finale è che la sketch occupa più spazio, mentre non ho ancora fatto test di velocità che farò nei prossimi giorni. Per quanto riguarda invece la ShiftOut non ho ancora visto com'è implementata, appena ho un attimo verifico se ci sono margini di miglioramento. Io uso una funzione sostitutiva ma che opera su buffers multibyte che utilizzo in una versione della IR-remote che sto ampiamente modificando, potrei eventualmente usare quella ma devo fare delle prove....vi aggiornerò....
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Oct 06, 2013, 10:07 pm

@Leo72:
Posso chiederti che plugin di wp hai usato per gli articoli in 2 lingue sul tuo blog?


E' qTranslate.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: fiodavid on Oct 07, 2013, 11:12 am
Ciao,

complimenti per la libreria; al momento gli ho dato un occhio veloce e la trovo molto interessante.
Volevo chiederti una cosa in merito; vorrei realizzare una matrice a led modulare con arduino 1 rev3, e volevo sapere se con la tua libreria e aggiungendo degli shift register 74HC595 posso farlo.

Grazie per la risposta

Ciao
fiodavid
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 07, 2013, 04:11 pm

E' qTranslate.

Grazie 1000 Leo72!

@fiodavid: certo che puoi farlo, MA non ti bastano i 74HC595 perchè non erogano sufficiente corrente per "tener su" tutti i LED. Se guardi nel mio blog c'è scritto come usare in accoppiata gli ULN2803A, alternativamente esistono led-drivers specifici per il pilotaggio di LED ma sinceramente è una materia in cui non mi sono mai inoltrato ma credo che su questo forum troverai tutte le informazioni di cui hai bisogno.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 07, 2013, 11:58 pm
Come vi avevo promesso ho fatto dei test per vedere se è possibile incrementare ulteriormente la velocità della libreria, anche se francamente dai test che avevo fatto non ne sentivo il bisogno.
Come test ho usato l'esempio incluso nella libreria che non fa altro che settare il cursore e scrivere un carattere su un display lcd ad ogni ciclo. Senza fare alcuna modifica, con la libreria così come la trovate in rete, ho ottenuto un tempo di esecuzione di 7268 microsecondi. Andando a modificare la Send595 affinchè non usi la digitalWrite ma, come vi accennavo, una versione modificata che ignora la disattivazione del pwm e la disattivazione / riattivazione degli interrupt, ottengo 7244microsecondi. Un ulteriore miglioramento è ottenibile con la manipolazione diretta delle porte (7192us) , ma come vi dicevo in un post precedente andrei a perdere la possibilità di usare qualunque pin e la certezza di compatibilità con schede più sofisticate / recenti della Uno. A questo punto ho creato una versione modificata della ShiftOut che si affida alla digitalWrite modificata. Il risultato è notevole, il tempo di esecuzione scende a 4984 con un miglioramento prestazionale di circa il 30%.
Visto il risultato a breve avrete una nuova versione della libreria ed una piccola grande sorpresa a cui ho pensato, ma mi ci vuole qualche giorno per scrivere il codice e verificare che tutto funzioni a dovere.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 13, 2013, 12:36 pm
Dopo un duro lavoro di ottimizzazioni eccomi qui con la nuova implementazione della mia libreria. Come detto nei precedenti post ho lavorato, grazie ai vostri consigli, sull'ottimizzazione della velocità e devo dire la verità che con l'uso dei display la differenza è notevole. C'è però una scelta da fare che volevo discutere con tutti voi. Ho infatti lavorato su due versioni distinte, non perchè sia impazzito, ma perchè ad un certo punto del lavoro ho notato che introducendo ulteriori ottimizzazioni del codice cpp, la velocità complessiva della sketch diminuiva invece che aumentare. Ho perciò pensato che fosse un problema dovuto all'incapacità del compilatore ad ottimizzare correttamente il codice cpp per cui ho scitto anche una versione in C che come presunto si è dimostrata più veloce. Ma non basta. Oltre ad usare i due linguaggi, ho usato sia codice ottimizzato all'interno della libreria, sia mi sono appoggiato ad una nuova microlibreria scritta apposta per l'occasione. Questa seconda opzione ha ovviamente il vantaggio di essere utilizzabile in qualsiasi altra vostra sketch o libreria. In entrambi i casi NON ho gestito in modo diretto le porte ma ho sfruttato le funzioni di basso livello di Arduino digitalPinToBitMask e portOutputRegister che sicuramente non permettono di raggiungere le massime velocità possibili ma dovrebbero garantire totale compatibilità con qualunque clone Arduino.
Vi riporto qui sotto le due sketch d'esempio, la prima in cpp, la seconda in c. La libreia Memoryfree che vedete mi serve solo a calcolare la memoria residua della Uno per ottimizzare anche quell'aspetto
Code: [Select]
// versione scritta in Cpp

#include <FastArduino.h>
#include <hc595.h>
#include <MemoryFree.h>

unsigned char Leds;
unsigned long time1,time2;

hc595 My595(12,11,13,2); // latch,clock,data,number of 74hc595


void setup()
{
Leds=0;
 My595.DisplayReset(LCD595_BASIC_DISPLAY_INIT | LCD595_MORELINES ,0); // multiline display
My595.SetCursor(0,0,1,0); // cursor at 0,0, display type 1 on first 595
My595.DisplayWrite("Setup is OK...",0); // Write string
delay(1500); // waiting for...
My595.DisplayClean(0); // clear display
Serial.begin(9600);
}

void loop()
{
   time1 = micros();
 My595.SetCursor(Leds%13,Leds%2,1,0);
 My595.DisplayChar(32+Leds%96,0);
  time2 = micros();

 Serial.println(time2-time1);
  Serial.print("freeMemory()=");
 Serial.println(freeMemory());
 Leds++;
 delay(500);
}


Code: [Select]
// versione scritta in C
#include <FastArduino.h>
#include <hc595c.h>
#include <MemoryFree.h>

unsigned char Leds;
unsigned long time1,time2;

void setup()
{
hc595_hc595(12,11,13,2); // latch,clock,data,number of 74hc595
Leds=0;
hc595_DisplayReset(LCD595_BASIC_DISPLAY_INIT | LCD595_MORELINES ,0); // multiline display
hc595_SetCursor(0,0,1,0); // cursor at 0,0, display type 1 on first 595
hc595_DisplayWrite("Setup is OK...",0); // Write string
delay(1500); // waiting for...
hc595_DisplayClean(0); // clear display
Serial.begin(9600);


}

void loop()
{
   time1 = micros();
 hc595_SetCursor(Leds%13,Leds%2,1,0);
 hc595_DisplayChar(32+Leds%96,0);
  time2 = micros();

 Serial.println(time2-time1);
  Serial.print("freeMemory()=");
 Serial.println(freeMemory());
 Leds++;
 delay(500);
}


I risultati che ho ottenuto sono i seguenti:
Con codice ottimizzato all'interno della libreria hc595:
C       -len: 5178- speed: 4864- ram: 1763 (aggiornato dopo aver postato)
CPP - len: 5474 - speed: 5180- ram: 1761

e con libreria esterna FastArduino:
C   -    len: 5378 - speed: 4908- ram: 1763
CPP - len: 5670 - speed: 4932- ram: 1761

Con len si intende la lunghezza della sketch, speed i microsecondi medi per l'esecuzione e ram la memoria disponibile. L'utilizzo della ram risulta sostanzialmente uguale nelle varie "incarnazioni". Per quanto riguarda la grandezza della sketck in entrambi i casi la scrittura in C fa risparmiare circa 290 bytes ed altri 200 vengono risparmiati passando dall'uso della libreria esterna al codice bulti-in. L'estremo massimo si ha dalla scrittura in cpp con libreria esterna, al codice C builtin con risparmio di 480 bytes.
Anche la velocità di esecuzione porta ad alcune riflessioni. La versione in C è sempre la più veloce ed il codice built-in ottimizzato è di quasi l'1% più veloce rispetto alla libreria esterna. Usando il cpp invece si ha lo strano fenomeno che vi descrivevo all'inizio, ossia l'uso della libreria esterna MENO ottimizzata è paradossalmente più veloce di quasi il 5% nonostante il maggior numero di chiamate a funzioni e calcoli da eseguire. L'unica spiegazione che ho è appunto la scarsa capacità del compilatore ad ottimizzare il codice cpp rispetto il codice c puro, infatti se guardiamo la sola versione con codice built-in in cui il codice è fortemente più ottimizzato, vediamo che il divario fra la versione c e cpp è nettamente più marcato passando da meno dello 0.5% a quasi il 6%.
Dopo questa lunghissima ma necessaria introduzione la domanda è: che libreia terreste? Qualla in C con codice builtin o quella cpp con libreria esterna? Rispetto alla sketch d'esempio, la prima è dell'1% più veloce, fa risparmiare 480bytes in flash e 2 in ram, la seconda è leggermente più lenta, occupa più spazio in sketch ma essendo in cpp è più semplice da gestire / mantenere e si basa su una libreiria esterna su cui possiamo basare anche altre sketch che necessitino di un aumento prestazionale senza rischiare di pregiudicare la compatibilità con altre schede.
Voi cosa scegliereste?
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Oct 13, 2013, 03:33 pm
Atroce dubbio... l'ho vissuto anch'io durante lo sviluppo del leOS.
Quei (pochi) utenti avanzati che l'hanno provata mi hanno suggerito forti trasformazioni verso il lato OOP che in parte ho implementato ed in parte no perché usando in modo intensivo gli oggetti e tutto il supporto offerto dal C++ arrivavo ad avere una libreria più semplice da gestire lato utente, sicuramente più "advanced" a livello di codice ma senz'altro più pesa.
Gli Atmel, come molte MCU ad 8 bit, sono ottimizzati per il C.

La scelta è doppia: o lasci la lib in C++ senza sfruttare però troppo le caratteristiche di questo linguaggio, ottenendo quindi un bilancio fra velocità ed occupazione di codice medio, ma rendendo la lib più agevole da gestire agli utenti (considerando che la stragrande maggioranza delle lib per Arduino è scritta in C++ e che quindi sono già abituati ad includere una lib e ad istanziarla) oppure ti appoggi al C, sfruttandone i vantaggi in termini di peso/prestazioni, richiedendo però all'utente un pò di impegno in più per gestirla.

Uh... bella scelta...  :smiley-sweat:
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 18, 2013, 03:45 pm
Ehi ragazzi non scannatevi a rispondere....se non fosse per Leo72 mi farei le domande e darei le risposte da solo :-) Comunque sia ho preso una decisione. Sono riuscito a spingere ancora un po' le prestazioni del codice cpp per cui alla fine la libreria resta per l'utente sostanzialmente identica, in più avete una libreria nuova chiamata FastArduino in cui avete le due funzioni FastdigitalWrite e FastshiftOut che funzionano allo stesso modo delle funzioni Arduino originali ma sono più veloci. Dettagli maggiori li trovate nel sito dove potete scaricare e testare la nuova versione.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: PaoloP on Oct 18, 2013, 05:19 pm
Libreria molto interessante.  ;)
Hai provato ad associarla alla classe print per sfruttarne i metodi come fanno le classiche librerie per LCD?
Anche perché il quel modo, a parte l'istanza di classe, il codice sarebbe riusabile anche se si cambi metodo di collegamento del display.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: LeonidRusnac on Oct 18, 2013, 11:32 pm
scusa la mia assenza dopo aver postato la domande per le prestazioni, pensavo fosse attivo il Notify ma invece non lo era, comunque, secondo me è meglio lasciare la versione C++ (come hai già fatto) in quanto arduino viene usato da tanti che di programmazione ne sanno abbastanza poco ed è più facile gestirla a livello di OOP

P.S: gentilmente, se puoi e se non hai ancora cancellato la versione c, mi invieresti una copia? giusto per prendere spunto, questi giorni sono abbastanza impegnato e non sono riuscito ad andare avanti con il mio progetto e se avrei qualche spunto su come velocizzare la comunicazione spi sarei molto felice, ti ringrazio anticipatamente :)
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 19, 2013, 09:34 pm
Recuperata appena in tempo dal cestino   :D. Qui non mi pare ci sia qualche pulsantino per mettere allegati, ma se mi passi una mail ti invio la libreria in C. Mentre scrivevo ho fatto dei test in quanto volevo rispondere anche a PaoloP. Quel che volevo dire era che l'uso della print avrebbe rallentato la mia libreria e che comunque derivando la classe era possibile eseguire comunque tale operazione. A questo punto ho fatto dei test e mi accorgo che la Liquidcrystal segnava dei tempi migliori rispetto alla mia libreria, anche se non di tantissimo. Ho fatto un'analisi del codice e mi sono accorto di un baco da principiante, in un pezzo di codice ho scambiato nanosecondi con microsecondi :~ . Messo a posto il baco la mia libreria è diventata più veloce di 4 volte diventando 3 volte più veloce della LiquidCrystal. A questo punto due considerazioni: per LeonidRusnac puoi tranquillamente usare la versione in cpp che rispetto allla prima versione scritta è 7 volte più veloce ed annulla tutti i deficit prestazionali rispetto alla versione C. Per PaoloP se ti servono funzioni aggiuntive dovrebbe essere sufficiente creare una classa derivata, appena ho un attimo comunque faccio dei test così magari scrivo una sketch d'esempio per mostrare come fare.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: PaoloP on Oct 19, 2013, 10:45 pm

Qui non mi pare ci sia qualche pulsantino per mettere allegati

Punto 8 -->  http://forum.arduino.cc//index.php?topic=149082.0
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Oct 19, 2013, 11:23 pm
:D :D :D :D   ....si vede vero che non ho scritto molto sul forum ? Allora allego qui la versione in C, tenete conto che l'ho presa nel cestino così com'era
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: LeonidRusnac on Oct 20, 2013, 12:12 am
Grazie mille :)
Title: Trovato bug....piccolo work aroung
Post by: smania2000 on Apr 04, 2014, 06:11 pm
Ciao ragazzi. Dall'ultima volta ci sono stati numerosi sviluppi ma non vi voglio annoiare con quelli, li trovate sul mio blog. Volevo segnalare che l'utente ogrenero ha individuato un problema con la IDE 1.5.5-r2, nello specifico non gli comparivano gli esempi della SS_hc595 e cercando di importare la libreria con l'apposita funzione gli compariva il messaggio "Trovata libreria non valida in C:\Program Files (x86)\Arduino\libraries\Ss_hc595: Missing 'architectures' from library". Ho indagato brevemente. La causa è il file library.properties che trovate nella relativa cartella.
Devo indagare sull'esatta origine del problema, comunque un semplice Work-around per sistemare il problema è cancellare quel file. Nel frattempo cercherò di capire la causa del problema.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: menniti on Apr 04, 2014, 07:58 pm
Ciao, forse sarebbe bene segnalare questa cosa nel Topic di PaoloP in cui si parla specificatamente della versione 1.5.x ed è tenuto costantemente aggiornato, magari qualcuno potrebbe decidere di segnalare la cosa agli sviluppatori. Grazie.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: smania2000 on Apr 04, 2014, 10:44 pm
Ho fatto come mi hai suggerito, prima però ho fatto delle prove per vedere se scoprivo la causa ma per ora nulla di fatto. E' comunque utile sapere che se qualcuno incorre nello stesso problema, anche con altre librerie, basta eliminare il file library.properties.
Title: Re: Nuova libreria 74HC595 per controllo display LCD ed uscite digitali
Post by: leo72 on Apr 05, 2014, 07:15 am
Credo dipenda dal fatto che il ramo 1.5.x è sotto pesante sviluppo e le specifiche cambiano anche radicalmente da rilascio a rilascio.
Ti quoto questo, preso dal changelog dell'IDE 1.5:
Quote

ARDUINO 1.5.5 BETA 2013.11.28

NOTICE:
The 1.5 library format is under heavy review on the Arduino Developers mailing list.
We suggest to delay the adoption of the new format until a stable 1.5.x is released.

Il formato delle librerie, a partire dalla 1.5.5 è oggetto di cambiamento (la R2 è solo un rilascio per correggere un problema con i driver certificati per Windows).