ok mais c'est quoi les codes pour faire ceci ? car la je suis perdu dsl
Version imprimable
ok mais c'est quoi les codes pour faire ceci ? car la je suis perdu dsl
Non c'est bon, j'ai juste remplacé le int par un short et ca marche. Par contre pour cette ligne :le count+5 me prend les mesures tout les 0.5 GHz mais quand je met count+0.5 pour récupérer les mesures tout les 0.05 GHz ca marche pas ya erreur.Code:for (count=0;count < points;count=count + 5)
Donc il faudrait que je mette quoi pour que ca marche ?
n'affiche qu'un point de mesure sur 5. Si ça n'affiche que tous les 0.5Ghz, c'est que les points sont espacés de 0.1GHz.Code:for (count=0;count < points;count=count + 5)
Pour avoir tous les points possibles dans cette mesure, faire count = count+1
Tu ne peux pas descendre en dessous de cette résolution qui doit être celle que tu as programmée sur le Wiltron. Si tu veux mieux que ça, il faut reprogrammer le Wiltron avec une meilleure résolution et refaire la mesure.
Ca peut changer le nombre de points d'acquisition.
ram-0000
Ce n'est pas le float qui est convertit en entier mais le contraire et c'est le float count+0.5 qui est convertit en entier (ce qui laisse de toute façon count inchangé)Citation:
count est un entier donc count + 5 est valide mais count + 0.5 (ou 0.05), cela fait comme count + 0 du fait de la transformation du nombre flottant (0.5) en entier (0)
ok mais ca changera pas le problème. Car si je laisse count en entier et que je met count+0.5, ca ne marchera toujours pas.
Relis mon post précédent
count n'est PAS la fréquence, c'est un indice du tableau et on ne DOIT faire que coun= count+un entier.
Tu ne peux pas avoir avec cette mesure des points tous les 0.05GHz
ok mais si j'espace mes points de 0.01GHz avec un point sur 5, ca m'affichera tout les 0.05GHz. non ?
Oui, mais cela demande que tu fasses une autre mesure avec le wiltron correctement programmé
Je l'ai fait mais cela ne marche toujours pas.
Que veux-tu que je te dise avec comme information "ça ne marche pas"?
Qu'est-ce qui ne marche pas ?
Ben j'ai changé le nombre de points ya une erreur:
Tu as demandé combien de points ?
J'ai fais 400 points espacés de 10 MHz et j'ai mis count + 5.Ca devré me faire des fréquence tout les 0.05GHz normalement.
Alors, tes tableaux sont trop petits (41 éléments) pour mettre les 400 valeurs !Citation:
J'ai fais 400 points
Bon voila affaire résolu, au lieu d'ecrire
Il fallais juste que je mette :Code:s11[41],s12[41],s21[41],s22[41];
MerciCode:s11[501],s12[501],s21[501],s22[501];
Le code suivant devrait réserver et libérer la quantité de mémoire nécessaire et suffisante pour stocker les données.
Naturellement, je n'ai pas testé normalement ce code puisque je ne dispose pas du matériel.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 ... #include <stdlib.h> //--------------------------------------------------------------------------- typedef struct { double mag; double phase; } sData; typedef struct { short size ; double * freq; sData * s11; sData * s12; sData * s21; sData * s22; } Data; //--------------------------------------------------------------------------- void afficheData(Data * data, int step) { int count ; int points; points= data->size/16; printf("\n\n\n\n\n\n"); printf(" S11 S12 S21 S22\n"); printf(" FREQUENCY MAG PHASE MAG PHASE MAG PHASE MAG PHASE\n"); printf(" GHZ) (dB) (Deg) (dB) (Deg) (dB) (Deg) (dB) (Deg)\n"); for (count=0;count < points;count += step) printf("%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", data->freq[count]/1E9, data->s11[count].mag,data->s11[count].phase, data->s12[count].mag,data->s12[count].phase, data->s21[count].mag,data->s21[count].phase, data->s22[count].mag,data->s22[count].phase); } //--------------------------------------------------------------------------- void liberer(Data * data) { if(data != NULL) { data->size = 0; free(data->freq); data->freq = NULL; free(data->s11) ; data->s11 = NULL; free(data->s12) ; data->s12 = NULL; free(data->s21) ; data->s21 = NULL; free(data->s22) ; data->s22 = NULL; } } //--------------------------------------------------------------------------- void * mesurer(int vna, Data * data) { void * p; char preamble[2]; ibrd(vna,preamble,2); ibrd(vna,&data->size,2); p = malloc(data->size); if(p == NULL) { printf("Mémoire insuffisante\n"); liberer(data); } else ibrd(vna,p,data->size); return p; } //--------------------------------------------------------------------------- int meas_data(int vna, Data *data ) { char const cmd1[] = "TRS WFS HLD" ; char const cmd2[] = "FMB LSB OFV CH1 OFD CH2 OFD CH3 RDA OFD CH4 RDA OFD"; ibwrt(vna,cmd1,sizeof cmd1); ibwrt(vna,cmd2,sizeof cmd2); return (data->freq = mesurer(vna,data)) != NULL && (data->s11 = mesurer(vna,data)) != NULL && (data->s12 = mesurer(vna,data)) != NULL && (data->s21 = mesurer(vna,data)) != NULL && (data->s22 = mesurer(vna,data)) != NULL ; } //--------------------------------------------------------------------------- void meas_device(int vna) { char key; printf("\n\t\t MEASUREMENT AND DATA OUTPUT\n"); printf("\nConnect Device Under Test:\n"); printf("Appuyer sur ENTREE pour effectuer la mesure ou ECHAP pour sortir\n"); while((key = getch()) !=27 ) { if(key=='\r') { Data data = {0,NULL,NULL,NULL,NULL,NULL}; printf("Mesure en cours..."); if(meas_data(vna,&data)) { afficheData(&data,1); liberer(&data); } printf("\nConnect Device Under Test:\n"); printf("Appuyer sur ENTREE pour effectuer la mesure ou ECHAP pour sortir\n"); } } printf("\n\t\t\t\tPROGRAM ENDED\n"); } //---------------------------------------------------------------------------
c'est à dire, tu peux m'expliquer un peu plus en détail ce que fait ce programme stp ?
Il est censé faire la même chose que le programme que tu avais mais la dimension des tableaux étant connue au moment de l'exécution (quand on lit les deux octets suivants le préambule) il construit à ce moment là les tableaux par allocation dynamique avec la taille qu'il faut (dans la fonction mesurer). Une fois que les tableaux ne sont plus utiles, la fonction liberer récupère la mémoire allouée et détruit les tableaux. Toutes les données utiles sont regroupées dans la structure Data