IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

MAX6958 8 LEDs + 4 digits


Sujet :

Embarqué

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 52
    Par défaut MAX6958 8 LEDs + 4 digits
    Bonjour à tous,

    J'ouvre ce sujet suite aux difficultés que je rencontre dans le fonctionnement du MAX6958.
    Voici la datasheet qui m'a pas mal aidé : http://studylib.net/doc/18122405/max...-3v-to-5.5v--4

    J'ai réussi à brancher 4 afficheurs sur le max6958 et à les gérer (affichage). J'ai programmé en C sur code composer studio.

    A présent j'aimerais rajouter 8 LEDs sur les ports input 1 et input 2. Il y a beaucoup d'informations sur la datasheet mais j'ai beaucoup de mal à les interpréter...
    Au niveau hardware les branchements sont corrects je pense, il ne me reste qu'à configurer tout ça sur code composer.

    J'ai bien trouvé l'adresse du registre pour les LEDs 0x24 (cf page 10 datasheet). Mais je n'arrive pas à configurer le reste..
    Est-ce que quelqu'un pourrait me donner des indications ?
    Pour le moment mon code sur la configuration des ports input1 et input 2 ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void leds8(int8_t j)
    {
        UCB1CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        __delay_cycles(100);
        UCB1TXBUF = 0x24;                       //address of 8 leds
        __delay_cycles(100);
        UCB1TXBUF = j;
        __delay_cycles(100);
        UCB1CTL1 |= UCTXSTP;
        __delay_cycles(100);                    // I2C stop condition
        while (UCB1CTL1 & UCTXSTP);             // Ensure stop condition got sent
    }
    Bien à vous, Pierre

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 52
    Par défaut Code deja présent
    Code permettant d'initialiser mes digits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    void dig1(int8_t i)     //Function wich permitt to display numbers on the dig1 (red left digit)
    {
        UCB1CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        __delay_cycles(100);
        UCB1TXBUF = 0x20;						//address of left digit in decoder is 0x20
        __delay_cycles(100);
        i=i>>4;
        UCB1TXBUF = i;
        __delay_cycles(100);
        UCB1CTL1 |= UCTXSTP;					// I2C stop condition
        __delay_cycles(100);					
        while (UCB1CTL1 & UCTXSTP);             // Ensure stop condition got sent
    }
    
    void dig2(int8_t i) //Function wich permitt to display numbers on the dig2 (red riight digit)
    {
        UCB1CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        __delay_cycles(100);
        UCB1TXBUF = 0x21;						//address of Right digit in decoder is 0x21
        __delay_cycles(100);
        UCB1TXBUF = i;
        __delay_cycles(100);
        UCB1CTL1 |= UCTXSTP;
        __delay_cycles(100);                    // I2C stop condition
        while (UCB1CTL1 & UCTXSTP);             // Ensure stop condition got sent
    }
    
    void dig3(int8_t k) //Function wich permitt to display numbers on the dig3 (green left digit)
    {
        UCB1CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        __delay_cycles(100);
        UCB1TXBUF = 0x22;                       //address of Right digit in decoder is 0x22
        __delay_cycles(100);
        k=k>>4;
        UCB1TXBUF = k;
        __delay_cycles(100);
        UCB1CTL1 |= UCTXSTP;
        __delay_cycles(100);                    // I2C stop condition
        while (UCB1CTL1 & UCTXSTP);             // Ensure stop condition got sent
    }
    
    void dig4(int8_t k) //Function wich permitt to display numbers on the dig4 (green right digit)
    {
        UCB1CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
        __delay_cycles(100);
        UCB1TXBUF = 0x23;                       //address of Right digit in decoder is 0x23
        __delay_cycles(100);
        UCB1TXBUF = k;
        __delay_cycles(100);
        UCB1CTL1 |= UCTXSTP;
        __delay_cycles(100);                    // I2C stop condition
        while (UCB1CTL1 & UCTXSTP);             // Ensure stop condition got sent
    }
    void initLedDriver()        //Initialisation of LEDs to 0
    {
    	  P4SEL |= 0x06;                                // Assign I2C pins to USCI_B1
    	  P4REN |= 0x06;
    	  P4OUT |= 0x06;
    	  UCB1CTL1 |= UCSWRST;                          // Enable SW reset
    	  UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;         // I2C Master, synchronous mode
    	  UCB1CTL1 = UCSSEL_2 + UCSWRST;                // Use SMCLK, keep SW reset
    	  UCB1BR0 = 3;                                  // fSCL = SMCLK/3 = ~400kHz
    	  UCB1BR1 = 0;
    	  UCB1I2CSA = 0x38;                             // Slave Address is 038h
    	  UCB1CTL1 &= ~UCSWRST;                         // Clear SW reset, resume operation
    	  //UCB1IE |= UCTXIE;                           // Enable TX interrupt
    	  resetLedDriver();
    	  dig1(0);								        //Reset the display to 0 number
    	  dig2(0);
    	  dig3(0);
    	  dig4(0);
    }

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour Pierre

    Pourquoi ne pas utiliser le datasheet directement depuis le site du fabricant de la puce https://datasheets.maximintegrated.c...58-MAX6959.pdf

    Citation Envoyé par eliters48 Voir le message
    A présent j'aimerais rajouter 8 LEDs sur les ports input 1 et input 2. Il y a beaucoup d'informations sur la datasheet mais j'ai beaucoup de mal à les interpréter...
    Au niveau hardware les branchements sont corrects je pense, il ne me reste qu'à configurer tout ça sur code composer.
    Des Led sur des entrées (inputs) cela sonne déjà mal, puis après vérification du datasheet, les 8 diodes sur les entrées 1 et 2 ne sont pas des Led, mais de simple diode de signalisation qui servent au matriçage de 8 contacts qui peuvent être lus par le MAX6958.

    [Edit:]Donc inutile d'aller plus loin, notamment au niveau du code. Si tu veux commander des Leds en plus, il faut un circuit additionnel. Sauf dans le cas où tu n'utilises pas les 4 digits que peut commander le MAX6958 et dans ce cas uniquement, tu peux utiliser les connections du 4ème digit pour commander des Led individuelles. En fait non, les MAX6958 et MAX6959 ont bien la possibilité de commander 8 leds en plus des 4 digits à 7 segments.

    Delias

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 52
    Par défaut
    Merci à vous pour vos réponses,
    effectivement je ne suis pas complet, je vais y remédier :
    J'utilise un MSP430F5529 qui permet d'utiliser un clavier et d'afficher ce que je tape sur ce clavier sur les écrans. Pour ne pas utiliser de nombreux ports sur le MSP j'ai utilisé un MAX6958 qui permet de gérer 4 écrans avec uniquement 2 ports sur le MSP. J'ai bien réussi à programmer et brancher tout ce qui concerne le clavier et les écrans.

    Maintenant je souhaite ajouter 8 LEDs qui doivent s'allumer lorsque je ferme un interrupteur manuellement. Dans un premier temps j'ai branché les interrupteurs et les leds directement sur le MSP mais au bout d'un moment il manque des ports. Comme pour les écrans j'ai décidé de mettre les 8 LEDS sur le MAX6958 que je souhaite controler avec les interrupteurs. Mon soucis est la configurations de ces 8 LEDs sur le MAX6958 que je n'arrive pas à programmer.

    Voilà j'espère que je suis un peu plus clair ?

    Bien à vous, Pierre

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 52
    Par défaut
    De ce que j'ai compris de la datasheet,
    les branchements se font effectivement sur les SEG0 à SEG7 mais on contrôle les LEDs grâce au ports : INPUT 1 et INPUT 2
    Cf datasheet :
    Nom : Captura.PNG
