Go Down

Topic: MAX7219 + 3 display a 7 segmenti (Read 2335 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy