Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Programme pour commander une PLL ADF4360-1 avec un PIC 16F84



  1. #1
    AsTrA-68

    Question Programme pour commander une PLL ADF4360-1 avec un PIC 16F84

    Bonjour,

    Voila, je dois modifier mon programme pour une PLL ADF4360-1 qui fonctionne sur 24 bits.
    Mais sur mon programme que j'ais maintenant il fonctionne que sur 16 bits mais avec une PLL MC145170DT2 avec un pic 18F84.
    Donc je voulais savoir si quelqu'un pourrais m'aider comment faire pour modifier mon prog pour qu'il va sur 24 bits ?

    J'ai déjà essayer de changer le 16 en 24 dans la déclaration des variables mais cela de marche pas.
    Je pense qu'il faut que je rajoute 8 bits quand mes 16 bits on fini mais je ne vois pas comment faire.

    Mon Programme :

    Code:
     
    #include <htc.h>
    #include "delay.h"
    
    __CONFIG(WDTDIS & XT & UNPROTECT);
    
    /***************************** Déclaration des variables *************************/
    unsigned char addTV1[5]={0,0,0,0,0};
    unsigned char codpgmp[6]={1,0,0,0,0,0};
    unsigned char codpgmm[6]={1,0,0,0,0,1};
    unsigned char addrec[5];
    unsigned char codrec[6];
    unsigned int RegistreN = 350;	// 140 MHz(TANK) / 50 KHz(fref) / 8(PRE_OUT) = 350
    unsigned char ValeurRegistreBinaire[16];
    unsigned char erreur;
    unsigned char freqplus = 0;
    unsigned char freqmoins = 0;
    unsigned char k,i;
    
    /** ROUTINE Transformer un nombre decimal en binaire sur NBits **/
    
    void DecToBin(unsigned int NombreDecimal,char NBits)
    {	
    	for (k=0;k<NBits;k++)
    	{
    		ValeurRegistreBinaire[k] = NombreDecimal%2;
    		NombreDecimal = NombreDecimal >> 1;
    	}
    }
    
    /** ROUTINE Emettre TRAME selon adresse et code **/
    
    void EnvoyerTrameDin(unsigned int ValeurRegistre,unsigned char NbCycles)
    {
    	DecToBin(ValeurRegistre,NbCycles);
    	//Mise de EN à 0
    	RB6 = 0;
    	DelayMs(1);
    	//Mise de CLK à 0
    	RB5 = 0;
    	DelayMs(1);
    	//Génération de la trame sur Din
    	for (k=0;k<NbCycles;k++)
    	{	
    		//Valeur du bit (MSB ==> LSB) sur Din
    		RB7 = ValeurRegistreBinaire[NbCycles-1-k];
    		DelayMs(1);
    		//CLK à 1
    		RB5 = 1;
    		DelayMs(1);
    		//CLK à 0
    		RB5 = 0;
    	}
    	DelayMs(5);
    	//Mise de EN à 1
    	RB6 = 1;
    	DelayMs(100);	
    }
    
    /**PROGRAMME PRINCIPAL **/
    
    void main(void)
    {
    	TRISA = 0b00001100;		 
    	TRISB = 0b00000001;	
    	//Autorisation interruption et détection sur front descendant
    	INTEDG=0;
    	INTE=1;
    	GIE=1;
    	//Initilisation PLL
    	PORTA=0;PORTB=0;
    	//Mise de EN à 1
    	RB6 = 1;
    	Delay_s(1);	
    	//Chargement des registres: C, puis R puis N
    	EnvoyerTrameDin(112,8);	//(112)d = (01110000)b
    	EnvoyerTrameDin(200,15);//10 MHz / 50 KHz = 200
    	EnvoyerTrameDin(RegistreN,16);
    	
    	for(;; )
    	{	
    		if (RA2==1 && RA3==1)
    		{
    			EnvoyerTrameDin(76,8);
    			EnvoyerTrameDin(200,15);//10 MHz / 50 KHz = 200
    		}
    		//Test bouton frequence moins
    		if (RA2==1 || freqmoins==1)
    		{
    			DelayMs(100);	//Anti-rebond bouton
    			RegistreN--;
    			EnvoyerTrameDin(RegistreN,16);
    			freqmoins=0;
    			//Pour signifier prise en compte de l'appui ou réception télécommande
    			RB2=1;RB3=0;
    		}
    		//Test bouton frequence plus
    		if (RA3==1 || freqplus==1)
    		{
    			DelayMs(100);	//Anti-rebond bouton
    			RegistreN++;
    			EnvoyerTrameDin(RegistreN,16);
    			freqplus=0;
    			//Pour signifier prise en compte de l'appui ou réception télécommande
    			RB2=0;RB3=1;
    		}
    	}
    }

    -----


  2. #2
    herrmattoon

    Re : Programme pour commander une PLL ADF4360-1 avec un PIC 16F84

    Salut!
    Est-ce que ce ne serait pas possible de simplement coder ton nombre en long (2*16 bits) de manière à ce qu'il soit envoyé en série comme s'il était codé sur 24 bits, puis de ne transmettre que ces premiers 24 bits? Sinon, si tu ne peux transmettre que tous les 32 bits prendre la précaution de mettre les 8 derniers bits de manière à ce qu'ils soient interprétés par la pll comme un niveau "bas"?
    Et puis je ne pense pas que ta fonction decToBin est vraiment utile, car le compilateur se charge automatiquement de transformer toutes tes variables en binaire avant de charger le prog!

Sur le même thème :

Discussions similaires

  1. Commander un relais avec une sortie PIC
    Par jorg1n dans le forum Électronique
    Réponses: 25
    Dernier message: 29/09/2009, 11h16
  2. programme pour pic 16f84 aider moi SVP
    Par gobgob69 dans le forum Électronique
    Réponses: 37
    Dernier message: 28/05/2009, 19h46
  3. aide pour programme 16f84
    Par barth69 dans le forum Électronique
    Réponses: 5
    Dernier message: 07/02/2009, 15h34
  4. programme en C pour pic 16F84
    Par le fouineur dans le forum Électronique
    Réponses: 14
    Dernier message: 20/04/2006, 13h36