gestion 2 Afficheurs 7 segments
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 33

gestion 2 Afficheurs 7 segments



  1. #1
    electra19

    gestion 2 Afficheurs 7 segments


    ------

    Bonjour a tous,

    je suis novice en prog , j'essaye de gérer deux afficheurs 7 segments avec un PIC 18f45k22.alors j'arrive a gérer l'affichage sur un afficheur mais sur 2, 3 voir 4 afficheurs ça devient un peu compliqué . La, j'essaye de maitriser avec 2 afficheurs je veux faire afficher un compteur de 00 a 99. je veux que l'afficheur de gauche reste allumer pendant que l'afficheur de droite compte jusqu'a 9 avec une temporisation de 1s puis incrémentation sur l'afficheur de droite a 1 et ainsi de suite.... ce qui donnera 01,02,....09....10, 11....
    il le fait bien mais je n'arrive pas a garder toutes mes afficheurs allumés en même temps. ça clignotte. un afficheur est allumé pendant que l'autre est éteinte vice versa. quelqu'un aurait il une idée?

    voila mon programme:

    int unite=0, diz=0;
    int t[10]={63, 6, 91, 79, 102, 109, 125, 7, 127, 111}; //valeur a afficher
    TRISA=0x00; // Port A en sortie
    TRISD=0x00; // Port D en sortie
    PORTA=0x00; //Initialisation Port A
    PORTD=0x00; //Initialsation Port D

    while(1)
    {
    porta=0x01; //selection afficheur
    portd=t[unite];
    delay_ms(1000);
    porta=0x02;
    portd=t[diz];
    delay_ms(20);
    unite++;
    if (unit==10)
    {
    unite=0;
    diz++;
    }
    }

    -----

  2. #2
    PIXEL

    Re : gestion 2 Afficheurs 7 segements

    l'affichage "multiplexé" est , en effet la soluce. (vois gogol si tu ne connais pas)

    évidemment il faut que la fréquence d'allumage de tes afficheurs soit supérieure à la persistance
    rétinienne.
    à partir de 10 Hz , ça marche.

  3. #3
    electra19

    Re : gestion 2 Afficheurs 7 segments

    en effet pixel j'ai essayé cette piste en mettant ma tempo a 20ms, j'ai les deux aficheurs allumés mais l'afficheur de droite donc l'unité compte tres vite alors que je veux qu'il compte a la vitesse de 1 seconde et l'autre reste allumé.

  4. #4
    PIXEL

    Re : gestion 2 Afficheurs 7 segments

    tu as donc un mélange entre la fréquence de multiplexage et celle de comptage....

    là , faut remettre le soft sur la table , en respectant bien les règles de travail :

    ORGANIGRAMME , avant de pisser de la ligne au ch'ti bonheur la chance !
    défaut récurrent chez les débutants

  5. A voir en vidéo sur Futura
  6. #5
    electra19

    Re : gestion 2 Afficheurs 7 segments

    <<tu as donc un mélange entre la fréquence de multiplexage et celle de comptage...>> Ouais ça doit être quelque chose comme ça. je galere dessus depuis 3 jours. y 'a t-il des fonctions internes au microcontroleur que je dois utiliser genre timer? mais je ne pense pas avoir besoin de ce dernier dans mon cas...

  7. #6
    Seb.26

    Re : gestion 2 Afficheurs 7 segments

    Si tu as une tempo de 20ms pour faire le multiplexage des afficheurs, tu dois compter jusqu’à 50 avant d'incrémenter ta valeur : 50*20ms = 1000ms = 1s
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Salut seb! Ok, peux tu expliquer comment compter jusqu'à 50? j'ai utilisé le Timer0 interne du µc pour compter. Si j'ai bien compris, ce timer0 compte a la fréquence du signal d'horloge. Avec configuration de certains registres et quelques petits calculs voici ce que j'ai obtenu: registre TOCON=0b11000100; Quartz=8MHz; Fosc=8MHz/4=2MHz ; FTimer0=(Fosc/32) =62500Hz => periodetimer=16µs. je pense que je le fais compter de 0 a 255 donc 255x16µs=408ms. Hmmmmm est ce que mes calculs sont bons???
    Maintenant lors de l'incrémentation j'ai mes deux afficheurs allumés et qui s'incrémente mais pas a la vitesse de 1 seconde, ça s'incrémente trop vite on voit a peine le chiffre des unités.
    Dernière modification par electra19 ; 28/10/2013 à 03h22.

  9. #8
    Seb.26

    Re : gestion 2 Afficheurs 7 segments

    Citation Envoyé par electra19 Voir le message
    peux tu expliquer comment compter jusqu'à 50?
    Non.

    Citation Envoyé par electra19 Voir le message
    Maintenant lors de l'incrémentation j'ai mes deux afficheurs allumés et qui s'incrémente mais pas a la vitesse de 1 seconde, ça s'incrémente trop vite on voit a peine le chiffre des unités.
    Ton problème vient de là.

    Tu incrémente à chaque ticks de ton timer, incrémente seulement quand 1 seconde et passée et ça ira.
    Dernière modification par Seb.26 ; 28/10/2013 à 10h09.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    mag1

    Re : gestion 2 Afficheurs 7 segments

    Bonjour,

    Il existe une solution radicale à ces problèmes de multiplexage et d'afficheur, le MAX7219.

    On remplit son registre et il fait le reste. Pilotable avec n'importe quoi.
    La preuve, un exemple ici:
    http://electromag1.wifeo.com/affiche...ar-max7219.php

    MM
    Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...

  11. #10
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    Citation Envoyé par mag1 Voir le message
    Il existe une solution radicale à ces problèmes de multiplexage et d'afficheur, le MAX7219.
    Ouais, sauf que à force d'utiliser des CI les gens n'apprendront jamais les bases...

    Revenons au problème initial: En gros il faut une boucle (pour le début) ou (beaucoup mieux) une interruption qui gère le multiplexage, disons à 100Hz pour voir large autrement dit delayms(10). Si tu veux utiliser la même boucle pour compter plus lentement tu le fais comme ceci (pseudocode!):

    Code:
    int cpt_interne=0;
    int secondes=0;
    while(1) //boucle principale
    {
       //s'occuper du multiplexage = allumer le bon afficheur avec le bon nombre //cette partie est exécuté 100 fois par seconde
       cpt_interne++;
       if(cpt_interne==100) //donc après 100*10ms=1s //cette partie est exécuté 1 fois par seconde
       {
          cpt_interne=0;
          secondes++;
       }
       delayms(10);
    }

  12. #11
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Je ne sais pas comment j'ai fait mais ça marche j'ai compté jusqu'à 50 et ça marche lol. Non en fait j'ai initialisé mon timer0=0 et a 50 avec un if je l'ai dit d'incrémenté ma valeur et j'ai l'impression qu'il compte vraiment jusqu'a 50 et j'ai mon incrémentation a la seconde. Mais comme j'aime bien comprendre et ce que quelqu'un peux m'expliquer comment fonctionne le timer du µc ou si vous avez un lien serieux sur le sujet parceque g lu pleins de chose et fait pleins de calcul sont vraiment comprendre. Merci.
    Dernière modification par electra19 ; 28/10/2013 à 21h22.

  13. #12
    electra19

    Re : gestion 2 Afficheurs 7 segments

    oui grosmatou c un peu ce que j'ai fais mais j'ai utilisé une fonction et ça marche vraiment mieux avec 10ms pour le multiplexage merci . mais comment calcules tu les 100 fois/seconde???
    Dernière modification par electra19 ; 28/10/2013 à 21h36.

  14. #13
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    mais comment calcules tu les 100 fois/seconde???
    Pas sûr d'avoir bien compris... Les 100Hz pour le multiplexage j'ai pris au pif, c'est assez élevé pour ne plus voir les changements à l'oeil nu mais pas inutilement élevé ce qui ferais du travail inutile au µC. Enfin c'est surtout valable si on utilise un timer avec des interruption. Pour voir comment configurer le timer pour avoir 100Hz faut regarder la doc (et faire des recherches sur le net si besoin), je ne connais les PIC...

  15. #14
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Ok merci grosmatou! Avec 10 ms pour le multiplexage j'ai un super bon affichage sans clignotement mais je perd en durée pour l'incrémentation sur mes afficheurs.allez je remet les 20 ms et je recompte a 50.

  16. #15
    Seb.26

    Re : gestion 2 Afficheurs 7 segments

    Citation Envoyé par electra19 Voir le message
    Ok merci grosmatou! Avec 10 ms pour le multiplexage j'ai un super bon affichage sans clignotement mais je perd en durée pour l'incrémentation sur mes afficheurs.allez je remet les 20 ms et je recompte a 50.
    OMG ... pour 10ms tu dois compter jusqu'a 100 ...

    Allez, je fais la B.A. :

    une seconde c'est 1000ms, donc si tu fais +1 toutes les 10ms, il faut compter jusqu'a 100, car 100*10 = 1000.

    mais si tu fais +1 toutes les 20ms, il faut compter jusqu'a 50, car 50*20 = 1000.

    pour être sûr que tu as bien compris : il faut compter jusqu’à combien si tu fais +1 toutes les 50 ms ?! ... je ramasse les copies dans 10 minutes ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  17. #16
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    Citation Envoyé par Seb.26 Voir le message
    ...
    C'est pourtant ce qu'a dit electra19 non? Je ne vois pas où est son erreur (mais c'est peut-être moi?).

  18. #17
    Seb.26

    Re : gestion 2 Afficheurs 7 segments

    Citation Envoyé par electra19 Voir le message
    Avec 10 ms pour le multiplexage j'ai un super bon affichage sans clignotement mais je perd en durée pour l'incrémentation sur mes afficheurs.allez je remet les 20 ms et je recompte a 50.
    c'était pour répondre à ça ... je suis pas sûr qu'il ai compris ce qu'il faisait ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  19. #18
    electra19

    Re : gestion 2 Afficheurs 7 segments

    LOL!mdrrrr seb
    Dernière modification par electra19 ; 30/10/2013 à 20h09.

  20. #19
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Hello,

    Je me suis lancé sur le programme d'une horloge numérique sur 4 afficheurs 7 segments. Avant que l'affichage de l'heure ne commence je veux faire le réglage de l'heure donc réglage des minutes et des heures mais le probleme est que quand j'appui sur mon bps (bouton poussoir) connecté au portb (configuré en entrée) je perd l'affichage sur mes afficheurs pendant une fraction de seconde avant qu'il ne réapparaisse avec la bonne valeur incrémentée.J'ai essayé de mettre des tempos a gauche et a droite mais ça ne marche pas. quelqu'un a déja rencontré ce problème? sinon l'horloge marche nickel a part ce problème de réglage.
    Dernière modification par electra19 ; 03/11/2013 à 19h38.

  21. #20
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Hello,

    Je me suis lancé sur le programme d'une horloge numérique sur 4 afficheurs 7 segments. Avant que l'affichage de l'heure ne commence je veux faire le réglage de l'heure donc réglage des minutes et des heures mais le probleme est que quand j'appui sur mon bps (bouton poussoir) connecté au portb (configuré en entrée) je perd l'affichage sur mes afficheurs pendant une fraction de seconde avant qu'elle ne réapparaisse avec la bonne valeur incrémentée.J'ai essayé de mettre des tempos a gauche et a droite mais ça ne marche pas. quelqu'un a déja rencontré ce problème? sinon l'horloge marche nickel a part ce problème de réglage.

  22. #21
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Est ce que le probleme viendrait de mes temporisations j'en ai mis juste apres l'appui sur le bouton poussoir afin de lui laisser le temps de s'incrémenter sinon ça s'incrémente trop vite. mon sous programme réglage fonctionne comme suit:
    1)affichage avec multiplexage (5ms)
    2)appui sur bouton poussoir
    3) incrémentation
    4) tempo (1s)
    5) boucle sur l'affichage (1)

  23. #22
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    Donne le programme complet et le schéma... Effectivement une tempo pour les boutons peut-être une piste à la recherche du problème. Il faut faire le multiplexage avec une interruption timer qui pourra aussi se charger du debouncing (j'oublie toujours le mot français) des BP.

  24. #23
    electra19

    Re : gestion 2 Afficheurs 7 segments

    voila le sous programme reglage.

    while(portb!=0x10)
    {
    porta=0x08; // Choix des milliers
    portd=t[mheure] ;
    delay_ms(5);
    porta=0x04; // Choix des centaines
    portd=t[cheure] ;
    delay_ms(5);
    porta=0x01; // choix unité
    portd=t[uminute]; // envoie valeur vers afficheur
    delay_ms(5); // tempo
    porta=0x02; //choix dizaine
    portd=t[dminute]; //envoie valeur vers afficheur dizaine
    delay_ms(5); //tempo affichage
    switch (portb) //valeur appui sur bps 0x20 ou 0x40
    {
    case 0x20 : uminute++; //Réglage minute
    delay_ms(1000); // tempo appui touche
    if (uminute==10)
    {
    uminute=0;
    dminute++;
    }
    if (dminute==6)
    dminute=0;
    break;
    case 0x40 : cheure++; //Réglage heure
    delay_ms(1000); // tempo appui touche
    if (cheure==10)
    {
    cheure=0;
    mheure++;
    }
    if (mheure==2 && cheure==4)
    {
    mheure=0;
    cheure=0;
    }
    break;
    }

  25. #24
    electra19

    Re : gestion 2 Afficheurs 7 segments

    je pense que c un probleme de tempo quand je fais mon reglage, il passe trop de temps dans la boucle incrementation du coup le multiplexage se fait mal il eteint les afficheurs et un seul reste allumé le temps de l'incrémentation....
    Dernière modification par electra19 ; 04/11/2013 à 01h43.

  26. #25
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Personne a une idée???

  27. #26
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    Du calme, du calme, je vais regarder ça. La prochaine fois le code source entre balises pour l'intendation...

  28. #27
    grosmatou75001

    Re : gestion 2 Afficheurs 7 segments

    Bon, vite fait: Le problème vient effectivement des delay_ms(1000) pour "debouncer" les BP. Ou disons plutôt le problème vient de la façon dont tu fais ton multiplexage. Comme je disais il faut utiliser un timer et une interruption.J'ai pondu un bout de pseudo-C vite fait mais vu l'heure je ne garantis rien...

    Comme il manque le schéma je dois deviner quelque trucs... Je suppose donc que les afficheurs sont tous branchés en paralèlle sur le PORTD pour les segments et que les différentes masses (dans le cas d'afficheurs common cathode) sont commandés par des transistors branchés sur PORTA.

    Code:
    volatile uint8_t temps[4]={0,0,0,0}; //volatile ou pas? gros doute, alors dans le doute... à voir
    
    uint8_t masses[4]={1<<0, 1<<1, 1<<2, 1<<3};
    
    uint8_t tr(uint8_t c); //"traduction" entre le binaire et le 7-segment, cf. doc des afficheurs (peut-être parfaitement inutile en fait, j'ai pas de doc sous les yeux. Comme je disais _pseudo_code.)
    
    void interrupt_timer //à 100Hz p.ex.
    {
    	static uint8_t i=0; //static, autrement dit garde sa valeur entre deux interruptions
    	PORTA=0; //éteindre le dernier afficheur qui est encore allumé
    	PORTD=tr(temps[i]); //mettre la valeur qui va bien pour l'afficheur dont c'est le tour
    	PORTA=masses[i]; // et allumer l'afficheur
    	i++; //et au prochain
    	if(i==4)
    		i=0;
    }
    puis dans la main tu recopies ton switch dans une boucle infinie (et puis quelque part au début tu initialises le timer bien sûr...). Tu pouras alors utiliser des temporisations pour ralentir le comptage et le debouncing des BP, mais cette derniere chose on peut faire ça proprement dans l'interruption timer. Par contre comme j'ai pas le schéma je ne vais pas m'amuser à faire du code pour cette partie. Je pense que Google doit sortir des choses pour ça...

  29. #28
    electra19

    Re : gestion 2 Afficheurs 7 segments

    Salut gros matou,

    Merci, je vais essayer de suivre la piste du timer interne du pic et revoir mon programme. je crois que la traduction du "debouncing" c'est anti rebond pour les bps quelque chose comme ça...

  30. #29
    electra19

    Re : gestion 2 Afficheurs 7 segments

    une question de debutant quand je configure mon timer interne du pic apres le comptage (256) il déclenche une interruption(doc constructeur). Est ce que la fonction "void interrupt()" est déclarer automatiquement par le compilateur? dans le sens ou il sait qu'il executera cette fonction s'il ya une interruption.

  31. #30
    Tropique

    Re : gestion 2 Afficheurs 7 segments

    Je rappelle que les doublons sont interdits par la charte.

    Prière désormais de rester sur ce fil.
    Pas de complexes: je suis comme toi. Juste mieux.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Afficheurs 7 segments
    Par invite237de4c0 dans le forum Électronique
    Réponses: 21
    Dernier message: 10/06/2012, 18h04
  2. Afficheurs 7 segments
    Par Papy dépron dans le forum Électronique
    Réponses: 13
    Dernier message: 28/01/2011, 20h29
  3. Gestion plusieurs afficheurs 7 segments
    Par gedonet dans le forum Électronique
    Réponses: 6
    Dernier message: 16/02/2009, 06h41
  4. Afficheurs segments
    Par invite91183f95 dans le forum Électronique
    Réponses: 4
    Dernier message: 26/11/2006, 16h17
  5. Afficheurs 7 segments
    Par invitea3d69760 dans le forum Électronique
    Réponses: 12
    Dernier message: 09/06/2006, 08h25
Découvrez nos comparatifs produits sur l'informatique et les technologies.