Go Down

Topic: MAX7219 + 3 display a 7 segmenti (Read 2262 times) previous topic - next topic

nsalnet

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: [Select]
/**************************************************************************//**
* \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

Testato

- 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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

nsalnet

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: [Select]
//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();
}

reizel

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

nsalnet


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

reizel

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

Brunello

Quote
e i 7 segmenti sono ad anodo comune.


Ma il MAX7219 non vuole display a Catodo comune ?

dalubar

#7
Jun 04, 2012, 04:20 pm Last Edit: Jun 04, 2012, 04:24 pm by dalubar Reason: 1

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.

Testato


e i 7 segmenti sono ad anodo comune.

e non va bene  :)

non e' nemmeno facile invertire per adattarli, fai prima a comprare i catodo comune
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

nsalnet

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

nsalnet



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?

nsalnet



e i 7 segmenti sono ad anodo comune.

e non va bene  :)

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

leo72

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

dalubar


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.

nsalnet

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!

Go Up