Problème de CAN
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Problème de CAN



  1. #1
    invitebdba06cc

    Problème de CAN


    ------

    Bonjour à tous,

    Je suis étudiant en BTS SE et j'ai un projet à réaliser pour terminer ma deuxième année, je suis bloqué et je vous demande un peu d'aide svp

    Je doit réaliser une télécommande HF de 10 touches alimenté en 3V, pour le clavier j'ai utilisé 2 ponts diviseur de tension (5 touches par pont) et j'utilise donc 2 CAN du pic (16F690) afin d'associer chaque tension à un nombre donc une touche.

    Le problème c'est que j'arrive à faire fonctionner un convertisseur, j'arrive aussi à faire fonctionner le 2ème mais dès que je veux faire fonctionner les 2 ça ne marche pas et je ne vois vraiment pas pourquoi, mon programme semble être correct

    Avez-vous déjà été confronté à ce problème? Y a-t-il une astuce à connaître?
    Merci pour votre aide

    -----

  2. #2
    zhal

    Re : Problème de CAN

    Salut,

    il faut que tu cherche dans la datasheet pour la reponse précise.

    Ce que je peux te dire c'est que convertir en même temps deux tensions en numerique par le CAN est IMPOSSIBLE !

    Mais ... le PIC travaillant a grande vitesse tu peux faire consecutivement l'une puis l'autre des conversions.

    D'ailleurs, si tu avais commencé par lire la Datasheet tu te serai rendu compte que tu dois manipuler une sorte de "selecteur" pour choisir quel patte du PIC va sur l'unique CAN du PIC

    Voili Voilou Voila

  3. #3
    RISC

    Re : Problème de CAN

    Salut Carot,

    Pour avoir de l'aide, il est conseillé de faire voir ton schéma et ton programme sans quoi on peut faire des suppositions jusqu'à la fin des temps ...

    a+

  4. #4
    zhal

    Re : Problème de CAN

    Sur, mais c'est 9 fois sur 10 le même soucis

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

    Re : Problème de CAN

    Merci de répondre aussi vite

    Dans mon programme j'ai bien converti une tension après l'autre et j'ai rentré les résultats de la conversion dans 2 variables différentes.

    Pour le "sélecteur" si tu parle bien de ce que je pense (le registre ADCON0) j'ai bien choisi les bits correspondant à AN9 et AN10, les pattes que j'utilise. Je pense que le problème vient d’ailleurs.

  7. #6
    zhal

    Re : Problème de CAN

    As tu ton code sous la main ?

  8. #7
    invitebdba06cc

    Re : Problème de CAN

    Ah oui désolé donc voici le structurel et le code:

    [urlxxxxxxxx

    et le code il n'est pas tout à fait complet mais le principe est là:

    Code:
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //                      FONCTION CONVERSION ANALOGIQUE-NUMERIQUE PIC16F690                      //
    //////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    #include <pic.h>
    const tabaff[8]={0x00,0x06,0x5B,0x4F,0x66,0x6D,0x7D,};							//Configuration des caractères à afficher
    
    unsigned char ValAD,ValAD1,s,t,x,xm1,xm2;												//Initialisation des variables
    
    void init(void)
    	{
    	TRISB=0b01110000;															//Initialisation des entrées/sorties
    	TRISC=0b10000000;															//1 => entrée; 0 => sortie
    
        OSCCON=0b01101110;															//Configuration de l'oscillateur
    	ADCON1=0b00000000; 															//Configuration registre ADCON1 (voir page 116 datasheet 16F690)
    	ANSELH=0b00000110;															//Configuration des entrées/sorties numériques
    	ANSEL=0b00000000;															//1 => entrée; 0 => sortie
    	}
    
    void tempo(unsigned int j)														//Fonction tempo
    	{
    	unsigned int i;
    	for(i=0;i<j;i++);
    	}
    
    unsigned char conversion(unsigned char voie)									//Fonction conversion AN universelle
    	{
    	 ADCON0=0b00000011+(voie<<2);												//voie est définie dans while(1)
    
    	 while(GODONE==1);															//Attendre la fin de la conversion
    	 return ADRESH;	 
    	}
    
    void acquis(void)																//Fonction d'acquisition du convertisseur
    	{
    	t=0;																		//Variable t=0 => correspond à ne rien afficher (PORTC=0)
    	ValAD=conversion(10);
    	ValAD1=conversion(9);														//Retourner la valeur de la conversion dans ValAD et ValAD1
    
    	if (ValAD >= 234) t = 1;													//Si bouton Joueur 1 appuyé t=1
    	if ((ValAD >= 181) && (ValAD <= 233)) t = 2;								//Si bouton Joueur 2 appuyé t=2
    	if ((ValAD >= 125) && (ValAD <= 180)) t = 3;								//Si bouton Joueur 3 appuyé t=3
    	if ((ValAD >= 80) && (ValAD <= 124)) t = 4;									//Si bouton Joueur 4 appuyé t=4
    	if ((ValAD >= 31) && (ValAD <= 79)) t = 5;									//Si bouton Joueur 5 appuyé t=5
    
    	if (ValAD1 >= 234) t = 6;													//Si bouton Joueur 1 appuyé t=1
    	if ((ValAD1 >= 181) && (ValAD1 <= 233)) t = 7;								//Si bouton Joueur 2 appuyé t=2
    	if ((ValAD1 >= 125) && (ValAD1 <= 180)) t = 8;								//Si bouton Joueur 3 appuyé t=3
    	if ((ValAD1 >= 80) && (ValAD1 <= 124)) t = 9;								//Si bouton Joueur 4 appuyé t=4
    	if ((ValAD1 >= 31) && (ValAD1 <= 79)) t = 10;								//Si bouton Joueur 5 appuyé t=5
    	}
     
    void main()																		//Programme principale
    	{
    	unsigned int j=1000;														//Réglage de la tempo (environ 20ms)
    			
    	init();																		//Initialisation
    	x=0;																		//Reglage des 3 variables
    	xm1 = 0;																	//x, xm1 et xm2
    	xm2 = 0;																	//à 0
    
    
    		while(1)																//Boucle principale
    		{
    		acquis();																//Fonction acquisition
    		tempo(j);																//Attendre 20ms
    		xm2 = xm1;																//Décalage des variables
    		xm1 = x;																//
    		x = t;																	//
       		if ((x==xm1) && (xm2==xm1)) 											//Si à 20ms d'écart les 3 variables sont égales
    			{
    			PORTC=tabaff[t];													//Alors afficher la valeur de t (de la fonction acquis)
    			}
    		}
    	}
    Bonsoir
    Depuis longtemps déjà les images sur serveur extérieur (balise IMG) ne sont plus acceptées.
    Lisez SVP:
    http://forums.futura-sciences.com/el...-sabonner.html
    En tête de rubrique.

    A+
    Dernière modification par JPL ; 02/04/2011 à 19h17. Motif: Image non conforme (IMG)

  9. #8
    zhal

    Re : Problème de CAN

    Avant de revenir sur ton problème il va falloir arranger un peu ton code.

    Pour commencer :

    - Les variables doivent etre déclarées au même endroit si elles sont globales (Hors d'une fonction)
    - INDENTER le code pour faciliter la lisibilité

    - Tes IF, sa ne va pas du tout. Penche toi sur une boucle CASE

    - Il y a un probleme avec ton code de conversion :

    Code:
    unsigned char conversion(unsigned char voie) //Fonction conversion AN universelle
    {
    ADCON0=0b00000011+(voie<<2); //voie est définie dans while(1)
    
    while(GODONE==1); //Attendre la fin de la conversion
    return ADRESH;
    }
    Ou passe tu go/done a 1 ??? tu ne lance pas la conversion

  10. #9
    invitebdba06cc

    Re : Problème de CAN

    Go/done est compris dans le registre ADCON0 c'est le dernier ou l'avant dernier bit je sais plus.

    Euh pour le "case" je suis pas très très fort en en programmation je n'ai jamais utiliser ça mais j'ai trouver une explication sur le site du zéro je vais voir ça

  11. #10
    invitebdba06cc

    Re : Problème de CAN

    Je viens d'essayer une nouvelle approche de ce que je faisais avant, et ça fonctionne en simulation merci vous m'avez aidez a prendre un peu de recule.
    Je suis en projet lundi j'essayerai mon nouveau programme pour voir si sa fonctionne "en vrai" je vous tiendrais au courant

  12. #11
    invitebdba06cc

    Re : Problème de CAN

    Je viens de résoudre le problème, en fait il faut redémarrer le convertisseur 2 fois donc il suffit juste d'écrire 2 fois" GODONE=1;" dans la fonction conversion.

    Voilà bonne journée

  13. #12
    zhal

    Re : Problème de CAN

    Je trouve ta solution pour le peu etonnante, peux tu nous donner le bout de code ou GOdone est deux fois a un ?

  14. #13
    Jack
    Modérateur

    Re : Problème de CAN

    Citation Envoyé par zhal Voir le message
    - Tes IF, sa ne va pas du tout. Penche toi sur une boucle CASE
    Et tu ferais ça comment?

    A+

  15. #14
    zhal

    Re : Problème de CAN

    Je ne peux pas verifier là ou je suis, si le case ne peut prendre en compte qu'une valeur fixe comme condition ou une plage de valeurs.

    Dans tous les cas un if / elseif ... fonctionnerait

    (A moins que cela soit intentionnel de sa part quee plusieurs tests soit positif pour une même valeur)

  16. #15
    Qristoff
    Animateur Électronique

    Re : Problème de CAN

    Utiliser 2 CAN pour faire de la détection de touche contact, c'est un peu du n'importe quoi...mais bon c'est surement le prof qui t'as dit de faire comme ça (je ne m'étonne plus de rien !)
    Par contre, certains t'ont demandé le schéma et toujours rien en vue !
    Tout existe, il suffit de le trouver...!

  17. #16
    zhal

    Re : Problème de CAN

    Je suis d'accord avec toi Qristoff, mais apres pour moi, tant que le fond reste coherent les profs sont pafois farfelus ...

  18. #17
    Jack
    Modérateur

    Re : Problème de CAN

    Citation Envoyé par zhal Voir le message
    Je ne peux pas verifier là ou je suis, si le case ne peut prendre en compte qu'une valeur fixe comme condition ou une plage de valeurs.

    Dans tous les cas un if / elseif ... fonctionnerait

    (A moins que cela soit intentionnel de sa part quee plusieurs tests soit positif pour une même valeur)
    malheureusement en C on ne peut pas traiter un plage de valeurs dans un case (contrairement au pascal).

    A+

  19. #18
    Jack
    Modérateur

    Re : Problème de CAN

    Citation Envoyé par Qristoff Voir le message
    Utiliser 2 CAN pour faire de la détection de touche contact, c'est un peu du n'importe quoi...mais bon c'est surement le prof qui t'as dit de faire comme ça (je ne m'étonne plus de rien !)
    Par contre, certains t'ont demandé le schéma et toujours rien en vue !
    quel est le problème exactement? Le nombre de CAN ou l'utilisation d'un CAN pour faire de la détection de touches? Parce que dans ce dernier cas, c'est utilisé dans des télécommandes du commerce et ça présente l'avantage de n'utiliser qu'une entrée pour détecter plusieurs touches.

    A+

  20. #19
    invitebdba06cc

    Re : Problème de CAN

    Désolé pour le schéma, le voici:



    En fait j'utilise 2 convertisseurs car j'ai une tension de référence de 3V ce qui fait que la marge de tension de mon pont diviseur de tension est assez faible et si je mets mes 10 boutons sur le même convertisseur cela risque de poser des problèmes.

    Pour le code ça ressemble à cela:
    Code:
    unsigned char conversion(unsigned char voie)
    	{
    	 ADCON0=0b00000011+(voie<<2);
             tempo(200);
             GODONE=1;
    
    	 while(GODONE==1);	//Attendre la fin de la conversion
    	 return ADRESH;	
    	}
    Le GODONE est initialisé une première fois dans le registre ADCON0 (2ème bit en partant de la droite) et une seconde fois après une petite tempo.


    Voilà en espérant que cela vous aides
    Images attachées Images attachées  

  21. #20
    Forhorse

    Re : Problème de CAN

    Je crois que la réponse est tout simplement dans la datasheet.
    Il me semble qu'il est bien stipulé que le bit GODONE ne DOIT PAS être mis à 1 en même temps que l'on configure le CAN

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  2. Problème Equa diff sur problème physique
    Par invite8f59deab dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 03/12/2010, 20h45
  3. problème d'équation et aussi un autre problème de maths
    Par invitefab47bfd dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 23/09/2009, 19h08
  4. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par mat_the_bad_boy dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.