Pages: [1]   Go Down
Author Topic: MAX7219 + 3 display a 7 segmenti  (Read 2098 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
mi sono arrivati finalmente i max7219 che avevo ordinato e mi sono subito messo all'opera per comandare 3 display a 7 segmenti.

ho effettuato i collegamenti come indicato in questi due schiemi



il risultato? si accendono tutti i segmenti ma quando vado a comandarli con la libreria, non succede nulla.
Code:
/**************************************************************************//**
 * \brief MAX7219 library for Arduino - Demo program
 * \author Copyright (C) 2011  Julien Le Sech - www.idreammicro.com
 * \version 1.0
 * \date 20110801
 *
 * This file is part of the MAX7219 library for Arduino.
 *
 * This library is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/
 ******************************************************************************/

/**************************************************************************//**
 * \file MAX7219.pde
 ******************************************************************************/

/******************************************************************************
 * Header file inclusions.
 ******************************************************************************/

#include <WProgram.h>

#include <SPI.h>

#include <MAX7219.h>

/******************************************************************************
 * Private variable declaration.
 ******************************************************************************/

static MAX7219 max7219(10);

/******************************************************************************
 * Public function definitions.
 ******************************************************************************/

/**************************************************************************//**
 * \fn void setup()
 ******************************************************************************/
void setup()
{
    // Initiliaze MAX7219.
    max7219.initialize();
    // Set scan limit.
    max7219.setScanLimit(MAX7219::ScanLimit_Digit0To7);
     // Set decode mode.
    max7219.setDecodeMode(MAX7219::DecodeMode_AllDigits);
    // Set intensity.
    max7219.setIntensity(MAX7219::Intensity_Level15);
    // Set shutdown mode.
    max7219.setShutdownMode(MAX7219::ShutdownMode_NormalOperation);
}

/**************************************************************************//**
 * \fn void loop()
 ******************************************************************************/
void loop()
{
    // To write digit values, a loop may be more elegant but a bit more
    // complicated for this example.

    // Write digit 0 value.
    max7219.writeDigit(MAX7219::Digit_0, MAX7219::Character_Zero);
    // Write digit 1 value.
    max7219.writeDigit(MAX7219::Digit_1, MAX7219::Character_One);
    // Write digit 2 value.
    max7219.writeDigit(MAX7219::Digit_2, MAX7219::Character_Two);
    // Write digit 3 value.
    max7219.writeDigit(MAX7219::Digit_3, MAX7219::Character_Three);
    // Write digit 4 value.
    max7219.writeDigit(MAX7219::Digit_4, MAX7219::Character_Four);
    // Write digit 5 value.
    max7219.writeDigit(MAX7219::Digit_5, MAX7219::Character_Five);
    // Write digit 6 value.
    max7219.writeDigit(MAX7219::Digit_6, MAX7219::Character_Six);
    // Write digit 7 value.
    max7219.writeDigit(MAX7219::Digit_7, MAX7219::Character_Seven);

    // Wait a little before next loop.
    delay(1000);
}
ho trovato questo playground sul sto di arduino http://arduino.cc/playground/Main/MAX72XXHardware che parla di 2 condensatori e di una resistenza, secondo voi sono la causa del fatto che non mi spenge i segmenti non necessari?

grazie in anticipo
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6020
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

- gnd e' connesso a gnd arduino ?
- i display sono catodo comune ?

i due condensatori male non fanno, e fai bene a metterli, ma non credo sia questo il problema attuale.
la resistenza invece gia' e' presente, sarebbe quella che tu hai creato con le 3 in serie (30KOhm)

lo scketch che hai postato invece non mi convince, secondo me lui accende in sequenza tutti i numeri, ma a velocita' massima non essendoci delay, quindi a te sembra che siano accesi tutti 8 (otto)

metti un delay tra ogni cifra
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si massa e 5v vengono da Arduino

e i 7 segmenti sono ad anodo comune.

per quanto riguarda il codice c'era il delay alla fine della valorizzazione di tutti i digit, cmq ho provato anche con questo, ma nulla si muove, resta tutto acceso
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,'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();
}
Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho avuto il tuo stesso problema (tutto acceso) con una matrice 8x8, ho dovuto invertire colonne e righe e poi andava (avevo una matrice strana diversa dalle 8x8 standard) quindi prova anche a invertire, non si brucia nulla.

