Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« on: December 17, 2012, 03:04:35 pm » |
Salve a tutti, come anticipato tempo fa nella presentazione non sono un esperto di elettronica ma ho una gran voglia di imparare, attualmente mi sto cimentando in un progetto che mi permetta di capire e controllare il funzionamento di tre display 7 segmenti a catodo comune tramite l'integrato max7219. Vorrei capire come l'arduino comunica con l'integrato così da poter poi provare a fare qualche semplice sketch per conto mio
Ho cercato di informarmi su vari siti e controllando datasheet e progetti di altri, ma mi sono reso conto che spesso si danno molte cose per scontate, mentre per me, essendo totalmente autodidatta in materia, non lo sono affatto ( e spesso, pur provando a ricostruire i stessi circuiti e gli stessi sketch, ho problemi nella compilazione che non so come risolvere).
Capisco che possa sembrare una scocciatura, ma avrei proprio bisogno di una spiegazione su come programmare l'arduino Grazie e scusate ancora
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #1 on: December 17, 2012, 05:07:52 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #2 on: December 17, 2012, 05:35:42 pm » |
Ti ringrazio della risposta, in effetti mi sto rendendo conto del fatto che questo progetto mi costringe a fare un "salto" rispetto ai miei soliti progetti che non utilizzano linee di clock, dati, ecc... che molto in astratto ho comunque idea di come funzionino
Più che altro vorrei capire il funzionamento di queste trasmissioni e il modo di utilizzarle con arduino, ma cercherò di fare un passo alla volta
Forse mi pongo in maniera sbagliata o forse mi mancano le basi, ma trovo un bel pò di difficoltà, magari domani posto uno schema dei collegamenti e degli errori che ho trovato durante la compilazione di uno sketch trovato in rete
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #3 on: December 18, 2012, 03:02:39 am » |
Controllare il MAX7219 non è difficile ma usare una libreria semplifica le cose. http://playground.arduino.cc//Main/LedControlRiducendo all'osso, servono 3 pin per comandare il MAX7219: Din, Clock e Load Su Din viaggiano i dati in formato seriale, ossia 1 bit alla volta (segnale HIGH per 1 logico, segnale LOW per 0 logico); su Clock il segnale di sincronizzazione affinché il MAX7219 sappia che un nuovo dato è fornito sulla linea Din. E poi Load, che dice al MAX7219 di caricare i dati letti sui pin esterni. Qui trovi un codice che fa tutto da sé, senza librerie: http://playground.arduino.cc/LEDMatrix/Max7219
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #4 on: December 18, 2012, 07:52:26 am » |
grazie, l'ultimo codice mi sembra ben commentato, dopo me lo spulcio per bene. Grazie anche per la spiegazione dei pin load, clock e din!
P.S. purtroppo ancora nessun risultato, dopo proverò a cambiare collegamenti
|
|
|
|
« Last Edit: December 18, 2012, 08:02:04 am by Aledexter »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #5 on: December 18, 2012, 09:03:56 am » |
grazie, l'ultimo codice mi sembra ben commentato, dopo me lo spulcio per bene. Grazie anche per la spiegazione dei pin load, clock e din!
P.S. purtroppo ancora nessun risultato, dopo proverò a cambiare collegamenti
Ricontrolla. Se hai problemi, pubblica lo schema che stai usando e lo sketch.
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #6 on: December 18, 2012, 10:09:48 am » |
tra i tanti codici che ho provato questo sembra il più vicino al mio livello, però ho dei problemi con la libreria // include the library for MAX72XX #include "LedControl.h"
LedControl lc=LedControl(12,11,10,1); unsigned long delaytime=200;// v*75 void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness to a medium values */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); } void loop() { // start with up direction "UP" lc.setRow(0,1,B0111110); // "U" lc.setChar(0,0,'p',false); delay(1700); for (int v = 0; v < 100; v++){ printNumber(v); // call printNumber function delay (delaytime); } // have a break and count down "dn" delay(1700); lc.setRow(0,1,B0111101); lc.setRow(0,0,B0010101); delay(2000); for (int v = 99; v > -1 ; v = v--){ printNumber(v); // call function delay (delaytime); } }
// function to send digits to 7 seg led
void printNumber(int v) { int ones; int tens; boolean zero; if(v < 0 || v > 99) return; ones=v%10; v=v/10; tens=v%10; v=v/10; lc.setDigit(0,1,(byte)tens,false); lc.setDigit(0,0,(byte)ones,false); }
l'ho trovato sempre qui sul forum, però al momento della compilazione mi dà questi errori: sketch_dec18g.ino:2:24: error: LedControl.h: No such file or directory sketch_dec18g:4: error: 'LedControl' does not name a type sketch_dec18g.ino: In function 'void setup()': sketch_dec18g:11: error: 'lc' was not declared in this scope sketch_dec18g.ino: In function 'void loop()': sketch_dec18g:20: error: 'lc' was not declared in this scope sketch_dec18g.ino: In function 'void printNumber(int)': sketch_dec18g:51: error: 'lc' was not declared in this scope devo aver fatto qualche errore con la libreria, mi sembra di capire che non la riconosce
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #7 on: December 18, 2012, 11:47:24 am » |
E dove l'hai installata la libreria? L'hai copiata dentro /sketchbook/libraries?
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #8 on: December 18, 2012, 12:11:58 pm » |
si, non ho la cartella sketchbook, ma ho la cartella libraries in cui sono presenti tutte le librerie di default. Lì ho messo la cartella ledcontrol in cui sono presenti tra gli altri i file .h e .cpp
P.S. ho risolto il problema libreria ri-scaricandola e scompattandola con "estrai qui" dopo aver inserito l'archivio rar nella cartella libraries, per chi avesse lo stesso problema su windows
|
|
|
|
« Last Edit: December 18, 2012, 04:26:02 pm by Aledexter »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #9 on: December 18, 2012, 04:27:27 pm » |
Normalmente è bene non mettere le librerie scaricate dentro a /arduino-1.0.x/libraries perché se cambi versione dell'IDE o la disinstalli, perdi tutto  Ecco perché ti ho suggerito di metterla nella cartella /libraries contenuta nella tua cartella degli sketch (apri File/Preferenze per vedere qual'è, cambia da SO a SO). Se non ce l'hai, creala. Una volta creata, salva la lib lì dentro. Il percorso dei file .h/.cpp deve a questo punto essere questo: /cartella_degli_sketc/libraries/nome_libreria/file .cpp/.h Se hai qualcosa in più nel mezzo fra nome_libreria e file .cpp/.h la libreria non viene riconosciuta. Se il nome dei file .h e .cpp principali non coincide con il nome della cartella, la libreria non viene riconosciuta
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #10 on: December 18, 2012, 04:42:29 pm » |
Acc... si vede che sono agli inizi, non sapevo si creasse una cartella di Arduino nei Documenti, ad essere sincero pensavo che funzionasse tutto attraverso la cartella che ho sul desktop che contiene l' IDE così come scaricato dalla homepage 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #11 on: December 18, 2012, 05:53:13 pm » |
Acc... si vede che sono agli inizi, non sapevo si creasse una cartella di Arduino nei Documenti, ad essere sincero pensavo che funzionasse tutto attraverso la cartella che ho sul desktop che contiene l' IDE così come scaricato dalla homepage  Ed i tuoi progetti dove stavano? 
|
|
|
|
|
Logged
|
|
|
|
|
Quartu Sant'Elena, Sardinia, Italy
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #12 on: December 19, 2012, 04:40:56 am » |
si venivano salvati lì, però li ho sempre caricati direttamente dall'ide, quindi non mi ero posto il problema, anche perchè usando questo pc che è di mio padre cerco di tenere i miei file su un lato del desktop per non mischiarli neanche visivamente con i suoi comunque ho fatto un piccolo passo in avanti, per un istante, quando faccio partire il programma, il punto del display centrale si accende, proverò a cambiare i collegamenti dei digit (i gnd dei display giusto?) del max Aggiornamento: Sono riuscito ad accenderli! Ho usato questo codice //We always have to include the library #include "LedControl.h"
/* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ LedControl lc=LedControl(12,11,10,1);
/* we always wait a bit between updates of the display */ unsigned long delaytime=250;
void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness to a medium values */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); }
/* This method will display the characters for the word "Arduino" one after the other on digit 0. */ void writeArduinoOn7Segment() { lc.setChar(0,0,'a',false); delay(delaytime); lc.setRow(0,0,0x05); delay(delaytime); lc.setChar(0,0,'d',false); delay(delaytime); lc.setRow(0,0,0x1c); delay(delaytime); lc.setRow(0,0,B00010000); delay(delaytime); lc.setRow(0,0,0x15); delay(delaytime); lc.setRow(0,0,0x1D); delay(delaytime); lc.clearDisplay(0); delay(delaytime); }
/* This method will scroll all the hexa-decimal numbers and letters on the display. You will need at least four 7-Segment digits. otherwise it won't really look that good. */ void scrollDigits() { for(int i=0;i<13;i++) { lc.setDigit(0,3,i,false); lc.setDigit(0,2,i+1,false); lc.setDigit(0,1,i+2,false); lc.setDigit(0,0,i+3,false); delay(delaytime); } lc.clearDisplay(0); delay(delaytime); }
void loop() { writeArduinoOn7Segment(); scrollDigits(); }
anche se ho notato che ruotando il resistore lineare che ho collegato al gnd del maxim si modifica la velocità e un attimo dopo si interrompe la "riproduzione" e devo resettare l'arduino per farlo riprendere. Per ora si accendono i display ma vengono visualizzati simboli senza senso che cambiano a velocità elevata credo che, oltre a dedicare del tempo allo sketch, il problema risieda nei digit che ora come ora sono collegati senza tenere conto dell'ordine p.s. sto cominciando a sospettare di avere dei contatti allentati nella breadboard Aggiornamento2: ho tolto tutti i contatti di due display e mi sono dedicato ad uno solo, ho sostituito il resistore lineare con uno fisso, ho modificato i collegamenti sui pin segmento ed ora tutti i simboli sono comprensibili e corretti. sto usando una versione " mutilata" del precedente codice per fare delle semplici prove, ma non capisco perchè la cifra lampeggi nonostante abbia modificato i delay //We always have to include the library #include "LedControl.h"
/* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ LedControl lc=LedControl(12,11,10,1);
/* we always wait a bit between updates of the display */ unsigned long delaytime=1000;
void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness to a medium values */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); }
/* This method will display the characters for the word "Arduino" one after the other on digit 0. */ void writeArduinoOn7Segment() { lc.setChar(0,0,'4',false); delay(delaytime); lc.clearDisplay(0); ; }
void loop() { writeArduinoOn7Segment(); }
|
|
|
|
« Last Edit: December 19, 2012, 06:02:54 am by Aledexter »
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3898
Arduino rocks
|
 |
« Reply #13 on: December 22, 2012, 04:32:03 pm » |
x iscrizione vorrei fare qualcosa con il max ed una matrice 64 led, magari posso contribuire ma non so quando, la cina e' lontana 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #14 on: December 22, 2012, 05:17:24 pm » |
non capisco perchè la cifra lampeggi nonostante abbia modificato i delay
Che intendi per lampeggiare? Con che frequenza?
|
|
|
|
|
Logged
|
|
|
|
|
|