Carte Explorer 16 et DSPic33FJ256GP710
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Carte Explorer 16 et DSPic33FJ256GP710



  1. #1
    philouxy

    Carte Explorer 16 et DSPic33FJ256GP710


    ------

    Bonjour à tous,

    Je viens vers vous pour des soucis avec un DSPic et la carte Explorer 16 que je viens d’acquérir.

    La carte fonctionne avec le code démo fournis avec la carte, j'ai même modifié les variables pour afficher des informations sur l'affichage pour voir si tout était en ordre au niveau de la compilation --> Ok

    Voici quelques infos sur le matériel utilisé :
    1x Carte explorer 16 avec un DSPic33FJ256GP710
    IDE : Mplab 8.76 avec compilateur C30

    Mon problème c'est que je ne suis pas sur de bien configurer mes différents fusibles, voir mes différents registres pour la partie oscillateur ; donc c'est pour cela que j'ai besoin d'un coup de main de gens experts en la matière... vous !!!

    J'ai repris les codes fournis dans le code démo pour la gestion de l'affichage, voir fichiers en annexe : lcd.c/h et delay.c/h

    Ce que j'aimerai déja configurer c'est d'avoir une horloge (fréquence de cycle de 40Mhz) avec une horloge externe 8Mhz, en utilisant justement la PLL du PIC
    En suivant la doc de chez microchip avec ces différentes sections, j'ai essayé de configurer mes registres pour l'oscillateur,... tout compile --> cool, mais quand j’implémente le code sur la carte c'est tout de suite moin cool... Au lieu d'avoir un affichage instantané, je me retrouve avec une affichage qui affichage caractère par caractère à la minute et encore je suis gentil, je pense que je ne dois pas avoir bien configurer mes registres.

    Je vous mets en annexe, le tout est zipé :
    Mon code (main) + code de l'affichage

    en tout cas je vous remercie déjà de me lire et si vous avez la moindre infos pour me dépatouiller n'hésiter je suis dans les starting blocs... Par avance un grand MERCI

    Amicalement le cht'y Philou

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    DAUDET78

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    A transférer dans "forum Electronique"
    J'aime pas le Grec

  3. #3
    JPL
    Responsable des forums

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    C'est fait.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #4
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    La configuration des dsPIC33 est relativement sophistiquée car une partie se fait par les bits de configuration et une autre par quelques instructions au début du main.

    La meilleure méthode est de s'inspirer des exemples de code qui décrivent cela clairement.
    Tu trouveras ces exemples de code sur la page de ton dsPIC dans la rubrique Documentation & Software.
    Par exemple le code example CE104, CE110 ...

    Attention je pense que le dsPIC sur ta carte EXPLORER16 est un dsPIC33FJ256GP710A plutot qu'un dsPIC33FJ256GP710 plus ancien

    a+

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

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Merci Risc pour cette réponse,

    Je vais regarder cela... effectivement c'est un la version A que j'ai sur ma plaque...

    Je reviendrai surement dans le coin, si j'ai d'autres questions... en tout cas merci pour cette première piste

    Amicalement le cht'y Philou


    PS : je mets quand meme une partie des codes de configuration que j'ai écris... peut-être y aura-ti-il quelques choses de choquant à vos yeux...

    doc trouvée aussi :
    lien spécifique à la partie oscillateur : Oscillateur DSPic
    voici la doc en pdf pour la carte explorer 16 : PDF Carte Explorer 16
    voici la doc du Dspic que j'utilise (DSPic 33FJ256GP710A) : PDF dspic 33FJ

    Si dessous : ma configuration des fusibles pour indiquer que j'aimerai travailler avec l'oscillateur externe qui est un quartz de 8MHz branché sur la carte Explorer 16, ainsi que d'activé la PLL du DSpic pour obtenir par la suite une fréquence de cycle de 40MHz, et ne pas activer le watchdog

    Apparement j'ai écris la même chose que sur le code démo fourni avec la carte, mais bon si vous voyez un truc qui vous choque dites-le moi...

    Code:
    //----------------------------------------------------------------------------//
    //--- Configuration des fusibles ---//
    //----------------------------------------------------------------------------//
    //--- Choix du type d'oscillateur ---//
    _FOSCSEL(FNOSC_PRIPLL); 				// choix oscillateur à quartz 							
    
    //--- Configuration de l'oscillateur ---// 	
    // Pas d'acivation au niveau contrôle du l'oscillateur 
    // Ne pas activer la PIN OSC2 en mode IN/OUT 
    // Choix de l'oscillateur XT --> < 20MHz 
    _FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT); 
    
    //--- Configuration du Watchdog ---//
    _FWDT(FWDTEN_OFF);
    Ensuite, je me suis attaqué la partie configuration des registres liés à l'oscillateur, c'est-là que je bloque plus, car je ne suis pas du tout sur si la configuration que j'applique, et celle que j'aimerai. En gros j'aimerai avoir une fréquence d'oscillation (interne au dspic de 40MHz, selon la doc c'est possible... )

    Code:
    void init_oscillateur(void)
    {
    	//--- configuration de l'oscillateur interne à 40Mhz ---//
    	// utilisation fomrules du datasheet du DSPic33FJ256GP710A --> page 146
    	// Fcy = Fosc / 2 ; Fosc = Fin(M/(N1 N2))
    	// Fin = 8Mhz --> Fosc = 80Mhz --> Fcy = 40Mhz 
    	OSCCONbits.COSC 	= 0x03;		// sélection de l'oscillateur XT 
    	OSCCONbits.CLKLOCK	= 0;		// l'horloge et la PLL peuvent être modifié 	
    	
    	CLKDIVbits.ROI		= 0; 		// pas d'effet si il y a interruption 
    	CLKDIVbits.DOZE		= 0; 		// pas de réduction sur l'horloge Fcy /1
    	CLKDIVbits.DOZEN	= 0; 		
    	CLKDIVbits.PLLPRE 	= 0x00; 	// N1 = 2	
            CLKDIVbits.PLLPOST 	= 0x00; 	// N2 = 2 	
    	
    	PLLFBDbits.PLLDIV 	= 0x28;		// M = 40  
    }

  7. #6
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Les PIC de la famille 16 bits (dsPIC33 et PIC24) ont un taux de division par 2 : Fcycle = Fosc / 2.
    Donc, pour avoir la fréquenc max des dsPIC33FJ... il faut avoir en interne Fosc = 80MHz ce qui donne Fcycle = 40MIPS.
    Pour éviter d'avoir des quartz trop élevés, on peut chosir le taux de PLL interne entre 3 valeurs : x4, x8 ou x16.
    Généralement, on utlise un oscillateur de 7,37MHz x 16 ce qui donne une fréquence proche de 80MHz.
    7.37MHz est la valeur "nominale" de l'oscillateur interne. Si tu as besoin d'une horloge plus précise, prend un quartz externe à 7.37MHz.

    Vérifie les "codes examples". Cela permet de gagner beaucoup de temps ;=)

    a+
    Dernière modification par RISC ; 29/10/2012 à 21h27.

  8. #7
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à tous,

    Et merci à toi RISC pour ces explications...

    je viens encore à vous... je me replonge sur le DSPic avec un programme simple on va dire : faire clignoter une led à l'aide d'un timer (timer1) qui doit me créer une interruption toutes les 500ms, je crois que la configuration de celui-ci et des fusibles n'ont pas posé de problèmes, enfin on verra plus tard si la led clignote

    Ma question cette fois-ci est plus générale : dans le datasheet du composant (PDF_DSPIC 33Fxxx) page 163 - chapitre 11, on parle de la configuration des entrées - sorties avec les différents registres...

    J'ai compris que le registre TRISx permet de définir soit les pins en entrée ou en sortie, ca c'est ok (1: entrée - 0: sortie), maintenant on a 2 registres PORTx et LATx. De ce que je comprends c'est que le registre LATx permet de lire ou d'écrire une valeur logique, tandis que le registre PORTx lui permet de lire ou écrire une valeur (tension) que nous avons sur la pin... Premièrement avez-vous compris la même chose ? deuxièment : si je veux allumer ou éteindre ma la led j'utilise quel registre ?

    Je dois dire que j'ai pas bien compris la différence
    Alors comme d'hab, si vous avez des suggestions, remarques, liens ou autres, je me ferai un plaisir de vous lire

    Amicalement le cht'y Philou

  9. #8
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Concernant les broches d'entrées/sorties, il faut utiliser PORTx pour les entrées et LATx pour les sorties.
    L'explication ayant été données des dizaines de fois sur ce forum fait une recherche si tu veux avoir les détails.

    Pour le reste, utilise les exemples de code pour ton dsPIC33 que tu trouveras ici : http://www.microchip.com/wwwproducts...cName=en024679 sous la rubrique Documentation and Software

    NB : je te conseille d'utiliser le dsPIC33FJ256GP710A plutôt que le dsPIC33FJ256GP710 qui était le premier dsPIC33 et comporte un certain nombre de bugs qui ont été corrigés dans la version "A". Tu peux acheter un module processeur pour la carte EXPLORER16 avec le dsPIC33FJ256GP710A (référence MA330011).

    a+

  10. #9
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Merci à nouveau à toi RISC pour te pencher sur le sujet...

    là je reviens sur le code complet, c'est-à-dire faire clignoter une led. J'ai écris mon code complet pour faire clignoter une led sous interruption (code que vous trouverez en annexe), j'ai fais la configuration du timer1 pour obtenir une interruption toutes les 500ms et dans cette interruption lié à ce timer je fais mon changement d'état par rapport à la led... ca compile, super Mais quand je veux passez en mode debuuger avec le ICD3, pas de clignotement, il n'y a pas de passage dans ma fonction d'interruption...Je suis vraiment perdu, car j'ai regardé avec les codes exemples donnés par Microchip, je ne vois pas ce que j'ai fait de faut... alors je demande avis aux expert...

    Amicalement le cht'y Philou
    Fichiers attachés Fichiers attachés

  11. #10
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Si tu examines les exemples de code (rubrique documentation & SW) qui se trouve sur la page du dsPIC33FJ256GP710A, tu verras qu'il faut initialiser (comme tu l'avais fait précédemment) les pré et post-diviseurs de la PLL pour obtenir Fosc = 80MHz, c'est à dire Fcycle = 40MHz.

    Je te recommande le CE143 qui fait exactement ce que tu veux faire : interruption Timer 1 avec clignotement

    a+

  12. #11
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonjour à tous,

    Merci à tous pour le suivi de cette discussion... et surtout un Grand merci à RiSC pour ton soutien et de m'avoir bien aiguiller
    Et maintenant c'est bon j'ai réussi à faire clignoter ma led (waaouhhh, pfff )

    Bref, j'ai réussi à comprendre mon erreur, en m'inspirant du code que m'a indiqué RISC et fourni par Microchip --> voir le site de microchip , plus précisément le code CE143... http://www.microchip.com/wwwproducts...cName=en024679

    j'ai testé le code démo, celui-ci fonctionnait (heureusement)...
    j'ai mis un moment pour comparer la différence avec le mien (code), l'erreur que j'ai commise se trouvait dans la configuration du Timer1 avec le registre T1CON et le bit TCS, qui permet de sélectionner soit la clock interne, soit la clock externe, et j'ai bien sur choisi la clock externe + j'ai "oublié" des appels de routines en assembleur (bon j'ai pas tout compris) que j'ai rajouté dans la partie de la configuration de l'oscillateur... éléments indiqué dans les différents datasheet de chez microchip.

    voici ci-dessous les debout de code que j'ai du modifier

    Code:
    void init_timer1(void)
    {
            //--- registre de configuration du Timer1 ---//
            T1CONbits.TON = 0;       // désactiver le timer pour la configuration 
            T1CONbits.TCS = 0;       // clock interne 
            T1CONbits.TSYNC = 0;   // synchroniser la clock externe        
            T1CONbits.TCKPS = 3;   // prédivseur régler à 256 --> 8Mhz/256 = 31250Hz --> 32us 
            
            TMR1 = 0;  // mise à zéro du registre lié au timer 
    
            PR1 = 49910;  // période du timer --> 500ms/32us --> 62535 - 15625 = 49910
    
            //--- registres des configurations des interruptions liées au Timer1 ---//
            IPC0bits.T1IP = 7;   // choix de la priorité --> ici la plus élevée 7 = 111
            IFS0bits.T1IF = 0;   // remise à zéro de l'interruption 
            IEC0bits.T1IE = 1;  // activation de l'interruption lié au Timer1 
    
            T1CONbits.TON = 1;  // activer le timer1
    }
    Code:
    init_osci()
    {
            //--- configuration de l'oscillateur interne à 40Mhz ---//
            // utilisation fomrules du datasheet du DSPic33FJ256GP710A --> page 146
            // Fcy = Fosc / 2 ; Fosc = Fin(M/(N1 N2))
            // Fin = 8Mhz --> Fosc = 16Mhz --> Fcy = 8Mhz 
            //OSCCONbits.COSC       = 3;  // sélection de l'oscillateur XT 
            //OSCCONbits.CLKLOCK    = 0;  // l'horloge et la PLL peuvent être modifié     
            
            //CLKDIVbits.ROI        = 0;  // pas d'effet si il y a interruption 
            //CLKDIVbits.DOZE       = 0;  // pas de réduction sur l'horloge Fcy /1
            //CLKDIVbits.DOZEN      = 0;            
            CLKDIVbits.PLLPRE       = 0;            // N1 = 2       
        CLKDIVbits.PLLPOST  = 0;                    // N2 = 2       
            
            PLLFBDbits.PLLDIV       = 38;           // M = 40  
    
            __builtin_write_OSCCONH(0x03);    // fonction appelant du code assembleur 
                                                    // configuration du registre NOSC (OSCCON) --> 
                                                    // 011 = Primary Oscillator with PLL (XTPLL, HSPLL, ECPLL)
            __builtin_write_OSCCONL(0x01);          // Active la commutation de la clock
            while(OSCCONbits.COSC != 0b011);        //
    }
    La prochaine étapes, c'est à l'aide d'un bouton poussoir, de faire déplacer le clignotement sur la rangée de LEDs

    A tout bientôt pour de nouveau problèmes

    Amicalement philou

    PS : je mets le code complet si ca peut aider
    Fichiers attachés Fichiers attachés
    Dernière modification par philouxy ; 18/12/2012 à 15h26.

  13. #12
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à vous,

    Je recommence à nouveau à coder avec le DSPic33FJ256, et j'ai repris la où je m'étais arrêté, c'est-à-dire réussi à faire déplacer mon clignotement à l'aide d'un bouton poussoir et cela fonctionne....,
    ensuite je me suis amuser à ré-implémenter un script d'anti-rebond au niveau des touches, cela fonctionne... mais alors qu'est-ce qui cloche ???

    C'est au niveau du Timer que j'ai configuré, j'aimerais avoir une interruption toutes les 5ms, donc j'ai fait mes différents calculs selon les configurations de l'oscillateur et du Timer1 voir les différents codes, et la je me retrouve avec un clignotement comme le programme précédent, et je n'arrive pas à comprendre ce que je fais de faux puisque j'ai l'impression de bien configurer le timer, de plus le script sur l'oscillateur n'a pas bougé...

    Je désire avoir une clock interne de 8Mhz pour cela j'ai opéré comme suis : --> voir le code ci-dessous !!!

    Code:
    //----------------------------------------------------------------------------------//
    //--- nom 				: init_osci
    //--- entrée - sortie 	: - / - 
    //--- description 		: configure l'oscillateur du DSP pour utiliser l'horloge 
    //						  à 8MHz
    //----------------------------------------------------------------------------------//
    init_osci()
    {
    	//--- configuration de l'oscillateur interne à 40Mhz ---//
    	// utilisation fomrules du datasheet du DSPic33FJ256GP710A --> page 146
    	// Fcy = Fosc / 2 ; Fosc = Fin(M/(N1 N2))
    	// Fin = 8Mhz --> Fosc = 40Mhz --> Fcy = 40Mhz 
    	OSCCONbits.COSC 	= 3;			// sélection de l'oscillateur XT 
    	OSCCONbits.CLKLOCK	= 0;			// l'horloge et la PLL peuvent être modifié 	
    	
    	CLKDIVbits.ROI	= 0; 				// pas d'effet si il y a interruption 
    	CLKDIVbits.DOZE	= 0; 				// pas de réduction sur l'horloge Fcy /1
    	CLKDIVbits.DOZEN	= 0; 		
    	CLKDIVbits.PLLPRE 	= 0; 			// N1 = 2	
        CLKDIVbits.PLLPOST 	= 0; 			// N2 = 2 	
    	
    	PLLFBDbits.PLLDIV 	= 38;			// M = 40  
    
    	__builtin_write_OSCCONH(0x03); 		// fonction appelant du code assembleur 
    										// configuration du registre NOSC (OSCCON) --> 
    										// 011 = Primary Oscillator with PLL (XTPLL, HSPLL, ECPLL)
    	__builtin_write_OSCCONL(0x01);		// Active la commutation de la clock
    	while(OSCCONbits.COSC != 0b011); 	//
    }
    ensuite j'ai configuré le Timer 1 comme suis, pour les calculs de l'interrupteur voir mes commentaires : --> voir le code ci-dessous

    Code:
    //----------------------------------------------------------------------------------//
    //--- nom 				: init_timer1
    //--- entrée - sortie 	: - / - 
    //--- description 		: initilaiser le timer 1 pour avoir une horloge de 100ms 
    //----------------------------------------------------------------------------------//
    void init_timer1(void)
    {
    	//--- registre de configuration du Timer1 ---//
    	T1CONbits.TON = 0; 			// désactiver le timer pour la configuration 
    	T1CONbits.TCS = 0; 			// clock interne 
    	T1CONbits.TSYNC = 0; 		// synchroniser la clock externe 	
    	T1CONbits.TCKPS = 3; 		// prédivseur régler à 256 --> 8Mhz/256 = 31250Hz --> 32us 
    	
    	TMR1 = 0; 					// mise à zéro du registre lié au timer 
    
    	PR1 = 62379; 				// période du timer --> 5ms/32us --> 62535 - 156 = 62379 
    
    	//--- registres des configurations des interruptions liées au Timer1 ---//
    	IPC0bits.T1IP = 7; 			// choix de la priorité --> ici la plus élevée 7 = 111
    	IFS0bits.T1IF = 0; 			// remise à zéro de l'interruption 
    	IEC0bits.T1IE = 1; 			// activation de l'interruption lié au Timer1 
    
    	T1CONbits.TON = 1; 			// activer le timer1
    }
    Mais le problème, c'est que je devrais avoir aussi un clignotement rapide puisque je le traite dans ma boucle d'interruption la gestion du clignotement des leds, mais celui-ci se fait à la meme vitesse que le programme d'avant... beuh tout triste...

    Je ne comprends pas... est-ce le mode debbuggeur que j'utilise ou le code que j'implémente...

    si vous avez des idées, c'est bien volontiers... je vous mets le code complet de mon main

    Un tout grand merci d'encore me lire après cette si grande interruption...

    Amicalement le cht'y Philou
    Fichiers attachés Fichiers attachés

  14. #13
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    J'ai l'impression que tu confonds Fosc et Fcycle....Fosc c'est la fréquence en SORTIE de la PLL (si elle est utilisée). Fcycle = Fosc / 2

    Regarde la datasheet concernant l'oscillateur. Une figure explique bien le cheminement des horloges.
    Si tu programmes ton TIMER1 et que tu utilises la PLL, il faut utiliser Fosc = 40MHz dans tes calculs...

    a+

  15. #14
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à tous,

    Je reviens sur mon problème (aie aie aie) cité plus haut ... Mais non c'est pas pour une nouvelle question, c'est pour une solution !!!
    Grace à un autre forum, une personne (que je remercie du reste) m'a aiguillé sur mon erreur --> c'est au niveau du timer que le problème se trouvait.

    La valeur calculée était juste (oui oui), mais je la soustrayais de la valeur globale du timer (à ne pas faire), eh non, juste il faut donner la valeur brut ... :

    Code:
    PR1 = 781; // période du timer --> 5ms/6.4us = 781.25 = 781
    Mais comme vous commencez à me connaître, je viens pour une autre question... c'est fois sur la configuration des registres liées au ADC, je m'essaie à configurer les différents registres liés à l'ADC, et ainsi que la routine d'interruption lié à l'ADC, mais lors de l'exécution, on ne passe jamais dans cette routine d'interruption. Mon code compile correctement, mais rien n'y fait pas d'interruption lié au à mon ADC

    J'ai lu en partie la section 16 concernant l'ADC, sans utiliser le DMA (section ADC) ; il me semble que les registres sont biens configurés.

    Voici ma configu concernant mes registres :
    Code:
    void init_adc()
    {
    	//--- gestion des registres liés au ADC ---//
    	//--- mode d'échantillonage --> bit 2 ---// 
    	AD1CON1bits.SAMP = 0;
    	AD1CON1bits.ASAM = 1; 			// converstion après la dernière converstion  
    
    	//--- choix de l'échantillonage --> bit 3 --// 
    	AD1CON1bits.SIMSAM = 0; 		// ici qu'un seul canal 
    
    	//--- Choix de la source pour le temps d'échantillonage (clock) --> bit 5 à 7 ---// 
    	AD1CON1bits.SSRC = 0; 			// 0b111 = 7 --> Counter interne Automatic Trigger  
    
    	//--- Choix du format pour le buffer --> bit 8 à 9 ---// 
    	AD1CON1bits.FORM = 0; 			// format Unsigned Interger (0 - 1023 or 0 - 4095) 
    	
    	//--- Choix du type de convertion (12/10 bits) -->bit 10 du registre ---//
    	AD1CON1bits.AD12B = 0; 			// convertisseur sur 10 bits --> 0 
    									// convertisseur sur 12 bits --> 1
    
    	//--- Configuration de la vitesse de l'interruption après échnatillonnage --> bit 2 à 5 ---// 
    	AD1CON2bits.SMPI = 0;			// genère une interrruption après échantillonnage  
    
    	//--- Choix des canaux (simple - deux - multiple) --> 2 bits de 8 et 9 ---//	
    	AD1CON2bits.CHPS = 0; 			// seulement un chanal = CH0
    
    	//--- Choix de la référence des tension --> 3x bits de 13 à 15 ---//
    	AD1CON2bits.VCFG = 0; 			// Vref + = AVdd = 5V ou 3V & Vref - = AVss = GNS  
    
    	//--- choix de la vitesse de conversion selon la clock choisie --> 8x bits de 0 à 7---// 
    	AD1CON3bits.ADCS = 0x27;		// 0b 0010 0111 = 0x27 = 39  
    	 								// 1 / Fcy = Tcy  
    	 								// ADCX + 1 = x
    	 								// Tcy * x = Tad = 1us  
    									// 40MHz --> 25ns => 25ns * 40 = 1us
    
    	//--- Temps automatic d'échantillonage --> 5x bit de 8 à 12 ---//
    	AD1CON3bits.SAMC = 0x03; 		// 3 TAD
    
    	//--- Sélection du channal --> bits de 0 à 4 et bit 7---// 
    	AD1CHS0bits.CH0SA = 0x05; 		// selection de l'entrée analogique sur le chanel 0 (mesure)  
    	AD1CHS0bits.CH0NA = 0; 			// selection de la référence Vref- (masse) 
    
    	//--- gestion de l'interruption ---// 
    	//--- reset du flag d'interruption lié à l'AD ---// 
    	IFS0bits.AD1IF = 0;				// remise à zéro 
    
    	//--- priorité de l'interruption ---// 				
    	IPC3bits.AD1IP = 7; 			// ici level le plus haut --> 7  	
    
    	//--- activation de l'interruption ---// 
    	IEC0bits.AD1IE = 1; 
    
    	//--- activation du convertisseur ADC ---// 
    	AD1CON1bits.ADON = 1; 			// convertisseur actif	 
    }
    ainsi que ma petite fonction d'interruption :

    Code:
    void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt( void )
    //void __attribute__((__interrupt__)) _ADC1Interrupt( void )
    {
    	//--- indication de l'interruption ---// 
    	info_interrupt_ADC = 1;
    
    	//--- lecture du registre pour récuperer la valeur l'entrée analogique ---// 
    	valeur_adc = ADC1BUF0;			// lecture du buffeur
    
    	//--- reset du flag d'interruption ---// 
    	IFS0bits.AD1IF = 0;	
    }
    Alors si vous voyez un petit truc choquant, faîtes-moi signes
    Bonne lectures les programmeurs
    Amicalement le cht'y Philou

  16. #15
    invite830075ec

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    ASAM = 1, donc le sample démarre automatiquement en fin de la conversion précédente.
    SSRC = 0, donc la conversion est déclenchée manuellement et SAMC n'est pas utilisé, il peut rester à 0.

    En faisant _SAMP = 0, on déclenche la conversion, mais tu l'a mis en tout début avant de paramétrer l'ADC, donc il n'agit pas.

    En fin de paramétrage, il faut attendre par tempo la fin du sample et la on peut faire le _SAMP = 0.
    En fin de conversion _SAMP et _DONE repasse à 1 par hard, et l'ISR s'exécute.

  17. #16
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à tous,

    Merci satinas, pour ta réponse...
    Je reviens vers vous après ce long moment de silence. Suite à mon interrogation sur la config ADC décrite ci-dessus, je me suis aperçu de l'importance dans quel ordre on place la configuration des registres, je vous mets ma nouvelle config ci-dessous :

    Code:
    void init_adc()
    {
            //--- gestion des registres liés au ADC ---//
            //--- Sélection du channal --> bits de 0 à 4 et bit 7---// 
            AD1CHS0bits.CH0SA = 0x05;               // selection de l'entrée analogique sur le chanel 0 (mesure)  
            AD1CHS0bits.CH0NA = 0;                  // selection de la référence Vref- (masse) 
    
            //--- Choix du type de convertion (12/10 bits) -->bit 10 du registre ---//
            AD1CON1bits.AD12B = 0;                  // convertisseur sur 10 bits --> 0 
                                                                            // convertisseur sur 12 bits --> 1
            
            //--- Choix du format pour le buffer --> bit 8 à 9 ---// 
            AD1CON1bits.FORM = 0;                   // format Unsigned Interger (0 - 1023 or 0 - 4095)
            
            //--- Choix de la source pour le temps d'échantillonage (clock) --> bit 5 à 7 ---// 
            AD1CON1bits.SSRC = 0x07;                        // 0b111 = 7 --> Counter interne Automatic Trigger
    
            //--- choix de l'échantillonage --> bit 3 --// 
            AD1CON1bits.SIMSAM = 0;                 // ici qu'un seul canal
            
            //--- mode d'échantillonage --> bit 2 ---// 
            AD1CON1bits.SAMP = 0;
            AD1CON1bits.ASAM = 1;                   // converstion après la dernière converstion  
    
            //--- Choix de la référence des tension --> 3x bits de 13 à 15 ---//
            AD1CON2bits.VCFG = 0;                   // Vref + = AVdd = 5V ou 3V & Vref - = AVss = GNS  
             
            //--- Choix des canaux (simple - deux - multiple) --> 2 bits de 8 et 9 ---//    
            AD1CON2bits.CHPS = 0;                   // seulement un chanal = CH0
              
            //--- Configuration de la vitesse de l'interruption après échnatillonnage --> bit 2 à 5 ---// 
            AD1CON2bits.SMPI = 0;                   // genère une interrruption après échantillonnage  
    
            //--- Temps automatic d'échantillonage --> 5x bit de 8 à 12 ---//
            AD1CON3bits.SAMC = 0x03;                // 3 TAD
    
            //--- choix de la vitesse de conversion selon la clock choisie --> 8x bits de 0 à 7---// 
            AD1CON3bits.ADCS = 0x27;                // 0b 0010 0111 = 0x27 = 39  
                                                                            // 1 / Fcy = Tcy  
                                                                            // ADCX + 1 = x
                                                                            // Tcy * x = Tad = 1us  
                                                                            // 40MHz --> 25ns => 25ns * 40 = 1us
    
            //--- gestion de l'interruption ---// 
            //--- reset du flag d'interruption lié à l'AD ---// 
            IFS0bits.AD1IF = 0;                             // remise à zéro 
    
            //--- priorité de l'interruption ---//                          
            IPC3bits.AD1IP = 0x07;                  // ici level le plus haut --> 7         
    
            //--- activation de l'interruption ---// 
            IEC0bits.AD1IE = 1; 
    
            //--- activation du convertisseur ADC ---// 
            AD1CON1bits.ADON = 1;                   // convertisseur actif   
    }

  18. #17
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Je viens sur un nouveau sujet plus liée à la carte explorer qu'à un problème de config de registre.

    En me remettant sur la programmation de la carte Explorer 16, je me suis aperçu que les concepteurs de la carte avait placé sur la même pin RA7, un switch S5 et une led D10 (voir la page 42 - 43 du datasheet lié à la carte) et j'ai pu m'apercevoir que si je configurerai ma ligne en entrée (numérique), celle-ci est toujours active (donc je ne peux pas utiliser cette touche) ; donc ma question, y a-t-il un moyen "soft" de ne pas tenir compte de la petit chute de tension sur cette ligne qui est créé par la Led, et ainsi pouvoir utiliser le switch.

    Merci d'avance pour tous vos retours

    Amicalement - le cht'y Philou

  19. #18
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Plusieurs LED partagent des broches avec d'autres fonctions c'est pourquoi le jumper JP2 peut-être retiré.

    Fais le test suivant : retire JP2 et fait un petit programme qui ne fait que tester cette broche avec un point d'arrêt dans un if.

    a+

  20. #19
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Plusieurs LED partagent des broches avec d'autres fonctions c'est pourquoi le jumper JP2 peut-être retiré.

    Fais le test suivant : retire JP2 et fait un petit programme qui ne fait que tester cette broche avec un point d'arrêt dans un if.

    Attention cette broche est en analogique au reset...il faut la configurer en digital (si tu utilises un dsPIC33FJ256GP710A)

    a+

  21. #20
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Hello RISC,

    Je me suis aussi également aperçu que je pouvais ôter le Jumper JP2, mais si j'aimerai utiliser les LED et cette fameuse touche S5, je ne peux pas, car simplement la petite chute de tension du à la pull-up sur la ligne du switch et qui est aussi sur la led D10 créer une une chute de tension sur ma ligne RA7, et ainsi m'indique que cette ligne est toujours active = état bas...,

    donc je me demandais avec les différentes configurations des registres de sorties : LATx ou PORTx, si on pouvait pallier à ce défaut "de conception" ; apparemment je n'ai pas trouvé de réponse à part de changer de switchs. Et n'utiliser que le switch S5, si le JUMP JP2 est enlevé...

    Mais si vous avez d'autres solutions à me proposer je suis preneur,...

    Amicalement le cht'y Philou

  22. #21
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut,

    Il n'y a rien à faire avec les LATs et les PORTs...Cable-toi un switch sur la partie prototype de la carte ;=)
    Utilises-tu déjà tous les autres switches ?

    a+

  23. #22
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à tous,

    Je suis entrain développer un petit simulateur de feu de croisement sur une carte Explorer 16 équipé d'un DSPic33FJ256... et j'ai un soucis sur un switch que j'ai monté sur la PIN RB0 et qui n'est pas détecté au niveau soft. mais électriquement j'ai bien une transition d'état.

    Chose marrante (enfin pas temps que ça), comme j'utilise la carte Explorer, je me suis dit que j'allais utiliser l'une des touches implémentée sur la carte pour contrôler si c'est mon code qui est foireux ou si y a un autre problème... la au miracle, ma fonction d'antirebond fonctionne et ce qui va avec aussi.

    Maintenant faut que je regarde pourquoi : la pin RD13 du port D (ça fonctionne) & la pin RB0 du port B (la ca fonctionne pas)... pour l'instant ce que je vois que c'est la PIN RB0 peut être aussi utilisee en analogique...

    Mais la je bloque complètement quand meme, je vais me replonger dans la doc du DSP.

    Alors si vous voyez quelques choses dans la config, les pins, ou autres config, je vous serais très reconnaissant

    Amicalement - Philou
    Fichiers attachés Fichiers attachés

  24. #23
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir à tous,

    J'ai pt-être trouvé une explication concernant la PIN RB0 qui n'est pas détectée par le DSP.

    J'ai remarqué en lisant plusieurs fois le datasheet (voir p.14 et p.21) que apparemment cette PIN a aussi d'autres fonctions qu'une I/O simple, elle fait aussi office d'entrée analogique, mais pas que ça :
    Apparemment elle est servie quand on fait de la programmation ou du debugging. Comme ici j'utilise l'ICD3 en mode debugging, je me dis que cette pin n'est pas prise en compte lors de mon programme.

    C'est une supposition !

    Vous en pensez quoi ? En tout cas, un grand merci de me lire, et si vous avez des remarques ou suggestion, je suis toujours preneur pour mieux connaître...je me ferai un plaisir vous lires

    Amicalement - Philou

    PS:
    http://www.hostingpics.net/viewer.ph...5504pining.png

  25. #24
    invite830075ec

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Salut, dans le datasheet de ton pic, il y a un chapitre "I/O Ports", et un sous -chapitre "Configuring Analog Port Pins"

  26. #25
    RISC

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    salut,
    comme l'a dit satinas, lis la section sur les E/S...la broche RB0 est multiplexée avec AN0, et sur les PICs l'analogique est prioritaire sur le digital au reset..
    a+

  27. #26
    philouxy

    Re : Carte Explorer 16 et DSPic33FJ256GP710

    Bonsoir tout le monde,

    Merci Risc & Satinas pour vos messages

    vous m'avez mis sur la piste concernant cette PIN RB0, j'ai eu aussi la même information sur le forum de microchip, car comme vous me l'avez marquer : on peut la configurer en mode I/O pure, mais fallait aller chercher l'infos; je l'aurai pas trouver tout seul.

    Si on regarde sur le datasheet du DSPic -> voir post#5, page 164... cela nous donne l'explication.

    Clearing any bit in the ADxPCFGH or ADxPCFGL
    register configures the corresponding bit to be an
    analog pin. This is also the Reset state of any I/O pin
    that has an analog (ANx) function associated with it.
    avec le code ci-dessous, cela me permet de définir la pin RB0 comme une I/O standart.
    Code:
    AD1PCFGLbits.PCFG0 = 0x01;
    Je vous mets le code complet si ca vous intéresse !!!

    En tout cas un grand merci pour vos suggestions

    Amicalement - philou
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. USB host embedded sur carte explorer 16
    Par invitecb573265 dans le forum Électronique
    Réponses: 6
    Dernier message: 15/10/2012, 09h37
  2. Carte Explorer 16 en mode USB host et périphérique USB
    Par invitecb573265 dans le forum Électronique
    Réponses: 14
    Dernier message: 30/08/2012, 14h15
  3. Copie cle usb vers carte sd avec une carte FEZ Domino ?
    Par inviteec1e421e dans le forum Électronique
    Réponses: 1
    Dernier message: 23/11/2011, 13h22
  4. carte mere ga-gigabyte ga k8rs482m choix de carte video
    Par invite85dab4bd dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 18/02/2011, 08h49
  5. comment brancher l'audio de ma carte TV sur carte mère inconnu
    Par invitebe36511c dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 28/02/2007, 08h02
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...