ero arrivato a pensare di avere dei max7219 farlocchi... invece erano solo sbagliati i collegamenti ai led
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho avuto il tuo stesso problema (tutto acceso) con una matrice 8x8, ho dovuto invertire colonne e righe e poi andava (avevo una matrice strana diversa dalle 8x8 standard) quindi prova anche a invertire, non si brucia nulla.

ero arrivato a pensare di avere dei max7219 farlocchi... invece erano solo sbagliati i collegamenti ai led

come faccio ad invertire con il display a 7 segmenti?
ho collegato i piedini con la dicitura SEGx ai vari segmenti ed ho collegato i DIGx ai catodi (uno per ogni digit)

non saprei come invertire il tutto
Logged

Offline Offline
God Member
*****
Karma: 0
Posts: 689
AHHAH
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i display di base sarebbero 7 segmenti con un punto, quindi 8 seg * 8 catodi, tutto e' riconducibile ad una matrice 8*8, nel mio caso ho dovuto invertire righe e colonne, quindi tu prova ad invertirli, nel max7219 su un lato (pin da 1 a 12) ci son solo le righe (o colonne, non ricordo) dal lato opposto (dal pin 13 a 24) le colonne

anche a me rimaneva tutto accesso e non me lo spiegavo, poi a tentativi ne son venuto fuori e funzionava benissimo
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 80
Posts: 2176
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
e i 7 segmenti sono ad anodo comune.

Ma il MAX7219 non vuole display a Catodo comune ?
Logged

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma il MAX7219 non vuole display a Catodo comune ?
+1

I condensatori da 10uF e 100nF in parallelo all'alimentazione e vicini al 7219 sono particolarmente consigliati.
« Last Edit: June 04, 2012, 09:24:07 am by dalubar » Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6020
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

e i 7 segmenti sono ad anodo comune.
e non va bene  smiley

non e' nemmeno facile invertire per adattarli, fai prima a comprare i catodo comune
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come faccio a capire se sono ad anodo o a catodo comune?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma il MAX7219 non vuole display a Catodo comune ?
+1

I condensatori da 10uF e 100nF in parallelo all'alimentazione e vicini al 7219 sono particolarmente consigliati.

consigliati per?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

e i 7 segmenti sono ad anodo comune.
e non va bene  smiley

non e' nemmeno facile invertire per adattarli, fai prima a comprare i catodo comune

confermo ad anodo comune

http://www.us.kingbright.com/images/catalog/SPEC/SA56-11EWA.pdf
Logged

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

Per gli anodo comune puoi provare con i TLC5940, c'è una lib ma è un po' "acerba":
http://arduino.cc/playground/Learning/TLC5940
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

consigliati per?
Questi IC hanno una elevata frequenza di multiplexing. I condensatori servono ad eliminare il rumore introdotto attraverso la linea di alimentazione e, come dice il playground (http://arduino.cc/playground/Main/MAX72XXHardware), essi non dovrebbero essere omessi in nessun caso, pena malfunzionamenti sporadici o permanenti. Inoltre i condensatori devono essere piazzati il più vicino possibile all'IC.

Per i display ti consiglio gli ELF-511 http://pdf1.alldatasheet.com/datasheet-pdf/view/229776/EVERLIGHT/ELF-511SURWA/S530-A3.html.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho sostituito i digit ad anodo comune con uno che ho trovato a catodo comune, ed effettivamente ora va, fa ancora i capricci, ma credo sia colpa del digit, appena possibile ne prenderò un paio nuovi.

grazie a tutti per l'aiuto!
Logged

Pages: [1]   Go Up
Jump to: