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

C Discussion :

Affichage de la conversion d'un ADC


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut Affichage de la conversion d'un ADC
    Bonjour à vous,

    Dans le cadre de mon boulot , je dois réaliser une interface d'affichage. Je dispose d'un PSoC que je dois programmer pour afficher le résultat de la conversion d'un ADC sur 8 afficheurs 7 segments. Le truc c'est que j'ai un PSoC qui joue le role de DAC et un autre PSoC qui joue le role de gestion des afficheurs. Pour que les 2 composants communique, j'ai réalisé une communication SPI , qui m'envoie ne peut envoyer qu'un seul caractère à la fois. Une fois la conversion d'une tension terminer je reçois 2 caractères, a présent je dois donc calculer la valeur correspondante, je fais donc :

    Donnee_affichable=((Data_Rx_MSB)*256)+Data_Rx_LSB;

    Le soucis est que je dois mettre cette meme valeur " Donne_affichable" dans un tableau pour que je puisse l'afficher ensuite sur mes afficheurs 7 segments. Mais comment faire cela ?

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Hum...

    Quel est le type de Donnee_affichable ?
    Pour char :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char tab[1];
    [...]
    tab[0] = ((Data_Rx_MSB)*256)+Data_Rx_LSB;
    Ai-je mal compris ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut well well
    Hola todos

    J'ai mis :

    unsigned int Donnee_affichable;

    mais je n'en suis pas sur! Le truc c'est que je reçois 2 caractère , le MSB et le LSB de ma conversion et après je dois afficher ce résultat sur mes 4 afficheurs 7 segments , du coup ma conversion peut aller de 0 à 4096 ( en fait je reçois de 0x000 à 0xFFF de mon ADC, et je reçois ça en 2 fois avec ma communication SPI ). Devrait donc y avoir 4 cases complétées à mon ce tableau :

    Donnee_affichable[0]=(((int)Data_Rx_MSB)*256)+(int)Data_Rx_LSB;
    Donnee_affichable[1]=(((int)Data_Rx_MSB)*256)+(int)Data_Rx_LSB;
    ...
    Donnee_affichable[4]=(((int)Data_Rx_MSB)*256)+(int)Data_Rx_LSB;

    Me fais je bien comprendre ? lol

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut J'étais pas clair précédement
    Pour faire simple , je fais :

    Donnee_affichable=(((int)Data_Rx_MSB)*256)+(int)Data_Rx_LSB;

    Donee_affichable est un unsigned int , je pense pas trop mettre planté. Imaginons que Donnee_afichable donne 1234 , je voudrais faire un tableau avec : int tab[0] = 1 ;
    int tab[1]=2; int tab [2]=3 et int tab[3]=4;

    Je veux juste mettre mon résultat dans un tableau ...snif faut pas se moquer !

    C'est tout con ce que je veux faire mais je me prends tellement la tête que j'arrive plus à rien !

  5. #5
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Hello !

    Pour cela utilise simplement une division entière (div) et un modulo (%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int tab[4];
    tab[0] = Donnee_affichable div 1000;
    tab[1] = (Donnee_affichable % 1000) div 100;
    tab[2] = (Donnee_affichable % 100) div 10;
    tab[3] = (Donnee_affichable % 10);

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut OUaah merki la grande classe
    Bonjour,

    Merci beaucoup , ça marche dit donc !
    Je vais pouvoir aborder mon deuxième problème maintenant qui est que j'arrive pas à faire un bon affichage sur mes afficheurs 7 segments. L'affichage est beaucoup trop faible , j'ai donc pensé ( et oui je pense des fois ) que ma vitesse de multiplexage était trop rapide mais quand je me met à la limite du clignotement de l'affichage mon affichage reste très pale. D'ou peut provenir cela ? sachant que mon maitre de stage m'a montré son prog qui lui fait un affichage top la classe !

    Lol , c'était aussi pour éviter de faire un nouveau sujet !

  7. #7
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Ne serait-ce pas un problème autre que ton code par hasard ... Genre l'alim de ton affichage ...

    Ton prof t'as montré son code sur ton affichage à toi ... ?

  8. #8
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par femtosa
    Ton prof t'as montré son code sur ton affichage à toi ... ?
    Citation Envoyé par themacprod
    Dans le cadre de mon boulot

  9. #9
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Citation Envoyé par themacprod
    ... sachant que mon maitre de stage m'a montré son prog qui lui fait un affichage top la classe !
    Abus de language d'ancien étudiant trop récent ...

    Alors qu'en est-il du programme de ton maître de stage sur ton affichage ... ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut euH
    Oui mon prof m'a montré le résultat à obtenir sur ma carte ( je pense que c'était un peu pour me dégouter et donc pour me prouver que ça n'est pas un problème d'alim mais bien un problème de soft ).

    Oui , désolé j'ai voulu mettre "stage", j'ai écrit " boulot" , labsusse de ma part.

    Pour gérer l'affichage de mes afficheurs j'ai mis en place un compteur dont j'ai réglé le timing pour qu'il me génère des intérruptions lorsque je souhaite commander mes afficheurs , je n'ai alors qu'a changer l'horloge de fonctionnement du compteur pour changer le temps de rafraichissement .

    Merci

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut ahaha
    bonjour,

    Et oui je suis toujours étudiant ...
    Mon prof m'a juste télécharger son prog sur mon microcontroleur. J'ai bien essayer de lire le contenu mais c'est en hexadécimal. Comme je l'ai dit précédement, c'était bien pour me montrer qu'il y'a une solution.

  12. #12
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Laisse-tu le temps à ton affichage d'éclairer complètement tes segments ... ? Parce qu'être à la limite du clignotement me paraît un peu rapide ... !

    Sans cela, j'aurai dis un problème de résistance trop grande mais si un autre code fonctionne, je ne vois pas d'autre possibilité qu'un rafraîssissement trop rapide ...

  13. #13
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par themacprod
    bonjour,

    Et oui je suis toujours étudiant ...
    Mon prof m'a juste télécharger son prog sur mon microcontroleur. J'ai bien essayer de lire le contenu mais c'est en hexadécimal. Comme je l'ai dit précédement, c'était bien pour me montrer qu'il y'a une solution.
    Ca me rappelle mon stage de l'année dernière sur les micro-controlleurs PIC (ca me manque pas).

    Pourquoi te refaire faire un programme que ton maitre de stage a déjà ?

    Plus sérieusement, pour ton affichage tu peux nous montrer ton code stp.
    Je pense pas que ce soit beaucoup différent des PIC.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut ?
    Pour moi être à la limite du clignotement signifie que je suis à la vitesse de rafraichissement la plus faible possible ?!?
    Je suis tout perdu là ! Pour te dire je suiss 50 Hz pour le rafraichissement.

  15. #15
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Citation Envoyé par themacprod
    Pour moi être à la limite du clignotement signifie que je suis à la vitesse de rafraichissement la plus faible possible ?!?
    Je suis tout perdu là ! Pour te dire je suiss 50 Hz pour le rafraichissement.
    Tu peux très bien rafraîchir ton affichage dès que tu vois tes segments s'allumer, alors qu'il faudrai encore juste quelques millisecondes pour qu'il soit plus luminescent ...

    Après faut voir à quel fréquence ton convertisseur travail, mais s'il travail plus vite que ce que ton affichage te permet, t'as meilleur temps de n'afficher qu'une données sur 2 ou 3 par exemple (sans perdre les autres, juste ralentir l'affichage ) ...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut
    const char Digit[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
    char Nombre[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

    #pragma interrupt_handler spis_afficheur_bis_c_Counter16_1_ISR_c

    //********************************************************
    void spis_afficheur_bis_c_Counter16_1_ISR_c()
    {
    if (i>=4) {
    i=0;
    }
    //Counter8_1_Start();
    //while (Counter8_1_bReadCounter()!=0){
    PRT0DR = Digit[i];
    PRT2DR = Nombre[Tab_affiche[i]];
    //}
    i++;
    }


    D'un point de vue du contenu de l'affichage , tout est correcte , mais trop peu lumineux.
    J'ai laissé en commentaire un test que j'avais réalisé pour forcer la commande de mes afficheurs mais sans résultats ... snif

    En tout cas merci quand meme les gars d'être aussi présent , ça fait plaisir !

  17. #17
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Premièrement ...

    Et puis une petite amélioration :

    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
    const char Digit[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
    char Nombre[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
     
    #pragma interrupt_handler spis_afficheur_bis_c_Counter16_1_ISR_c
     
    //********************************************************
    void spis_afficheur_bis_c_Counter16_1_ISR_c()
    {
    //Counter8_1_Start();
    //while (Counter8_1_bReadCounter()!=0){
    PRT0DR = Digit[i];
    PRT2DR = Nombre[Tab_affiche[i]];
    //}
    i = i++ mod 4;
    }
    Pour ce qui est du problème d'affichage trop peu lumineux ... Je vois rien d'autre qu'un rafraîssissement trop rapide ... T'as essayé de rafraîchir qu'une fois par seconde ... ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut En effet
    Ok , je vois ce que tu veux dire pour ce qui est du temps du temps qu'il fautpour que les LEDs soient visible , c'est pourquoi j'ai pris le temps de regarder sur l'oscilloscope les timings du programme de mon maitre de satge , ils laissent les LEDs s'allumées près de 1,7 ms , c'est pourquoi j'ai respecté le meme timings , j'ai meme essayer de mettre plus longtemps , d'ou mon code que j'ai mis en commentaire au dessus , j'avais mis un compteur qui permettait de faire durer le temps de commande de mes LEDs mais sans résultats. C'est vraiment prise de tete comme problème parce que j'ai les memes timings que mon maitre de stage mais moi ça marche pas ! snif

  19. #19
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Le code que t'as mis en commentaire ne ralenti pas l'affichage de tes segments au contraire

    Tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Counter8_1_Start();
    while (Counter8_1_bReadCounter()!=0){
    PRT0DR = Digit[i];
    PRT2DR = Nombre[Tab_affiche[i]];
    }
    Donc en fait tu va à chaque fois relancer l'affichage sur tes segments !

    Essai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Counter8_1_Start();
    while (Counter8_1_bReadCounter()!=0);
    PRT0DR = Digit[i];
    PRT2DR = Nombre[Tab_affiche[i]];
    Là tu attends vraiment à rien faire (ce qui peut être dangeureux dans une interruption ... !!) avant de rafficher sur tes segments !

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut Merci pour le conseil pour le l'affichage du code
    Merci

    La commande
    i = i++ mod 4; mon compilateur ne connait. J'ai bien essayé de rafraichir toute les secondes , les LEDs éclairent au max ( enfin normelement quoi ) mais avec un rafraichissement aussi lent ,j'ai le temps de voir un super beau clignotement , c'est pourquoi je me suis placé à la limite du clignotement pour avoir un affichage continue sur mes 4 afficheurs

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/04/2007, 17h04
  2. Conversion d'un ADC
    Par themacprod dans le forum C
    Réponses: 2
    Dernier message: 18/04/2007, 18h28
  3. [MySQL] affichage après conversion htmlentities
    Par mims1664 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/03/2007, 13h22
  4. Conversion HEXA -> ASCII pour affichage LCD
    Par MarcO_- dans le forum C
    Réponses: 11
    Dernier message: 03/03/2007, 17h47
  5. [JSP] conversion/affichage d'un texte en html
    Par astrofiles dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 22/02/2006, 16h23

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