Generateur de fréquences

/***sélection de fréquence par liaison série***/ 
void PCC(){
  int FIN= 0;
  int j =8;
  int calc = 0;
  int tab;
  int Tab;
  int X;
  int selection = 0;
  int bp2=0;
  unsigned long U=1;
  do{
  Frek = 0;      
  Serial.println("définir une fréquence et finir par un .");
  byte tableau[11] = {};       		 //tableau ou je vais mettre les valeurs
     
 do
     {        			//remplissage du tableau
                  
             if (Serial.available() > 0) {		//si des données entrantes sont présentes

               tableau[j]= Serial.read();  		//remplissage du tableau
               calc++;                     		//incrémentation du nombre de case utilisées
                                      
                       if (tableau[j]== '.') {                	//sortie si on reçois le point
                                             j=0;
                                             }
                                           
                                           j--;
                                           }
                  
              }while(j>0);
              
              do{                                  
              
              Tab=calc-1;     		//ordre de passage 
              tab = Tab-1;     		//nombre de passage
              
              while(tab>0) {
                            U=U*10;          		//mise à niveau des centaines dizaines unités
                            tab--;
                            }
              
           
                 j=8;          		//on commence à l'emplacement 7 du tableau ou se trouve la première donnée (et non pas 0)
                              		//création de la valeur
                             
              do                {

                                Frek = Frek+(tableau[j]-48)*U;  //calcul de la fréquence, le -48 car il garde la désignation ascii
                                U=U/10;                         	//toujours les centaines dizaines unités
                                j--;
                                Tab--;
                                }while(Tab>0);
                 Serial.println(Frek);
              
              }while(FIN>0);   
              
          			 //configuration timer 
            			//mise à zéros des registres
            TCCR2B = 0;
            TCCR2A = 0;
            
            
            if(Frek > 0 && Frek <= 400){
              selection=1;
            }
            else if (Frek > 400 && Frek <= 1500){
              selection=2;
            }
            else if (Frek > 1500 && Frek <= 3000){
              selection=3;
            }
            else if (Frek > 3000 && Frek <= 6000){
              selection=4; 
            }
            else if (Frek > 6000 && Frek <= 13000){
              selection=5;
            }
            else if (Frek > 13000 && Frek <= 50000){
              selection=6; 
            }
            else if (Frek > 50000 && Frek <= 8000000){
              selection=7; 
            }
 switch (selection) {		 //foc= fcryst/(2*prescaler*(1+ocr)     calcul a appliquer
               			//1+0cr = fcryst/(foc*presc)
               			//ocr+1
               			//ocr-1=(foc*presc*2)/fcryst

              case (1):
              			//première plage de sélection
                                  TCCR2B = ( 1<<CS22 | 1<<CS21 | 1<<CS20 /* prescaler  111 1024*/);
                                  PCPResk=1024;
                                  PCCPR();
                                  break;

              case (2):          
                                 
                                 TCCR2B = ( 1<<CS22 | 1<<CS21 /* prescaler  110 256*/);
                                 PCPResk=256;
                                 PCCPR();
                                  break;
              case (3):          
                                 
                                 TCCR2B = ( 1<<CS22 | 1<<CS20 /* prescaler  101 128*/);
                                 PCPResk=128;
                                 PCCPR();
                                  break;
              case (4):          
                                 
                                 TCCR2B = ( 1<<CS22  /* prescaler  100 64*/);
                                 PCPResk=64;
                                 PCCPR();
                                  break;
              case (5):          
                                 
                                 TCCR2B = ( 1<<CS21 | 1<<CS20 /* prescaler  011 32*/);
                                 PCPResk=32;
                                 PCCPR();
                                  break;    
              case (6):          
                                 
                                 TCCR2B = ( 1<<CS21 /* prescaler  010 8*/);
                                 PCPResk=8;
                                 PCCPR();
                                  break;
              case (7):          
                                 
                                 TCCR2B = ( 1<<CS20 /* prescaler  001 1*/);
                                 PCPResk=1;
                                 PCCPR();
                                  break;                           
            }
            
 Serial.println("pour sortir du mode commande pc");           
 Serial.println("envoyer un . en appuyant sur les 2");  
 Serial.println("bouton poussoir ou");  
 plus = digitalRead(8);    		//lecture du bouton poussoir
 moin = digitalRead(9);    		//lecture du bouton poussoir

    if(plus == HIGH && moin == HIGH ){    	//si les deux sont haut retour au mode manuel
     bp2 = 1;
    }   
  }while(bp2 != 1); 
  
}
  

 /***calcul de l'ocr***/       

/***********calcul de l'ocr*************/       

void PCCPR(){
  int OCR2;
  TCCR2A = ( 1<<WGM21/*ctc mode*/ | 1<<COM2A0 /*toggle mode*/  );
  Frekpc = (Frek*PCPResk*2);
  Frekpc = 16000000/Frekpc;                               
  Frekpc = --Frekpc;
  OCR2A=Frekpc;                              //calcul de l'ocr
  
  OCR2=OCR2A;
  OCR2=OCR2+1;                              //préparation au calcul de frequence
  FOC=long(OCR2)*long(PCPResk)*2;    //changement de type de variable et multiplication
  FREQ=16000000/FOC;  
  aff();                                           //afichage sur l'ecran lcd
  
  PCC();                         //retour à  la detection
  
}

avec un petit schéma