Mercurial > hg > fxanalyse
view DDS4xAD9912.c @ 10:239f2fe67cc0
Fix slope cancelling following Hg cavity
What we really want to do is to keep constant the frequency of the beat note
between comb and 1062 nm light from the Hg cavity, acting on the repetition
rate by stearing the frequency of the 1542 nm light from the local cavity to
which we lock the comb.
author | Daniele Nicolodi <daniele.nicolodi@obspm.fr> |
---|---|
date | Wed, 04 Jul 2012 14:39:50 +0200 |
parents | d9aae7d7f2c6 |
children | 0e9f95525a8f |
line wrap: on
line source
#include <utility.h> //============================================================================== // // Title: DDS4xAD9912.c // Purpose: // // Created on: by Volodimer Laurent, modified by YLC // Copyright: syrte. All Rights Reserved. // //============================================================================== //============================================================================== // Include files #include "DDS4xAD9912.h" #include <userint.h> #include <tcpsupp.h> #include <ansi_c.h> //============================================================================== // Global functions static int OnTCPEvent(unsigned handle, int xType, int errCode, void *callbackData) { switch(xType) { case TCP_DISCONNECT : break; case TCP_DATAREADY : ClientTCPRead (handle, Response, sizeof(Response), 0); break; } return 0; } //============================================================================== // DDS4xAD9912_SendCmd // // FUNC : envoie une chaine de caracteres sur un port du serveur TCP/IP de la foxboard // PARAM : DDSNum contient le numero de la DDS (1,2,3 ou 4) // PARAM : Buffer contenant la chaîne de caractères à envoyer // RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK //============================================================================== static int DDS4xAD9912_SendCmd(int DDSNum, char * Buffer) // essentially a private function { int res_1,res_2; switch(DDSNum) { case 1: res_1=ConnectToTCPServer (&hConv, Port1, Adress, OnTCPEvent, 0, 0); if(res_1 <0) MessagePopup("DDS4xAD9912_1 Serveur", "Connection to server failed !"); break; case 2: res_1=ConnectToTCPServer (&hConv, Port2, Adress, OnTCPEvent, 0, 0); if(res_1 <0) MessagePopup("DDS4xAD9912_2 Serveur", "Connection to server failed !"); break; case 3: res_1=ConnectToTCPServer (&hConv, Port3, Adress, OnTCPEvent, 0, 0); if(res_1 <0) MessagePopup("DDS4xAD9912_3 Serveur", "Connection to server failed !"); break; case 4: res_1=ConnectToTCPServer (&hConv, Port4, Adress, OnTCPEvent, 0, 0); if(res_1 <0) MessagePopup("DDS4xAD9912_4 Serveur", "Connection to server failed !"); break; } res_2=ClientTCPWrite (hConv, Buffer, strlen(Buffer)+1, 0); if(res_2 <0) MessagePopup("DDS Serveur", "Write to server failed !"); DisconnectFromTCPServer (hConv); return (res_1+res_2) ; } //============================================================================== // DDS4xAD9912_Reset // // FUNC : reset des 4 DDS // PARAM : // RETURN : 0 si le reset de la DDS 1 , DDS 2, DDS3 et DDS4 est OK //============================================================================== int DDS4xAD9912_Reset(DDS4xAD9912_Data * Instance) { int res_1,res_2; sprintf(Request,"set;%i;%i",1,17); res_1 = DDS4xAD9912_SendCmd(1,Request) ; if(res_1 <0) { MessagePopup("DDS Serveur", "DDS4xAD9912_1 Reset failed !") ; } else Instance->Frequency1 = 0.0 ; sprintf(Request,"set;%i;%i",1,17); res_2 = DDS4xAD9912_SendCmd(2,Request) ; if(res_2 <0) { MessagePopup("DDS Serveur", "DDS4xAD9912_2 Reset failed !") ; } else Instance->Frequency2 = 0.0; sprintf(Request,"set;%i;%i",1,17); res_2 = DDS4xAD9912_SendCmd(3,Request) ; if(res_2 <0) { MessagePopup("DDS Serveur", "DDS4xAD9912_3 Reset failed !") ; } else Instance->Frequency3 = 0.0; sprintf(Request,"set;%i;%i",1,17); res_2 = DDS4xAD9912_SendCmd(4,Request) ; if(res_2 <0) { MessagePopup("DDS Serveur", "DDS4xAD9912_4 Reset failed !") ; } else Instance->Frequency4 = 0.0; return (res_1+res_2); } //============================================================================== // DDS4xAD9912_SetFreq // // FUNC : sort une fréquence sur la DDS1 ,DDS2, DDS3 ou DDS4 // PARAM : DDSNum contient le numero de la DDS (1, 2 , 3 ou 4) // RETURN : 0 si la connexion et l'ecriture sur le serveur TCP/IP sont OK //============================================================================== int DDS4xAD9912_SetFrequency(DDS4xAD9912_Data * Instance, int DDSNum, double Freq) { double Word=WORD(Freq,Clk) ; double reste ; int res_0 ; unsigned char b5,b4,b3,b2,b1,b0 ; b5=(unsigned char)(Word/E40); b4=(unsigned char)((Word - E40*b5)/E32); b3=(unsigned char)((Word - E40*b5 - E32*b4)/E24); b2=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3)/E16); b1=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2)/E8); b0=(unsigned char)((Word - E40*b5 - E32*b4 - E24*b3 - E16*b2 - E8*b1)/1.0); reste = (Word - E40*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; if (res_0 <0) { MessagePopup("DDS Serveur", "SetFrequency function failed !") ; } else { if (DDSNum==1) Instance->Frequency1 = Freq - reste*Clk/E48 ; if (DDSNum==2) Instance->Frequency2 = Freq - reste*Clk/E48 ; if (DDSNum==3) Instance->Frequency3 = Freq - reste*Clk/E48 ; if (DDSNum==4) Instance->Frequency4 = Freq - reste*Clk/E48 ; } ; sprintf(Request,"set;%i;%i",0,18); // IO_Update logiciel res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; if (res_0 <0) { MessagePopup("DDS Serveur", "IO_Update function failed !") ; } return(res_0) ; } int DDS4xAD9912_FrequencyRampe ( DDS4xAD9912_Data * Instance, int DDSNum, double Frequin,double Frequout, double Step ) { int i=0,imax=0; double Frequactu=0; time_t Time ; double delaysecond=0.01; if ( (Frequout - Frequin)>0) { if ((Frequout-Frequin) > Step) { imax= (Frequout-Frequin)/Step ; for (i=0; i<imax;i++) { Delay(delaysecond); Frequactu= Frequin+i*Step; DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequactu); } } } else { if ((Frequin-Frequout) > Step) { imax= (Frequin-Frequout)/Step ; for (i=0; i<imax;i++) { Delay(delaysecond); Frequactu= Frequin-i*Step; DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequactu); } } } DDS4xAD9912_SetFrequency(Instance, DDSNum, Frequout); return(0); } /*Word=WORD(Frequactu,Clk); b5=(unsigned char)(Word/E48); b4=(unsigned char)((Word - E48*b5)/E32); b3=(unsigned char)((Word - E48*b5 -E32*b4)/E24); b2=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3)/E16); b1=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2)/E8); b0=(unsigned char)((Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1)/1.0); reste = (Word - E48*b5 -E32*b4 -E24*b3 -E16*b2 -E8*b1-1.0*b0) ; sprintf(Request,"set;%i;%i;%i;%i;%i;%i;%i;%i",0,10,b5,b4,b3,b2,b1,b0); res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; if (DDSNum==1) Instance->Frequency1 = Frequactu - reste*Clk/E48 ; if (DDSNum==2) Instance->Frequency2 = Frequactu - reste*Clk/E48 ; if (DDSNum==3) Instance->Frequency3 = Frequactu - reste*Clk/E48 ; if (DDSNum==4) Instance->Frequency4 = Frequactu - reste*Clk/E48 ; sprintf(Request,"set;%i;%i",0,18); res_0 = DDS4xAD9912_SendCmd(DDSNum, Request) ; */