Pages: [1] 2   Go Down
Author Topic: Spiegazione semplice Maxim 7219 + Display 7 segmenti  (Read 1741 times)
0 Members and 1 Guest are viewing this topic.
Quartu Sant'Elena, Sardinia, Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti consiglio di studiarti a fondo questo:
http://playground.arduino.cc/Main/MAX72XXHardware
Logged


Quartu Sant'Elena, Sardinia, Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Controllare il MAX7219 non è difficile ma usare una libreria semplifica le cose.
http://playground.arduino.cc//Main/LedControl

Riducendo 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 Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tra i tanti codici che ho provato questo sembra il più vicino al mio livello, però ho dei problemi con la libreria
Code:
// 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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E dove l'hai installata la libreria?
L'hai copiata dentro /sketchbook/libraries?
Logged


Quartu Sant'Elena, Sardinia, Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink

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 Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-roll-sweat
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-roll-sweat
Ed i tuoi progetti dove stavano?  smiley-razz
Logged


Quartu Sant'Elena, Sardinia, Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 89
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
//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
Code:
//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 Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

x iscrizione

vorrei fare qualcosa con il max ed una matrice 64 led, magari posso contribuire ma non so quando, la cina e' lontana  smiley
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non capisco perchè la cifra lampeggi nonostante abbia modificato i delay
Che intendi per lampeggiare? Con che frequenza?
Logged


Pages: [1] 2   Go Up
Jump to: