##// END OF EJS Templates
imanay -
r130:131
parent child
Show More
@@ -37,19 +37,26
37 37 #define PUERTO_SERVIDOR 5500
38 38 #define TAM_BUFFER 1024
39 39
40 #define maskc_out PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE
41
42 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION
43
44 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB
45 #define bit_up_1 0x00040000
46 #define bit_up_0 0x00100000
47 #define bit_dow_2 0x40000000
48 #define bit_dow_1 0x01000000
49 #define bit_dow_0 0x00400000
50
51 #define MyID 11
52 #define MAXPENDING 5 /* Maximum outstanding connection requests */
40 #define maskc_out_beam PC30+PC28+PC26+PC24+PC22+PC20 //MSB-UP-LSB MSB-DOWN-LSB //APUNTE
41 #define maskc_out_cntl PC4+PC5+PC6 //MONITORING CONTROL
42
43 #define mask_sel_canal PC4 //MONITORING CONTROL
44 #define mask_sel_atenuacion PC5
45 #define mask_sel_calibracion PC6
46
47 #define maskb_in PB16+PB18+PB20+PB30+PB24+PB22 //MSB-UP-LSB MSB-DOWN-LSB //VERIFICACION
48
49 #define maskc_in_adc PC0+PC1
50
51 #define bit_up_2 0x00010000 //Mascara de cada bit a revisar: bit_up_2 es MSB
52 #define bit_up_1 0x00040000
53 #define bit_up_0 0x00100000
54 #define bit_dow_2 0x40000000
55 #define bit_dow_1 0x01000000
56 #define bit_dow_0 0x00400000
57
58 #define MyID 11
59 #define MAXPENDING 5 /* Maximum outstanding connection requests */
53 60
54 61 //parameters for the name of the output file
55 62 #define FPRE "AD" //prefix for the output file name
@@ -58,7 +65,7
58 65
59 66 //ADC parameters
60 67 #define REP 1 //defines how many times the data acquisation loop is repeated
61 #define NSAMPLES 100 //defines how many samples are taken in one data acqu-
68 #define NSAMPLES 10 //defines how many samples are taken in one data acqu-
62 69 // isation loop
63 70 #define CNVTIME 14.3 //defines how long it takes to get one sample. Value
64 71 // is only needed for the output file, doesn't change
@@ -71,6 +78,9
71 78
72 79 AT91S_PIO *pioc;
73 80 AT91S_PIO *piob;
81 AT91S_PIO *pio_adc;
82 AT91S_ADC *padc;
83 AT91S_ADC *padd;
74 84
75 85 struct control_module_parameters {
76 86 char ID[20];
@@ -99,6 +109,7
99 109 int rxData(int, char*);
100 110 void txData(int, char*);
101 111 void inicializa_gpio();
112 void inicializa_adc();
102 113 void procesa_peticion(char *rx_buffer, char *tx_buffer);
103 114 int cambia_apuntamiento(char *puntero_char);
104 115 int carga_experimento(char *nombre_archivo);
@@ -108,8 +119,8
108 119 void intToStr( int number, char* str );
109 120
110 121 //ABS monitoring
111 int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth);
112
122 //int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth);
123 char* ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth);
113 124 AT91S_ADC * configADC1(void);
114 125 AT91S_ADC * configADC2(void);
115 126
@@ -144,6 +155,7
144 155 servSocket = inicializa_ethernet();
145 156 /* Inicializamos el puerto GPIO del sistema embebido GSBC-9260S */
146 157 inicializa_gpio();
158 inicializa_adc();
147 159
148 160 while(1){
149 161 // Recepción TCP de petición
@@ -239,14 +251,19
239 251 */
240 252 void inicializa_gpio(){
241 253
242 // Configuracion de los pines de APUNTE
254 int desplazamiento_beam[6]={30,28,26,24,22,20}; //Desplazamientos para los pines de apunte
255 int desplazamiento_cntl[3]={4,5,6}; //Desplazamientos para los pines de control de monitoreo
256 unsigned long acumulado_ceros=0;
257 int i;
258
259 // Configuracion de los pines de APUNTE y control de monitoreo
243 260 pioc = pio_map(PIOC_BASE);
244 pio_enable(pioc, maskc_out);
245 pio_disable_irq(pioc, maskc_out);
246 pio_disable_multiple_driver(pioc, maskc_out);
247 pio_disable_pull_ups(pioc, maskc_out);
248 pio_synchronous_data_output(pioc, maskc_out);
249 pio_output_enable(pioc, maskc_out);
261 pio_enable(pioc, maskc_out_beam + maskc_out_cntl);
262 pio_disable_irq(pioc, maskc_out_beam + maskc_out_cntl);
263 pio_disable_multiple_driver(pioc, maskc_out_beam + maskc_out_cntl);
264 pio_disable_pull_ups(pioc, maskc_out_beam + maskc_out_cntl);
265 pio_synchronous_data_output(pioc, maskc_out_beam + maskc_out_cntl);
266 pio_output_enable(pioc, maskc_out_beam + maskc_out_cntl);
250 267
251 268 // Configuracion de los pines de VERIFICACION
252 269 piob = pio_map(PIOB_BASE);
@@ -255,6 +272,34
255 272 pio_disable_multiple_driver(piob, maskb_in);
256 273 pio_disable_pull_ups(piob, maskb_in);
257 274 pio_input_enable(piob, maskb_in);
275
276 //Pînes de ADC
277 pio_adc = pio_map(PIOC_BASE);
278 pin_adc_enable(pio_adc,maskc_in_adc); //Habilitamos PC0 para usar con ADC0 y 1
279 pio_disable_irq(pio_adc, maskc_in_adc);
280 pio_disable_multiple_driver(pio_adc, maskc_in_adc);
281 pio_disable_pull_ups(pio_adc, maskc_in_adc);
282 pio_input_enable(pio_adc, maskc_in_adc);
283
284 //Inicializando a cero los pines de apunte
285 for(i=0;i<6;i++)
286 acumulado_ceros= acumulado_ceros + (1 << desplazamiento_beam[i]);
287 pio_out(pioc, maskc_out_beam, acumulado_ceros, 0);
288
289 //Inicializando a cero los pines de control de monitoreo: atenuacion, calibracion y canal
290 for(i=0;i<3;i++)
291 acumulado_ceros= acumulado_ceros + (1 << desplazamiento_cntl[i]);
292 pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0);
293
294 }
295
296 void inicializa_adc(){
297
298 if (configCLK() == 1)
299 printf("clock ADC enable.\n");
300 //configure ADC Settings
301 padc=configADC1();
302 padd=configADC2();
258 303 }
259 304
260 305
@@ -316,7 +361,6
316 361 *(crc + 1) = '\0';
317 362 }
318 363
319
320 364 /*
321 365 * Esta funcion procesa el mensaje de peticion y genera respuesta
322 366 */
@@ -351,8 +395,8
351 395 printf("%s\n",tx_data);
352 396 }
353 397 else if(strcmp(cmd,"ANPH") == 0){
354 ABS_monitoreo(1, 1, 50, 10);
355 tx_data = "Not implemented\n";
398 tx_data = ABS_monitoreo(1, 1, 50, 10);
399 // tx_data = "Not implemented\n";
356 400 printf("%s\n",tx_data);
357 401 }
358 402 else if(strcmp(cmd,"NTST") == 0){
@@ -491,8 +535,8
491 535 acumulado_unos= acumulado_unos + (1 << desplazamiento[offset]);
492 536 }
493 537 }
494 pio_out(pioc, maskc_out, acumulado_unos, 1);
495 pio_out(pioc, maskc_out, acumulado_ceros, 0);
538 pio_out(pioc, maskc_out_beam, acumulado_unos, 1);
539 pio_out(pioc, maskc_out_beam, acumulado_ceros, 0);
496 540
497 541 return 1;
498 542
@@ -617,16 +661,19
617 661 //ABS_monitoreo es la funci�n principal del proyecto ABS_Monitoreo.
618 662 //Esta funci�n es la que se debe agregar en otros c�digos.
619 663 //*****************************************************************
620 int ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth){
664 char* ABS_monitoreo(int sel_atenuador, int sel_calibracion, float umbral, int pulsewidth){
621 665
622 666 //local variables
623 AT91S_PIO *pioc;
667 /* AT91S_PIO *pioc;
624 668 pioc = pio_map(PIOC_BASE);
625 669 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
626 670 unsigned int mask_sel_atenuacion =PC5;
627 unsigned int mask_sel_calibracion =PC6;
628 AT91S_ADC *padc;
629 AT91S_ADC *padd;
671 unsigned int mask_sel_calibracion =PC6;*/
672
673 unsigned long acumulado_ceros=0;
674 unsigned long acumulado_unos=0;
675 /* AT91S_ADC *padc;
676 AT91S_ADC *padd;*/
630 677 FILE *fp;
631 678 long int results1[NSAMPLES], results2[NSAMPLES], results3[NSAMPLES], results4[NSAMPLES];
632 679 unsigned int i=0;
@@ -636,12 +683,14
636 683 FILE *archivo;
637 684 float phase1;
638 685 float phase2;
686 char page0[30];
687 char page1[20];
639 688 //system("./map_clock");
640
689 /*
641 690 if (configCLK() == 1)
642 691 printf("clock ADC enable.\n");
643
644
692 */
693 /*
645 694 //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.
646 695 pio_enable(pioc, mask_sel_canal);
647 696 pio_enable(pioc, mask_sel_atenuacion);
@@ -649,20 +698,29
649 698 pio_output_enable(pioc, mask_sel_canal); //configurar pc4 como salida
650 699 pio_output_enable(pioc, mask_sel_atenuacion); //configurar pc5 como salida
651 700 pio_output_enable(pioc, mask_sel_calibracion); //configurar pc6 como salida
652
701 */
653 702
654 703 //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.
655 if ( sel_atenuador == 1)
704 /*if ( sel_atenuador == 1)
656 705 pio_out(pioc, mask_sel_atenuacion, sel_atenuador,1);
657 706 else
658 707 pio_out(pioc, mask_sel_atenuacion, sel_atenuador,0);
659 708 if ( sel_calibracion == 1)
660 709 pio_out(pioc, mask_sel_calibracion, sel_calibracion,1);
661 710 else
662 pio_out(pioc, mask_sel_calibracion, sel_calibracion,0);
663
664
665 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt"); //Direcci�n y nombre del archivo donde se desea guardar los datos.
711 pio_out(pioc, mask_sel_calibracion, sel_calibracion,0);*/
712
713 if ( sel_atenuador == 1)
714 acumulado_unos = acumulado_unos + (1 << 5);
715 else
716 acumulado_ceros = acumulado_ceros + (1 << 5);
717 if ( sel_calibracion == 1)
718 acumulado_unos = acumulado_unos + (1 << 6);
719 else
720 acumulado_ceros = acumulado_ceros + (1 << 6);
721
722
723 strcpy (fname, "/mnt/sd/absmonitoreo.txt"); //Direcci�n y nombre del archivo donde se desea guardar los datos.
666 724
667 725 if (fExists(fname)==0){ //si el archivo no existe, crea uno y le asigna el titulo
668 726 archivo = fopen(fname,"a+");
@@ -671,82 +729,95
671 729 fclose(archivo);
672 730 }
673 731
674
732 /*
675 733 //configure ADC Settings
676 734 padc=configADC1();
677 735 padd=configADC2();
678
679 while (1){
680
681 ENABLE_CHANNEL(padc, ADC_CH0+ADC_CH1);
682 printf("\nAdquiriendo datos...\n"); //Indica en el terminal que se est�n adquiriendo datos (muestreando la se�al).
683
684
685 now = time(0); //Get current Time for File Name
686
687
688 //Se pone la salida de selecci�n de canal para seleccionar el canal 1 del detector de fase
689 // pio_out(pioc, mask_sel_canal, 0,1);
690 pio_out(pioc, mask_sel_canal, 0,1);
691
692
693 //Se toman muestras para el canal 1 del detector de fase
694 while(1){
736 */
737 //while (1){
738
739 ENABLE_CHANNEL(padc, ADC_CH0+ADC_CH1);
740 printf("\nAdquiriendo datos...\n"); //Indica en el terminal que se est�n adquiriendo datos (muestreando la se�al).
741
742
743 now = time(0); //Get current Time for File Name
744
745 //Se pone la salida de selecci�n de canal para seleccionar el canal 1 del detector de fase
746 acumulado_ceros = acumulado_ceros + (1 << 4);
747 pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0);
748 pio_out(pioc, maskc_out_cntl, acumulado_unos, 1);
749 sleep(1);
750
751 //Se toman muestras para el canal 1 del detector de fase
752 //while(1){
695 753 for(i=0; i < NSAMPLES; i++){
696 754
697 755 ADC_INIT(padc);
698 756 results1[i] = GET_ADC0(padc);
699 757 results2[i] = GET_ADC1(padd);
700 758 }
701
702
759 /*
703 760 if (checkTx(results1, results2, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 1 del datector de fase //correspondan a un pulso.
704 761 break;
705 762 }
706 }
707
708
709 //Se pone la salida de selecci�n de canal para seleccionar el canal 2 del detector de fase
710 pio_out(pioc, mask_sel_canal, 1,1);
711
712
713
714 //Setoman muestras para el canal 2 del detector de fase
715 while(1){
763 */
764 //}
765
766
767 //Se pone la salida de selecci�n de canal para seleccionar el canal 2 del detector de fase
768 acumulado_ceros = acumulado_ceros - (1 << 4);
769 acumulado_unos = acumulado_unos + (1 << 4);
770 pio_out(pioc, maskc_out_cntl, acumulado_ceros, 0);
771 pio_out(pioc, maskc_out_cntl, acumulado_unos, 1);
772 sleep(1);
773
774
775 //Setoman muestras para el canal 2 del detector de fase
776 // while(1){
716 777 for(i=0; i < NSAMPLES; i++){
717 778
718 779 ADC_INIT(padc);
719 780 results3[i] = GET_ADC0(padc);
720 781 results4[i] = GET_ADC1(padd);
721 782 }
722
783 /*
723 784 if (checkTx(results3, results4, umbral, pulsewidth)==1){ //Se verifica que las muestras tomadas del canal 2 del detector de fase //correspondan a un pulso.
724 785 break;
725 786 }
726 }
727
728
729 //Una vez que se ha encontrado un pulso en cada canal, se calcula la fase de ambos.
730
731 phase1 = getPhase(results1, results2); //Calcular la fase del canal 1 del detector de fase.
732 phase2 = getPhase(results3, results4); //Calcular la fase del canal 2 del detector de fase.
733 //create Output File
734
735 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt");
736 printf("\nTerminada la prueba # %d \n", j++);
737 fp=create_Output(fname, now); //Coloca la fecha y la hora en el archivo de texto
738 printf("mediana ch1 = %1.2f\n", phase1); //muestra resultado en terminal
739 printf("mediana ch2 = %1.2f\n", phase2); //muestra resultado en terminal
740 writeOutput(phase1, fp); //graba el resultado en el archivo de texto
741 writeOutput(phase2, fp); //graba el resultado en el archivo de texto
742 fprintf(fp, "\n"); //Pasa a la siguiente l�nea del archivo de texto
743 fclose(fp);
744 printf("Resultado guardado en %s \n", fname);
745
746 sleep(1);
747
748 }
749 return 0;
787 */
788 // }
789
790
791 //Una vez que se ha encontrado un pulso en cada canal, se calcula la fase de ambos.
792
793 phase1 = getPhase(results1, results2); //Calcular la fase del canal 1 del detector de fase.
794 phase2 = getPhase(results3, results4); //Calcular la fase del canal 2 del detector de fase.
795 //create Output File
796
797 strcpy (fname, "/mnt/sd/absmonitoreo.txt");
798 printf("\nTerminada la prueba # %d \n", j++);
799 fp=create_Output(fname, now); //Coloca la fecha y la hora en el archivo de texto
800 printf("mediana ch1 = %1.2f\n", phase1); //muestra resultado en terminal
801 printf("mediana ch2 = %1.2f\n", phase2); //muestra resultado en terminal
802 writeOutput(phase1, fp); //graba el resultado en el archivo de texto
803 writeOutput(phase2, fp); //graba el resultado en el archivo de texto
804 fprintf(fp, "\n"); //Pasa a la siguiente l�nea del archivo de texto
805 fclose(fp);
806 printf("Resultado guardado en %s \n", fname);
807
808 sleep(1);
809
810 strcpy(page0,parameters.ID);
811 strcat(page0,"\n-------\n");
812
813 sprintf(page1,"UP:%1.2f DW:%1.2f\n",phase1, phase2);
814 strcat(page0,page1);
815 char *all_pages = malloc(strlen(page0)+1);
816 strcpy(all_pages, page0);
817 return all_pages;
818
819 // }
820 // return 0;
750 821 }
751 822 /*=============================================================================
752 823 Function definitions
@@ -755,6 +826,7
755 826 // Configures ADC registers in order to get a sample every 10us
756 827 AT91S_ADC * configADC1(void){
757 828 //Variables a usar:
829 /*
758 830 unsigned int maskc_adc =PC0; //Usamos ADC0 y ADC1
759 831
760 832 //configuro pin:
@@ -765,10 +837,10
765 837 pio_disable_multiple_driver(pioc, maskc_adc);
766 838 pio_disable_pull_ups(pioc, maskc_adc);
767 839 pio_input_enable(pioc, maskc_adc);
768
840 */
769 841
770 842 //Configuro el ADC:
771 AT91S_ADC *padc;
843 //AT91S_ADC *padc;
772 844
773 845 padc = adc_map1(ADC_BASE);
774 846
@@ -783,26 +855,25
783 855 //ADC_RESET(padc);
784 856 CONFIG_ADC(padc,ADC_TRGEN_DIS | ADC_RES_10BIT | ADC_SLEEP_NORMAL_MODE | ADC_PRESCAL | ADC_STARTUP | ADC_SHTIM);
785 857 ENABLE_CHANNEL(padc,ADC_CH0); //habilito canal 0
786
787
788 858 return padc;
789 859 }
790 860
791 861 AT91S_ADC * configADC2(void){
792 862 //Variables a usar:
863 /*
793 864 unsigned int maskc_adc =PC1; //Usamos ADC0 y ADC1
794 865
795 866 //configuro pin:
796 867 AT91S_PIO *piod;
797 868 piod = pio_map(PIOC_BASE);
798 pin_adc_enable(piod,maskc_adc); //Habilitamos PC0 para usar con ADC0 y 1
869 pin_adc_enable(piod,maskc_adc); //Habilitamos PC1 para usar con ADC0 y 1
799 870 pio_disable_irq(piod, maskc_adc);
800 871 pio_disable_multiple_driver(piod, maskc_adc);
801 872 pio_disable_pull_ups(piod, maskc_adc);
802 873 pio_input_enable(piod, maskc_adc);
803
874 */
804 875 //Configuro el ADC:
805 AT91S_ADC *padd;
876 //AT91S_ADC *padd;
806 877
807 878 padd = adc_map1(ADC_BASE);
808 879
@@ -837,7 +908,7
837 908
838 909 //Creates the file name out of the #define parameters
839 910
840 strcpy (fname, "/mnt/sd/archivos/absmonitoreo.txt");
911 strcpy (fname, "/mnt/sd/absmonitoreo.txt");
841 912 file = fopen(fname,"a+");
842 913 fprintf(file,"%s", timestamp);
843 914 //printf("\nTerminada la prueba # %d. Guardando resultado en %s\n",r, fname);
General Comments 0
You need to be logged in to leave comments. Login now