Affichages : 448
Taille : 38,5 Ko

    C'est ce branchement que j'ai réaliser, chaque LED doit être controller par l'interrupteur qui lui correspond

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Non, non et Non relis mes réponses (entretemps complétées)

    Ce ne sont pas des Leds, et cela n'est dispo que sur le MAX6959 et pas sur le MAX6958 que tu utilises.

    Delias

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Salut,
    Il nous faut :

    Un schéma de ce que tu veux faire car pour moi c'est pas clair (tu veux mettre 8 LED à l'endroit prévu pour un clavier ? input 1 et 2 sont des entrées, du coup je ne comprends pas l'histoire des LED dessus ?).
    La référence du microcontrôleur que tu utilises.

    A+

    EDIT : message croisé avec celui de Delias

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bon pour le coup, j'avais pas assez lu en détail le datasheet.

    Le circuit est capable de gérer 8 leds supplémentaires, à condition de ne pas utiliser de point décimaux sur les digits, mais ce n'est pas via les entrées Input 1 et Input 2. C'est les branchements désignés SEG 0 à SEG 7 dans le datasheet qui faut utiliser.

    Et pendant qu'on y est, Input 1 et Input 2 ne sont disponible que sur le MAX6959, sur le 6958 les pins sont N.C. et doivent rester en l'air ou être connecté à VCC...

    Delias

Discussions similaires

  1. [Débutant creation de composant] Créer une LED numérique
    Par C_Marteau dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/06/2005, 21h23
  2. [RegExp] digit ET lettre
    Par denisC dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/05/2005, 09h29
  3. Réponses: 4
    Dernier message: 06/05/2005, 13h37
  4. [TP]Créer une animation leds clavier
    Par Thomas748 dans le forum Turbo Pascal
    Réponses: 16
    Dernier message: 27/11/2004, 20h18
  5. comment faire un compteru digital?
    Par Zorgz dans le forum MFC
    Réponses: 5
    Dernier message: 13/01/2004, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo