# SVN changeset patch # User imanay # Date 2013-04-24 22:50:23.299867 # Revision 131 Index: trunk/absroot/source/absc/Control_Module/ServidorTCP.c =================================================================== diff --git a/trunk/absroot/source/absc/Control_Module/ServidorTCP.c b/trunk/absroot/source/absc/Control_Module/ServidorTCP.c --- a/trunk/absroot/source/absc/Control_Module/ServidorTCP.c (revision 130) +++ b/trunk/absroot/source/absc/Control_Module/ServidorTCP.c (revision 131) @@ -37,19 +37,26 @@ #define PUERTO_SERVIDOR 5500 #define TAM_BUFFER 1024 -#define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE - -#define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION - -#define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB -#define bit_up_1 0x00040000 -#define bit_up_0 0x00100000 -#define bit_dow_2 0x40000000 -#define bit_dow_1 0x01000000 -#define bit_dow_0 0x00400000 - -#define MyID 11 -#define MAXPENDING 5 /* Maximum outstanding connection requests */ +#define maskc_out_beam PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE +#define maskc_out_cntl PC4+PC5+PC6 //MONITORING CONTROL + +#define mask_sel_canal PC4 //MONITORING CONTROL +#define mask_sel_atenuacion PC5 +#define mask_sel_calibracion PC6 + +#define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION + +#define maskc_in_adc PC0+PC1 + +#define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB +#define bit_up_1 0x00040000 +#define bit_up_0 0x00100000 +#define bit_dow_2 0x40000000 +#define bit_dow_1 0x01000000 +#define bit_dow_0 0x00400000 + +#define MyID 11 +#define MAXPENDING 5 /* Maximum outstanding connection requests */ //parameters for the name of the output file #define FPRE "AD" //prefix for the output file name @@ -58,7 +65,7 @@ //ADC parameters #define REP 1 //defines how many times the data acquisation loop is repeated -#define NSAMPLES 100 //defines how many samples are taken in one data acqu- +#define NSAMPLES 10 //defines how many samples are taken in one data acqu- // isation loop #define CNVTIME 14.3 //defines how long it takes to get one sample. Value // is only needed for the output file, doesn't change @@ -71,6 +78,9 @@ AT91S_PIO *pioc; AT91S_PIO *piob; +AT91S_PIO *pio_adc; +AT91S_ADC *padc; +AT91S_ADC *padd; struct control_module_parameters { char ID[20]; @@ -99,6 +109,7 @@ int rxData(int, char*); void txData(int, char*); void inicializa_gpio(); +void inicializa_adc(); void procesa_peticion(char *rx_buffer, char *tx_buffer); int cambia_apuntamiento(char *puntero_char); int carga_experimento(char *nombre_archivo); @@ -108,8 +119,8 @@ void intToStr( int number, char* str ); //ABS monitoring -int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth); - +//int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth); +char* ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth); AT91S_ADC * configADC1(void); AT91S_ADC * configADC2(void); @@ -144,6 +155,7 @@ servSocket = inicializa_ethernet(); /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */ inicializa_gpio(); + inicializa_adc(); while(1){ // Recepción TCP de petición @@ -239,14 +251,19 @@ */ void inicializa_gpio(){ - // Configuracion de los pines de APUNTE + int desplazamiento_beam[6]={30,28,26,24,22,20}; //Desplazamientos para los pines de apunte + int desplazamiento_cntl[3]={4,5,6}; //Desplazamientos para los pines de control de monitoreo + unsigned long acumulado_ceros=0; + int i; + + // Configuracion de los pines de APUNTE y control de monitoreo pioc = pio_map(PIOC_BASE); - pio_enable(pioc, maskc_out); - pio_disable_irq(pioc, maskc_out); - pio_disable_multiple_driver(pioc, maskc_out); - pio_disable_pull_ups(pioc, maskc_out); - pio_synchronous_data_output(pioc, maskc_out); - pio_output_enable(pioc, maskc_out); + pio_enable(pioc, maskc_out_beam + maskc_out_cntl); + pio_disable_irq(pioc, maskc_out_beam + maskc_out_cntl); + pio_disable_multiple_driver(pioc, maskc_out_beam + maskc_out_cntl); + pio_disable_pull_ups(pioc, maskc_out_beam + maskc_out_cntl); + pio_synchronous_data_output(pioc, maskc_out_beam + maskc_out_cntl); + pio_output_enable(pioc, maskc_out_beam + maskc_out_cntl); // Configuracion de los pines de VERIFICACION piob = pio_map(PIOB_BASE); @@ -255,6 +272,34 @@ pio_disable_multiple_driver(piob, maskb_in); pio_disable_pull_ups(piob, maskb_in); pio_input_enable(piob, maskb_in); + + //Pînes de ADC + pio_adc = pio_map(PIOC_BASE); + pin_adc_enable(pio_adc,maskc_in_adc); //Habilitamos PC0 para usar con ADC0 y 1 + pio_disable_irq(pio_adc, maskc_in_adc); + pio_disable_multiple_driver(pio_adc, maskc_in_adc); + pio_disable_pull_ups(pio_adc, maskc_in_adc); + pio_input_enable(pio_adc, maskc_in_adc); + + //Inicializando a cero los pines de apunte + for(i=0;i<6;i++) + acumulado_ceros= acumulado_ceros + (1 << desplazamiento_beam[i]); + pio_out(pioc, maskc_out_beam, acumulado_ceros, 0); + + //Inicializando a cero los pines de control de monitoreo: atenuacion, calibracion y canal + for(i=0;i<3;i++) + acumulado_ceros= acumulado_ceros + (1 << desplazamiento_cntl[i]); + pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0); + +} + +void inicializa_adc(){ + + if (configCLK() == 1) + printf("clock ADC enable.\n"); + //configure ADC Settings + padc=configADC1(); + padd=configADC2(); } @@ -316,7 +361,6 @@ *(crc + 1) = '\0'; } - /* * Esta funcion procesa el mensaje de peticion y genera respuesta */ @@ -351,8 +395,8 @@ printf("%s\n",tx_data); } else if(strcmp(cmd,"ANPH") == 0){ - ABS_monitoreo(1, 1, 50, 10); - tx_data = "Not implemented\n"; + tx_data = ABS_monitoreo(1, 1, 50, 10); +// tx_data = "Not implemented\n"; printf("%s\n",tx_data); } else if(strcmp(cmd,"NTST") == 0){ @@ -491,8 +535,8 @@ acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]); } } - pio_out(pioc, maskc_out, acumulado_unos, 1); - pio_out(pioc, maskc_out, acumulado_ceros, 0); + pio_out(pioc, maskc_out_beam, acumulado_unos, 1); + pio_out(pioc, maskc_out_beam, acumulado_ceros, 0); return 1; @@ -617,16 +661,19 @@ //ABS_monitoreo es la funci�n principal del proyecto ABS_Monitoreo. //Esta funci�n es la que se debe agregar en otros c�digos. //***************************************************************** -int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth){ +char* ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth){ //local variables - AT91S_PIO *pioc; +/* AT91S_PIO *pioc; pioc = pio_map(PIOC_BASE); unsigned int mask_sel_canal =PC4; //Aqu� se indican los pines que se desean usar como salidas. Las constantes PCx est�n defiidas en el header at91gpio.h unsigned int mask_sel_atenuacion =PC5; - unsigned int mask_sel_calibracion =PC6; - AT91S_ADC *padc; - AT91S_ADC *padd; + unsigned int mask_sel_calibracion =PC6;*/ + + unsigned long acumulado_ceros=0; + unsigned long acumulado_unos=0; +/* AT91S_ADC *padc; + AT91S_ADC *padd;*/ FILE *fp; long int results1[NSAMPLES], results2[NSAMPLES], results3[NSAMPLES], results4[NSAMPLES]; unsigned int i=0; @@ -636,12 +683,14 @@ FILE *archivo; float phase1; float phase2; + char page0[30]; + char page1[20]; //system("./map_clock"); - +/* if (configCLK() == 1) printf("clock ADC enable.\n"); - - +*/ + /* //configurar tres pines como salida usando als m�scaras mask_sel_canal, mask_sel_atenuacion y mask_sel_calibracion. En este caso corresponden a los pines pc4, pc5 y pc6. pio_enable(pioc, mask_sel_canal); pio_enable(pioc, mask_sel_atenuacion); @@ -649,20 +698,29 @@ pio_output_enable(pioc, mask_sel_canal); //configurar pc4 como salida pio_output_enable(pioc, mask_sel_atenuacion); //configurar pc5 como salida pio_output_enable(pioc, mask_sel_calibracion); //configurar pc6 como salida - +*/ //Se modifican las salidas correspondientes a la selecci�n del atenuador y calibraci�n, de acuerdo a los par�metros ingresados en la funci�n ABS_monitoreo. - if ( sel_atenuador == 1) + /*if ( sel_atenuador == 1) pio_out(pioc, mask_sel_atenuacion, sel_atenuador,1); else pio_out(pioc, mask_sel_atenuacion, sel_atenuador,0); if ( sel_calibracion == 1) pio_out(pioc, mask_sel_calibracion, sel_calibracion,1); else - pio_out(pioc, mask_sel_calibracion, sel_calibracion,0); - - - strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); //Direcci�n y nombre del archivo donde se desea guardar los datos. + pio_out(pioc, mask_sel_calibracion, sel_calibracion,0);*/ + + if ( sel_atenuador == 1) + acumulado_unos = acumulado_unos + (1 << 5); + else + acumulado_ceros = acumulado_ceros + (1 << 5); + if ( sel_calibracion == 1) + acumulado_unos = acumulado_unos + (1 << 6); + else + acumulado_ceros = acumulado_ceros + (1 << 6); + + + strcpy (fname, "/mnt/sd/absmonitoreo.txt"); //Direcci�n y nombre del archivo donde se desea guardar los datos. if (fExists(fname)==0){ //si el archivo no existe, crea uno y le asigna el titulo archivo = fopen(fname,"a+"); @@ -671,82 +729,95 @@ fclose(archivo); } - +/* //configure ADC Settings padc=configADC1(); padd=configADC2(); - - while (1){ - - ENABLE_CHANNEL(padc, ADC_CH0+ADC_CH1); - printf("\nAdquiriendo datos...\n"); //Indica en el terminal que se est�n adquiriendo datos (muestreando la se�al). - - - now = time(0); //Get current Time for File Name - - - //Se pone la salida de selecci�n de canal para seleccionar el canal 1 del detector de fase -// pio_out(pioc, mask_sel_canal, 0,1); - pio_out(pioc, mask_sel_canal, 0,1); - - - //Se toman muestras para el canal 1 del detector de fase - while(1){ +*/ + //while (1){ + + ENABLE_CHANNEL(padc, ADC_CH0+ADC_CH1); + printf("\nAdquiriendo datos...\n"); //Indica en el terminal que se est�n adquiriendo datos (muestreando la se�al). + + + now = time(0); //Get current Time for File Name + + //Se pone la salida de selecci�n de canal para seleccionar el canal 1 del detector de fase + acumulado_ceros = acumulado_ceros + (1 << 4); + pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0); + pio_out(pioc, maskc_out_cntl, acumulado_unos, 1); + sleep(1); + + //Se toman muestras para el canal 1 del detector de fase + //while(1){ for(i=0; i < NSAMPLES; i++){ ADC_INIT(padc); results1[i] = GET_ADC0(padc); results2[i] = GET_ADC1(padd); } - - +/* if (checkTx(results1, results2, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 1 del datector de fase //correspondan a un pulso. break; } - } - - - //Se pone la salida de selecci�n de canal para seleccionar el canal 2 del detector de fase - pio_out(pioc, mask_sel_canal, 1,1); - - - - //Setoman muestras para el canal 2 del detector de fase - while(1){ + */ + //} + + + //Se pone la salida de selecci�n de canal para seleccionar el canal 2 del detector de fase + acumulado_ceros = acumulado_ceros - (1 << 4); + acumulado_unos = acumulado_unos + (1 << 4); + pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0); + pio_out(pioc, maskc_out_cntl, acumulado_unos, 1); + sleep(1); + + + //Setoman muestras para el canal 2 del detector de fase +// while(1){ for(i=0; i < NSAMPLES; i++){ ADC_INIT(padc); results3[i] = GET_ADC0(padc); results4[i] = GET_ADC1(padd); } - +/* if (checkTx(results3, results4, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 2 del detector de fase //correspondan a un pulso. break; } - } - - - //Una vez que se ha encontrado un pulso en cada canal, se calcula la fase de ambos. - - phase1 = getPhase(results1, results2); //Calcular la fase del canal 1 del detector de fase. - phase2 = getPhase(results3, results4); //Calcular la fase del canal 2 del detector de fase. - //create Output File - - strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); - printf("\nTerminada la prueba # %d \n", j++); - fp=create_Output(fname, now); //Coloca la fecha y la hora en el archivo de texto - printf("mediana ch1 = %1.2f\n", phase1); //muestra resultado en terminal - printf("mediana ch2 = %1.2f\n", phase2); //muestra resultado en terminal - writeOutput(phase1, fp); //graba el resultado en el archivo de texto - writeOutput(phase2, fp); //graba el resultado en el archivo de texto - fprintf(fp, "\n"); //Pasa a la siguiente l�nea del archivo de texto - fclose(fp); - printf("Resultado guardado en %s \n", fname); - - sleep(1); - - } - return 0; + */ +// } + + + //Una vez que se ha encontrado un pulso en cada canal, se calcula la fase de ambos. + + phase1 = getPhase(results1, results2); //Calcular la fase del canal 1 del detector de fase. + phase2 = getPhase(results3, results4); //Calcular la fase del canal 2 del detector de fase. + //create Output File + + strcpy (fname, "/mnt/sd/absmonitoreo.txt"); + printf("\nTerminada la prueba # %d \n", j++); + fp=create_Output(fname, now); //Coloca la fecha y la hora en el archivo de texto + printf("mediana ch1 = %1.2f\n", phase1); //muestra resultado en terminal + printf("mediana ch2 = %1.2f\n", phase2); //muestra resultado en terminal + writeOutput(phase1, fp); //graba el resultado en el archivo de texto + writeOutput(phase2, fp); //graba el resultado en el archivo de texto + fprintf(fp, "\n"); //Pasa a la siguiente l�nea del archivo de texto + fclose(fp); + printf("Resultado guardado en %s \n", fname); + + sleep(1); + + strcpy(page0,parameters.ID); + strcat(page0,"\n-------\n"); + + sprintf(page1,"UP:%1.2f DW:%1.2f\n",phase1, phase2); + strcat(page0,page1); + char *all_pages = malloc(strlen(page0)+1); + strcpy(all_pages, page0); + return all_pages; + +// } +// return 0; } /*============================================================================= Function definitions @@ -755,6 +826,7 @@ // Configures ADC registers in order to get a sample every 10us AT91S_ADC * configADC1(void){ //Variables a usar: +/* unsigned int maskc_adc =PC0; //Usamos ADC0 y ADC1 //configuro pin: @@ -765,10 +837,10 @@ pio_disable_multiple_driver(pioc, maskc_adc); pio_disable_pull_ups(pioc, maskc_adc); pio_input_enable(pioc, maskc_adc); - +*/ //Configuro el ADC: - AT91S_ADC *padc; + //AT91S_ADC *padc; padc = adc_map1(ADC_BASE); @@ -783,26 +855,25 @@ //ADC_RESET(padc); CONFIG_ADC(padc,ADC_TRGEN_DIS | ADC_RES_10BIT | ADC_SLEEP_NORMAL_MODE | ADC_PRESCAL | ADC_STARTUP | ADC_SHTIM); ENABLE_CHANNEL(padc,ADC_CH0); //habilito canal 0 - - return padc; } AT91S_ADC * configADC2(void){ //Variables a usar: +/* unsigned int maskc_adc =PC1; //Usamos ADC0 y ADC1 //configuro pin: AT91S_PIO *piod; piod = pio_map(PIOC_BASE); - pin_adc_enable(piod,maskc_adc); //Habilitamos PC0 para usar con ADC0 y 1 + pin_adc_enable(piod,maskc_adc); //Habilitamos PC1 para usar con ADC0 y 1 pio_disable_irq(piod, maskc_adc); pio_disable_multiple_driver(piod, maskc_adc); pio_disable_pull_ups(piod, maskc_adc); pio_input_enable(piod, maskc_adc); - +*/ //Configuro el ADC: - AT91S_ADC *padd; + //AT91S_ADC *padd; padd = adc_map1(ADC_BASE); @@ -837,7 +908,7 @@ //Creates the file name out of the #define parameters - strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); + strcpy (fname, "/mnt/sd/absmonitoreo.txt"); file = fopen(fname,"a+"); fprintf(file,"%s", timestamp); //printf("\nTerminada la prueba # %d. Guardando resultado en %s\n",r, fname);