You need to sign in before continuing.

Commit 510c6bf1e3a6298cf244cc9bb1f75dc8442576ed

Authored by Alain Klotz
2 parents 6449c54e b355c4be
Exists in master

Merge branch 'master' of https://gitlab.irap.omp.eu/guitastrolib/guitastro

gui/tp_audine_elec/main.cpp
1 /* 1 /*
2 - * Fichier pour travaux pratiques  
3 - * Universite de Toulouse 2 + * Title: Code C de pilotage de camera Audine avec Raspberry
  3 + * Author: A. Klotz. Universite de Toulouse
4 * 4 *
5 - * --- rappel des bits de donnes du port parallele pour Audine  
6 - * ordre : 87654321  
7 - * bit 1 : horloge V1  
8 - * bit 2 : horloge V2  
9 - * bit 3 : horloge H1  
10 - * bit 4 : horloge R (reset)  
11 - * bit 5 : horloge CL (clamp)  
12 - * bit 6 : horloge Start Convert (CAN)  
13 - * bit 7 : horloge Select Byte (CAN)  
14 - * bit 8 : horloge Select Nibble 5 + * To install the GPIO access library BCM2835 for Ubuntu:
  6 + * Some infos: http://www.airspayce.com/mikem/bcm2835/
  7 + * Install procedure: https://raspberry-projects.com/pi/programming-in-c/io-pins/bcm2835-by-mike-mccauley
  8 + * Do not forget to change the rights of the driver:
  9 + * $ sudo chown user:user /dev/gpiomem
  10 + * $ sudo crontab -e and add the line @reboot chown user:user /dev/gpiomem
15 * 11 *
  12 + * Code::Blocks configuration to use the GPIO library BCM2835 in C code:
  13 + * Menu Settings -> Compiler...
  14 + * Tab "Linker Settings", "Link libraries" [Add] bcm2835 [OK]
16 */ 15 */
17 16
18 - // https://raspberry-projects.com/pi/programming-in-c/io-pins/bcm2835-by-mike-mccauley  
19 -// http://www.airspayce.com/mikem/bcm2835/  
20 -// sudo chown user:user /dev/gpiomem  
21 -// Dans CodeBlocks, Menu Settings -> Compiler Settings, tab Other compiler options: Add -lbcm2835  
22 -// spyder : https://stackoverflow.com/questions/72114520/error-when-starting-spyder-on-ubuntu-22-04  
23 -  
24 #include <stdlib.h> 17 #include <stdlib.h>
25 #include <stdio.h> 18 #include <stdio.h>
26 #include <string.h> 19 #include <string.h>
@@ -46,8 +39,8 @@ @@ -46,8 +39,8 @@
46 #define LEVEL_HIGH 0 39 #define LEVEL_HIGH 0
47 #define LEVEL_LOW 1 40 #define LEVEL_LOW 1
48 41
  42 +// -- Structure of camera informations
49 struct camprop { 43 struct camprop {
50 - /* --- parametres standards, ne pas changer --- */  
51 char msg[2048]; 44 char msg[2048];
52 float exptime; 45 float exptime;
53 int binx, biny; 46 int binx, biny;
@@ -62,30 +55,22 @@ struct camprop { @@ -62,30 +55,22 @@ struct camprop {
62 int nb_deadendphotoy; 55 int nb_deadendphotoy;
63 int nb_photox; 56 int nb_photox;
64 int nb_photoy; 57 int nb_photoy;
65 - unsigned short *p;  
66 - /* --- pour l'amplificateur des Kaf-401 --- */  
67 - int ampliindex;  
68 - int nbampliclean;  
69 - timespec t1;  
70 - timespec t2; 58 + float *p;
71 }; 59 };
72 60
73 -int cmdAudineAcqNormal(struct camprop *cam);  
74 - 61 +// -- Declaration of functions
  62 +int tp_acquisition_fullframe(struct camprop *cam);
75 static int tp_fast_vidage(struct camprop *cam); 63 static int tp_fast_vidage(struct camprop *cam);
76 -static int tp_read_win(struct camprop *cam);  
77 -static void libcam_sleep(float us);  
78 - 64 +static int tp_read_frame(struct camprop *cam);
  65 +static void tp_sleep(float us);
79 static int tp_zi_zh(struct camprop *cam); 66 static int tp_zi_zh(struct camprop *cam);
80 static int tp_read_pel_fast2(struct camprop *cam); 67 static int tp_read_pel_fast2(struct camprop *cam);
81 -  
82 int tp_fast_line(struct camprop *cam); 68 int tp_fast_line(struct camprop *cam);
83 69
84 -  
85 /* 70 /*
86 - * Attente en micro-secondes. 71 + * Wait in micro-seconds.
87 */ 72 */
88 -void libcam_sleep(float us) 73 +void tp_sleep(float us)
89 { 74 {
90 int i,n; 75 int i,n;
91 n = (int)(us*10); 76 n = (int)(us*10);
@@ -94,32 +79,32 @@ void libcam_sleep(float us) @@ -94,32 +79,32 @@ void libcam_sleep(float us)
94 } 79 }
95 } 80 }
96 81
97 -int cmdAudineAcqNormal(struct camprop *cam) 82 +int tp_acquisition_fullframe(struct camprop *cam)
98 { 83 {
99 int i; 84 int i;
100 - int nb_vidages = 1; 85 + int nb_vidages = 2;
101 /* =============================================== */ 86 /* =============================================== */
102 /* === Etape de rincage de la matrice CCD === */ 87 /* === Etape de rincage de la matrice CCD === */
103 /* =============================================== */ 88 /* =============================================== */
104 - /* vidage de la matrice */ 89 + // Vidage de la matrice
105 for (i = 0; i < nb_vidages; i++) { 90 for (i = 0; i < nb_vidages; i++) {
106 tp_fast_vidage(cam); 91 tp_fast_vidage(cam);
107 } 92 }
108 /* =============================================== */ 93 /* =============================================== */
109 /* === Integration de l'image (attente) === */ 94 /* === Integration de l'image (attente) === */
110 /* =============================================== */ 95 /* =============================================== */
111 - /* Delais du temps de pose (en micro-secondes) */  
112 - libcam_sleep((int) (1e6 * cam->exptime)); 96 + // Delais du temps de pose (en micro-secondes)
  97 + tp_sleep((int) (1e6 * cam->exptime));
113 /* =============================================== */ 98 /* =============================================== */
114 /* === Etape de lecture de la matrice CCD === */ 99 /* === Etape de lecture de la matrice CCD === */
115 /* =============================================== */ 100 /* =============================================== */
116 - /* Parametres de dimensions pour allouer le pointeur image */ 101 + // Parametres de dimensions pour allouer le pointeur image
117 cam->w = cam->nb_photox / cam->binx; 102 cam->w = cam->nb_photox / cam->binx;
118 cam->h = cam->nb_photoy / cam->biny; 103 cam->h = cam->nb_photoy / cam->biny;
119 - /* Allocation memoire du pointeur image */  
120 - cam->p = (unsigned short *) calloc(cam->w*cam->h, sizeof(unsigned short));  
121 - /* Lecture et numรฏยฟยฝrisation de l'image vers le pointeur p */  
122 - tp_read_win(cam); 104 + // Allocation memoire du pointeur image
  105 + cam->p = (float *) calloc(cam->w*cam->h, sizeof(float));
  106 + // Lecture et numรฏยฟยฝrisation de l'image vers le pointeur p
  107 + tp_read_frame(cam);
123 return 0; 108 return 0;
124 } 109 }
125 110
@@ -133,25 +118,25 @@ int tp_fast_vidage(struct camprop *cam) @@ -133,25 +118,25 @@ int tp_fast_vidage(struct camprop *cam)
133 int i, j; 118 int i, j;
134 int imax, jmax, decaligne; 119 int imax, jmax, decaligne;
135 120
136 - /* Nombre total de photocellules dans le registre horizontal. */ 121 + // -- Nombre total de photocellules dans le registre horizontal.
137 imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox; 122 imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox;
138 123
139 - /* Nombre total de photocellules dans une colonne de la matrice. */ 124 + // -- Nombre total de photocellules dans une colonne de la matrice.
140 jmax = cam->nb_photoy + cam->nb_deadbeginphotoy + cam->nb_deadendphotoy; 125 jmax = cam->nb_photoy + cam->nb_deadbeginphotoy + cam->nb_deadendphotoy;
141 126
142 - /* Nombre de lignes decalees a chaque boucle sur l'axe vertical. */ 127 + // -- Nombre de lignes decalees a chaque boucle sur l'axe vertical.
143 decaligne = 20; 128 decaligne = 20;
144 129
145 - /* Nombre total de boucles sur l'axe vertical. */ 130 + // -- Nombre total de boucles sur l'axe vertical.
146 jmax = (int) ceil (1. * jmax / decaligne) ; 131 jmax = (int) ceil (1. * jmax / decaligne) ;
147 132
148 - /* Boucle sur les paquets de lignes. */ 133 + // -- Boucle sur les paquets de lignes.
149 for (j = 0; j < jmax; j++) { 134 for (j = 0; j < jmax; j++) {
150 - /* Decalage d'un paquet de 20 lignes. */ 135 + // -- Decalage d'un paquet de 'decaligne' lignes.
151 for (i = 0; i < decaligne; i++) { 136 for (i = 0; i < decaligne; i++) {
152 tp_zi_zh(cam); 137 tp_zi_zh(cam);
153 } 138 }
154 - /* Lecture du registre horizontal sans reset */ 139 + // -- Lecture du registre horizontal sans reset
155 for (i = 0; i < imax; i++) { 140 for (i = 0; i < imax; i++) {
156 tp_read_pel_fast2(cam); 141 tp_read_pel_fast2(cam);
157 } 142 }
@@ -171,38 +156,38 @@ int tp_zi_zh(struct camprop *cam) @@ -171,38 +156,38 @@ int tp_zi_zh(struct camprop *cam)
171 float tphiV=2.0; 156 float tphiV=2.0;
172 float tphiHS=1.0; 157 float tphiHS=1.0;
173 // --- 158 // ---
174 - bcm2835_gpio_write (PHI_V1, LEVEL_HIGH) ;  
175 - libcam_sleep(tphiV);  
176 - bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;  
177 - bcm2835_gpio_write (PHI_V2, LEVEL_HIGH) ;  
178 - libcam_sleep(tphiV);  
179 - bcm2835_gpio_write (PHI_V1, LEVEL_HIGH) ;  
180 - bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;  
181 - libcam_sleep(tphiV);  
182 - bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;  
183 - libcam_sleep(tphiHS); 159 + bcm2835_gpio_write (PHI_V1, LEVEL_HIGH);
  160 + tp_sleep(tphiV);
  161 + bcm2835_gpio_write (PHI_V1, LEVEL_LOW);
  162 + bcm2835_gpio_write (PHI_V2, LEVEL_HIGH);
  163 + tp_sleep(tphiV);
  164 + bcm2835_gpio_write (PHI_V1, LEVEL_HIGH);
  165 + bcm2835_gpio_write (PHI_V2, LEVEL_LOW);
  166 + tp_sleep(tphiV);
  167 + bcm2835_gpio_write (PHI_V1, LEVEL_LOW);
  168 + tp_sleep(tphiHS);
184 return 0; 169 return 0;
185 } 170 }
186 171
187 /* 172 /*
188 tp_read_pel_fast2(struct camprop *cam) -- 173 tp_read_pel_fast2(struct camprop *cam) --
189 - Lecture rapide d'un pixel : decalage du registre horizontal 174 + Lecture rapide d'une photocellule : decalage du registre horizontal
190 sans Reset, mais sans lecture du CAN, 175 sans Reset, mais sans lecture du CAN,
191 */ 176 */
192 int tp_read_pel_fast2(struct camprop *cam) 177 int tp_read_pel_fast2(struct camprop *cam)
193 { 178 {
194 float tphiPIX=0.25; 179 float tphiPIX=0.25;
195 // --- 180 // ---
196 - bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;  
197 - libcam_sleep(tphiPIX);  
198 - bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;  
199 - libcam_sleep(tphiPIX); 181 + bcm2835_gpio_write (PHI_H1, LEVEL_LOW);
  182 + tp_sleep(tphiPIX);
  183 + bcm2835_gpio_write (PHI_H1, LEVEL_HIGH);
  184 + tp_sleep(tphiPIX);
200 return 0; 185 return 0;
201 } 186 }
202 187
203 /* 188 /*
204 tp_read_pel_fast(struct camprop *cam) -- 189 tp_read_pel_fast(struct camprop *cam) --
205 - Lecture rapide d'un pixel : decalage du registre horizontal 190 + Lecture rapide d'une photocellule : decalage du registre horizontal
206 avec Reset, mais sans lecture du CAN, 191 avec Reset, mais sans lecture du CAN,
207 */ 192 */
208 int tp_read_pel_fast(struct camprop *cam) 193 int tp_read_pel_fast(struct camprop *cam)
@@ -210,25 +195,25 @@ int tp_read_pel_fast(struct camprop *cam) @@ -210,25 +195,25 @@ int tp_read_pel_fast(struct camprop *cam)
210 float tphiPIX=0.25; 195 float tphiPIX=0.25;
211 float tphiR=0.020; 196 float tphiR=0.020;
212 // --- 197 // ---
213 - bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ;  
214 - libcam_sleep(tphiR);  
215 - bcm2835_gpio_write (PHI_R, LEVEL_LOW) ;  
216 - libcam_sleep(tphiR);  
217 - bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;  
218 - libcam_sleep(tphiPIX);  
219 - bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;  
220 - libcam_sleep(tphiPIX); 198 + bcm2835_gpio_write (PHI_R, LEVEL_HIGH);
  199 + tp_sleep(tphiR);
  200 + bcm2835_gpio_write (PHI_R, LEVEL_LOW);
  201 + tp_sleep(tphiR);
  202 + bcm2835_gpio_write (PHI_H1, LEVEL_LOW);
  203 + tp_sleep(tphiPIX);
  204 + bcm2835_gpio_write (PHI_H1, LEVEL_HIGH);
  205 + tp_sleep(tphiPIX);
221 return 0; 206 return 0;
222 } 207 }
223 208
224 /* 209 /*
225 tp_fast_line_() -- 210 tp_fast_line_() --
226 - Lecture rapide du registre horizontal, avec la fonction read_pel_fast. 211 + Lecture rapide du registre horizontal, avec la fonction tp_read_pel_fast.
227 */ 212 */
228 int tp_fast_line(struct camprop *cam) 213 int tp_fast_line(struct camprop *cam)
229 { 214 {
230 int i, imax; 215 int i, imax;
231 - /* Nombre total de photocellules dans le registre horizontal. */ 216 + // Nombre total de photocellules dans le registre horizontal.
232 imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox; 217 imax = cam->nb_photox + cam->nb_deadbeginphotox + cam->nb_deadendphotox;
233 for (i = 0; i < imax; i++) { 218 for (i = 0; i < imax; i++) {
234 tp_read_pel_fast(cam); 219 tp_read_pel_fast(cam);
@@ -236,7 +221,7 @@ int tp_fast_line(struct camprop *cam) @@ -236,7 +221,7 @@ int tp_fast_line(struct camprop *cam)
236 return 0; 221 return 0;
237 } 222 }
238 223
239 -int tp_read_win(struct camprop *cam) 224 +int tp_read_frame(struct camprop *cam)
240 { 225 {
241 226
242 int i, j; 227 int i, j;
@@ -244,143 +229,148 @@ int tp_read_win(struct camprop *cam) @@ -244,143 +229,148 @@ int tp_read_win(struct camprop *cam)
244 int imax, jmax; 229 int imax, jmax;
245 int cx1, cx2, cy1; 230 int cx1, cx2, cy1;
246 unsigned short buffer[2048]; 231 unsigned short buffer[2048];
247 - int x; 232 + unsigned short x;
248 233
249 - /* dimensions de l'image a digitaliser */ 234 + // -- Dimensions de l'image a digitaliser
250 imax = cam->w; 235 imax = cam->w;
251 jmax = cam->h; 236 jmax = cam->h;
252 - /* nombre de colonnes de debut a ne pas digitaliser */ 237 + // -- Nombre de photocellules de debut de ligne a ne pas digitaliser
253 cx1 = cam->nb_deadbeginphotox; 238 cx1 = cam->nb_deadbeginphotox;
254 - /* nombre de colonnes de fin a ne pas digitaliser */ 239 + // -- Nombre de photocellules de fin de ligne a ne pas digitaliser
255 cx2 = cam->nb_deadendphotox; 240 cx2 = cam->nb_deadendphotox;
256 - /* nombre de lignes de debut a ne pas digitaliser */ 241 + // -- Nombre de lignes de debut a ne pas digitaliser
257 cy1 = cam->nb_deadbeginphotoy; 242 cy1 = cam->nb_deadbeginphotoy;
258 243
259 - /* On supprime les cy1 premieres lignes */ 244 + // -- On supprime les cy1 premieres lignes
260 for (i = 0; i < cy1; i++) { 245 for (i = 0; i < cy1; i++) {
261 tp_zi_zh(cam); 246 tp_zi_zh(cam);
262 } 247 }
263 248
264 - /* On nettoie le registre horizontal */ 249 + // -- On nettoie le registre horizontal
265 for (i = 0; i < 1; i++) { 250 for (i = 0; i < 1; i++) {
266 tp_fast_line(cam); 251 tp_fast_line(cam);
267 } 252 }
268 253
269 - /* boucle sur l'horloge verticale (transfert) */ 254 + // -- Boucle sur le transfert vertical
270 for (i = 0; i < jmax; i++) { 255 for (i = 0; i < jmax; i++) {
271 256
272 - /* boucle de binning vertical */ 257 + // -- Boucle de binning vertical
273 for (k = 0; k < cam->biny; k++) { 258 for (k = 0; k < cam->biny; k++) {
274 tp_zi_zh(cam); 259 tp_zi_zh(cam);
275 } 260 }
276 261
277 - /* On retire les cx1 premiers pixels avec reset */ 262 + // -- On retire les cx1 premieres photocellules avec reset
278 for (j = 0; j < cx1; j++) { 263 for (j = 0; j < cx1; j++) {
279 tp_read_pel_fast(cam); 264 tp_read_pel_fast(cam);
280 } 265 }
281 266
282 - /* boucle sur l'horloge horizontale (registre de sortie) */ 267 + // -- Boucle sur le transfert horizontal
283 for (j = 0; j < imax; j++) { 268 for (j = 0; j < imax; j++) {
284 - float tphiR=0.020; 269 + float tphiR=2.0; //0.020;
285 float tRef1=4.0; 270 float tRef1=4.0;
286 float tRef2=1.0; 271 float tRef2=1.0;
287 float tRef3=1.0; 272 float tRef3=1.0;
288 - float tphiPIX=0.25; 273 + float tphiPIX=1.0; // 0.25
289 float tVid1=4.0; 274 float tVid1=4.0;
290 - // palier de reset  
291 - bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ; 275 + float tVid2=1.0;
  276 + float tSel=1.0;
  277 +
  278 + // -- Palier de reset
292 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ; 279 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
293 - libcam_sleep(tphiR); 280 + bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ;
  281 + tp_sleep(tphiR);
294 bcm2835_gpio_write (PHI_R, LEVEL_LOW) ; 282 bcm2835_gpio_write (PHI_R, LEVEL_LOW) ;
295 - libcam_sleep(tphiR);  
296 - // palier de reference  
297 - libcam_sleep(tRef1); 283 +
  284 + // -- Palier de reference
  285 + tp_sleep(tRef1);
298 bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ; 286 bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ;
299 - libcam_sleep(tRef2); 287 + tp_sleep(tRef2);
300 bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ; 288 bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
301 - libcam_sleep(tRef3); 289 + tp_sleep(tRef3);
302 290
303 - /* boucle de binning horizontal */ 291 + // -- Boucle de binning horizontal
304 for (l = 0; l < cam->binx; l++) { 292 for (l = 0; l < cam->binx; l++) {
305 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ; 293 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
306 - libcam_sleep(tphiPIX); 294 + tp_sleep(tphiPIX);
307 bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ; 295 bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
308 - libcam_sleep(tphiPIX); 296 + tp_sleep(tphiPIX);
309 } 297 }
310 298
311 - // palier video  
312 - libcam_sleep(tVid1); 299 + // -- Palier video
  300 + tp_sleep(tVid1);
313 bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ; 301 bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
  302 + tp_sleep(tVid2);
314 303
315 - // -- recupere le nibble _ _ _ _ _ _ _ _ _ _ _ _ 3 2 1 0 304 + // -- Recupere le nibble _ _ _ _ _ _ _ _ _ _ _ _ 3 2 1 0
316 // SB = Select Byte <---- SB=1 ----> <---- SB=0 ----> 305 // SB = Select Byte <---- SB=1 ----> <---- SB=0 ---->
317 // SN = Select Nibble <SN=1 > <SN=0 > <SN=1 > <SN=0 > 306 // SN = Select Nibble <SN=1 > <SN=0 > <SN=1 > <SN=0 >
318 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ; 307 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
319 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ; 308 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
320 - x = (int)bcm2835_gpio_lev(BIT_0);  
321 - x += (int)bcm2835_gpio_lev(BIT_1) << 1;  
322 - x += (int)bcm2835_gpio_lev(BIT_2) << 2;  
323 - x += (int)bcm2835_gpio_lev(BIT_3) << 3; 309 + tp_sleep(tSel);
  310 + x = (unsigned short)bcm2835_gpio_lev(BIT_0) ;
  311 + x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 1;
  312 + x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 2;
  313 + x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 3;
324 314
325 - // -- recupere le nibble _ _ _ _ _ _ _ _ 3 2 1 0 _ _ _ _ 315 + // -- Recupere le nibble _ _ _ _ _ _ _ _ 3 2 1 0 _ _ _ _
326 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ; 316 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
327 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ; 317 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
328 - x += (int)bcm2835_gpio_lev(BIT_0) << 4;  
329 - x += (int)bcm2835_gpio_lev(BIT_1) << 5;  
330 - x += (int)bcm2835_gpio_lev(BIT_2) << 6;  
331 - x += (int)bcm2835_gpio_lev(BIT_3) << 7; 318 + tp_sleep(tSel);
  319 + x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 4;
  320 + x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 5;
  321 + x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 6;
  322 + x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 7;
332 323
333 - // -- recupere le nibble _ _ _ _ 3 2 1 0 _ _ _ _ _ _ _ _ 324 + // -- Recupere le nibble _ _ _ _ 3 2 1 0 _ _ _ _ _ _ _ _
334 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ; 325 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
335 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ; 326 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
336 - x += (int)bcm2835_gpio_lev(BIT_0) << 8;  
337 - x += (int)bcm2835_gpio_lev(BIT_1) << 9;  
338 - x += (int)bcm2835_gpio_lev(BIT_2) << 10;  
339 - x += (int)bcm2835_gpio_lev(BIT_3) << 11; 327 + tp_sleep(tSel);
  328 + x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 8;
  329 + x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 9;
  330 + x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 10;
  331 + x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 11;
340 332
341 - // -- recupere le nibble 3 2 1 0 _ _ _ _ _ _ _ _ _ _ _ _ 333 + // -- Recupere le nibble 3 2 1 0 _ _ _ _ _ _ _ _ _ _ _ _
342 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ; 334 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
343 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ; 335 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
344 - x += (int)bcm2835_gpio_lev(BIT_0) << 12;  
345 - x += (int)bcm2835_gpio_lev(BIT_1) << 13;  
346 - x += (int)bcm2835_gpio_lev(BIT_2) << 14;  
347 - x += (int)bcm2835_gpio_lev(BIT_3) << 15; 336 + tp_sleep(tSel);
  337 + x += (unsigned short)bcm2835_gpio_lev(BIT_0) << 12;
  338 + x += (unsigned short)bcm2835_gpio_lev(BIT_1) << 13;
  339 + x += (unsigned short)bcm2835_gpio_lev(BIT_2) << 14;
  340 + x += (unsigned short)bcm2835_gpio_lev(BIT_3) << 15;
348 341
349 - // -- remises au niveaux bas 342 + // -- Remises aux niveaux bas
350 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ; 343 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
351 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ; 344 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
352 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ; 345 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
353 346
354 - if (x > 32767) {  
355 - x = 32767;  
356 - }  
357 - /* Stockage dans un buffer dans la meme page mem */  
358 - buffer[j] = (unsigned short) x; 347 + // -- Stockage du pixel dans un buffer de ligne
  348 + buffer[j] = x;
359 349
360 } 350 }
361 351
362 - /* On retire cx2 pixels a la fin */ 352 + // -- On retire cx2 photocellules a la fin
363 for (j = 0; j < cx2; j++) { 353 for (j = 0; j < cx2; j++) {
364 tp_read_pel_fast(cam); 354 tp_read_pel_fast(cam);
365 } 355 }
366 356
367 - /* On transfere le tableau vers la matrice image */ 357 + // -- On transfere le buffer de ligne vers la matrice image
368 if (i != 0) { 358 if (i != 0) {
369 - cam->p[(i - 1) * imax] = buffer[0]; 359 + cam->p[(i - 1) * imax] = (float)buffer[0];
370 } 360 }
371 for (j = 1; j < imax; j++) { 361 for (j = 1; j < imax; j++) {
372 - cam->p[(i + 1) * imax - j] = buffer[j]; 362 + cam->p[(i + 1) * imax - j] = (float)buffer[j];
373 } 363 }
374 364
375 } 365 }
376 return 0; 366 return 0;
377 } 367 }
378 368
379 -void mc_savefits(struct camprop *cam, char *filename) 369 +void tp_savefits(struct camprop *cam, char *filename)
380 { 370 {
381 FILE *f; 371 FILE *f;
382 char line[1024],car; 372 char line[1024],car;
383 - float value0; 373 + short value0;
384 char *cars0; 374 char *cars0;
385 int k,k0; 375 int k,k0;
386 long one= 1; 376 long one= 1;
@@ -396,9 +386,9 @@ void mc_savefits(struct camprop *cam, char *filename) @@ -396,9 +386,9 @@ void mc_savefits(struct camprop *cam, char *filename)
396 fwrite(line,80,sizeof(char),f); 386 fwrite(line,80,sizeof(char),f);
397 sprintf(line,"NAXIS2 = %3d / length of data axis 2 ",cam->h); 387 sprintf(line,"NAXIS2 = %3d / length of data axis 2 ",cam->h);
398 fwrite(line,80,sizeof(char),f); 388 fwrite(line,80,sizeof(char),f);
399 - strcpy(line,"BZERO = 32768 / uint16 "); 389 + strcpy(line,"BZERO = 32768 / uint16 32768 ");
400 fwrite(line,80,sizeof(char),f); 390 fwrite(line,80,sizeof(char),f);
401 - strcpy(line,"BSCALE = 1 / uint16 "); 391 + strcpy(line,"BSCALE = 1 / uint16 1 ");
402 fwrite(line,80,sizeof(char),f); 392 fwrite(line,80,sizeof(char),f);
403 k0=9; 393 k0=9;
404 strcpy(line,"END "); 394 strcpy(line,"END ");
@@ -407,25 +397,24 @@ void mc_savefits(struct camprop *cam, char *filename) @@ -407,25 +397,24 @@ void mc_savefits(struct camprop *cam, char *filename)
407 for (k=k0;k<=36;k++) { 397 for (k=k0;k<=36;k++) {
408 fwrite(line,80,sizeof(char),f); 398 fwrite(line,80,sizeof(char),f);
409 } 399 }
410 - /* byte order test */ 400 + // -- Byte order test
411 if (!(*((char *)(&one)))) { 401 if (!(*((char *)(&one)))) {
412 big_endian=1; 402 big_endian=1;
413 } else { 403 } else {
414 big_endian=0; 404 big_endian=0;
415 } 405 }
416 - /* write data */ 406 + // -- Write data
417 for (k=0;k<cam->h*cam->w;k++) { 407 for (k=0;k<cam->h*cam->w;k++) {
418 - value0=cam->p[k]; // 32=4*8bits 408 + value0 = cam->p[k]-32768;
419 if (big_endian==0) { 409 if (big_endian==0) {
420 cars0=(char*)&value0; 410 cars0=(char*)&value0;
421 car=cars0[0]; 411 car=cars0[0];
422 cars0[0]=cars0[1]; 412 cars0[0]=cars0[1];
423 cars0[1]=car; 413 cars0[1]=car;
424 } 414 }
425 - fwrite(&value0,1,sizeof(unsigned short),f); 415 + fwrite(&value0,1,sizeof(short),f);
426 } 416 }
427 int n= (cam->h*cam->w) % 2880 -1; 417 int n= (cam->h*cam->w) % 2880 -1;
428 - //printf("big_endian=%d n=%d",big_endian, n);  
429 value0=(float)0.; 418 value0=(float)0.;
430 for (k=0;k<n;k++) { 419 for (k=0;k<n;k++) {
431 if (big_endian==0) { 420 if (big_endian==0) {
@@ -434,22 +423,24 @@ void mc_savefits(struct camprop *cam, char *filename) @@ -434,22 +423,24 @@ void mc_savefits(struct camprop *cam, char *filename)
434 cars0[0]=cars0[1]; 423 cars0[0]=cars0[1];
435 cars0[1]=car; 424 cars0[1]=car;
436 } 425 }
437 - fwrite(&value0,1,sizeof(unsigned short),f); 426 + fwrite(&value0,1,sizeof(short),f);
438 } 427 }
439 fclose(f); 428 fclose(f);
440 } 429 }
441 430
  431 +// -- This is the start point of the program
442 int main(int argc, char* argv[]) 432 int main(int argc, char* argv[])
443 { 433 {
444 434
445 - // decode la ligne de commandes. Exemple : tp_ccd.exe 0.5 1 435 + // -- Decode la ligne de commandes. Exemple : tp_ccd.exe full_frame 0.5 1
446 char method[1024]; 436 char method[1024];
447 float exptime = 0.5; 437 float exptime = 0.5;
448 int binning = 1; 438 int binning = 1;
  439 + strcpy(method,"full_frame");
449 if(argc < 3) 440 if(argc < 3)
450 { 441 {
451 printf("ERR 1 : Not enough command line parameters\n: method exptime binningn"); 442 printf("ERR 1 : Not enough command line parameters\n: method exptime binningn");
452 - //exit(1); 443 + return 1;
453 } else { 444 } else {
454 strcpy(method,argv[1]); 445 strcpy(method,argv[1]);
455 exptime = atof(argv[2]); 446 exptime = atof(argv[2]);
@@ -457,8 +448,8 @@ int main(int argc, char* argv[]) @@ -457,8 +448,8 @@ int main(int argc, char* argv[])
457 } 448 }
458 printf("ERR 0 : %s %f %d\n", method, exptime, binning); 449 printf("ERR 0 : %s %f %d\n", method, exptime, binning);
459 450
  451 + // -- Initialise la structure des donnees de la camera
460 struct camprop cam; 452 struct camprop cam;
461 - // === initialise la structure des donnees de la camera  
462 strcpy(cam.msg,""); 453 strcpy(cam.msg,"");
463 cam.exptime=exptime; // sec 454 cam.exptime=exptime; // sec
464 cam.binx=binning; 455 cam.binx=binning;
@@ -477,15 +468,14 @@ int main(int argc, char* argv[]) @@ -477,15 +468,14 @@ int main(int argc, char* argv[])
477 cam.nb_deadbeginphotoy=4; 468 cam.nb_deadbeginphotoy=4;
478 cam.nb_deadendphotoy=4; 469 cam.nb_deadendphotoy=4;
479 cam.p=NULL; 470 cam.p=NULL;
480 - /* --- pour l'amplificateur des Kaf-401 --- */  
481 - cam.ampliindex=0;  
482 - cam.nbampliclean=0;  
483 - // === initialise le GPIO 471 +
  472 + // -- Initialise le GPIO
484 if (!bcm2835_init()) { 473 if (!bcm2835_init()) {
485 printf("Probleme bcm2835_init"); 474 printf("Probleme bcm2835_init");
486 return 1; 475 return 1;
487 } 476 }
488 - // Set the pin to be an output 477 +
  478 + // -- Set the pin to be an output
489 bcm2835_gpio_fsel(PHI_V1, BCM2835_GPIO_FSEL_OUTP); 479 bcm2835_gpio_fsel(PHI_V1, BCM2835_GPIO_FSEL_OUTP);
490 bcm2835_gpio_fsel(PHI_V2, BCM2835_GPIO_FSEL_OUTP); 480 bcm2835_gpio_fsel(PHI_V2, BCM2835_GPIO_FSEL_OUTP);
491 bcm2835_gpio_fsel(PHI_H1, BCM2835_GPIO_FSEL_OUTP); 481 bcm2835_gpio_fsel(PHI_H1, BCM2835_GPIO_FSEL_OUTP);
@@ -495,12 +485,14 @@ int main(int argc, char* argv[]) @@ -495,12 +485,14 @@ int main(int argc, char* argv[])
495 bcm2835_gpio_fsel(PHI_SC, BCM2835_GPIO_FSEL_OUTP); 485 bcm2835_gpio_fsel(PHI_SC, BCM2835_GPIO_FSEL_OUTP);
496 bcm2835_gpio_fsel(PHI_SN, BCM2835_GPIO_FSEL_OUTP); 486 bcm2835_gpio_fsel(PHI_SN, BCM2835_GPIO_FSEL_OUTP);
497 bcm2835_gpio_fsel(DELAY, BCM2835_GPIO_FSEL_OUTP); // special delay us 487 bcm2835_gpio_fsel(DELAY, BCM2835_GPIO_FSEL_OUTP); // special delay us
498 - // Set the pin to be an input 488 +
  489 + // -- Set the pin to be an input
499 bcm2835_gpio_fsel(BIT_0, BCM2835_GPIO_FSEL_INPT); 490 bcm2835_gpio_fsel(BIT_0, BCM2835_GPIO_FSEL_INPT);
500 bcm2835_gpio_fsel(BIT_1, BCM2835_GPIO_FSEL_INPT); 491 bcm2835_gpio_fsel(BIT_1, BCM2835_GPIO_FSEL_INPT);
501 bcm2835_gpio_fsel(BIT_2, BCM2835_GPIO_FSEL_INPT); 492 bcm2835_gpio_fsel(BIT_2, BCM2835_GPIO_FSEL_INPT);
502 bcm2835_gpio_fsel(BIT_3, BCM2835_GPIO_FSEL_INPT); 493 bcm2835_gpio_fsel(BIT_3, BCM2835_GPIO_FSEL_INPT);
503 - // Set default values for outputs 494 +
  495 + // -- Set default values for outputs
504 bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ; 496 bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
505 bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ; 497 bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
506 bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ; 498 bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
@@ -510,14 +502,12 @@ int main(int argc, char* argv[]) @@ -510,14 +502,12 @@ int main(int argc, char* argv[])
510 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ; 502 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
511 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ; 503 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
512 504
  505 + // -- Select the method to apply
513 if (strcmp(method, "full_frame")==0) { 506 if (strcmp(method, "full_frame")==0) {
514 - printf("=== init OK\n");  
515 - cmdAudineAcqNormal(&cam);  
516 - printf("=== acq OK\n"); 507 + tp_acquisition_fullframe(&cam);
517 char filename[1024]; 508 char filename[1024];
518 strcpy(filename,"/home/user/Documents/image.fit"); 509 strcpy(filename,"/home/user/Documents/image.fit");
519 - mc_savefits(&cam, filename);  
520 - 510 + tp_savefits(&cam, filename);
521 } else if (strcmp(method, "zi_zh")==0) { 511 } else if (strcmp(method, "zi_zh")==0) {
522 for (int i = 0; i <1; i++) { 512 for (int i = 0; i <1; i++) {
523 tp_zi_zh(&cam); 513 tp_zi_zh(&cam);
@@ -551,7 +541,7 @@ int main(int argc, char* argv[]) @@ -551,7 +541,7 @@ int main(int argc, char* argv[])
551 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ; 541 bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
552 bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ; 542 bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
553 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ; 543 bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
554 - libcam_sleep(tphiV); 544 + tp_sleep(tphiV);
555 bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ; 545 bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
556 bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ; 546 bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
557 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ; 547 bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
@@ -560,8 +550,27 @@ int main(int argc, char* argv[]) @@ -560,8 +550,27 @@ int main(int argc, char* argv[])
560 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ; 550 bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
561 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ; 551 bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
562 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ; 552 bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
563 - libcam_sleep(tphiHS); 553 + tp_sleep(tphiHS);
564 } 554 }
  555 + } else if (strcmp(method, "set_255")==0) {
  556 + bcm2835_gpio_write (PHI_V1, LEVEL_HIGH) ;
  557 + bcm2835_gpio_write (PHI_V2, LEVEL_HIGH) ;
  558 + bcm2835_gpio_write (PHI_H1, LEVEL_HIGH) ;
  559 + bcm2835_gpio_write (PHI_R, LEVEL_HIGH) ;
  560 + bcm2835_gpio_write (PHI_CL, LEVEL_HIGH) ;
  561 + bcm2835_gpio_write (PHI_SB, LEVEL_HIGH) ;
  562 + bcm2835_gpio_write (PHI_SC, LEVEL_HIGH) ;
  563 + bcm2835_gpio_write (PHI_SN, LEVEL_HIGH) ;
  564 + tp_sleep(5e6);
  565 + } else if (strcmp(method, "set_0")==0) {
  566 + bcm2835_gpio_write (PHI_V1, LEVEL_LOW) ;
  567 + bcm2835_gpio_write (PHI_V2, LEVEL_LOW) ;
  568 + bcm2835_gpio_write (PHI_H1, LEVEL_LOW) ;
  569 + bcm2835_gpio_write (PHI_R, LEVEL_LOW) ;
  570 + bcm2835_gpio_write (PHI_CL, LEVEL_LOW) ;
  571 + bcm2835_gpio_write (PHI_SB, LEVEL_LOW) ;
  572 + bcm2835_gpio_write (PHI_SC, LEVEL_LOW) ;
  573 + bcm2835_gpio_write (PHI_SN, LEVEL_LOW) ;
565 } 574 }
566 printf("=== Termine\n"); 575 printf("=== Termine\n");
567 return 0; 576 return 0;
gui/tp_audine_elec/tp_audine_elec.py
@@ -55,7 +55,7 @@ if __name__ == &quot;__main__&quot;: @@ -55,7 +55,7 @@ if __name__ == &quot;__main__&quot;:
55 print(exc) 55 print(exc)
56 56
57 # --- Global variable to select the method 57 # --- Global variable to select the method
58 - methods = ["full_frame", "zi_zh", "fast_line", "read_pel_fast", "read_pel_fast2", "fast_vidage", "square_signal"] 58 + methods = ["full_frame", "zi_zh", "fast_line", "read_pel_fast", "read_pel_fast2", "fast_vidage"] #, "square_signal", "set_0", "set_255"]
59 59
60 # --- Global variable to define info messages 60 # --- Global variable to define info messages
61 infos = {} 61 infos = {}
@@ -236,7 +236,7 @@ if __name__ == &quot;__main__&quot;: @@ -236,7 +236,7 @@ if __name__ == &quot;__main__&quot;:
236 #entry_method('<<ComboboxSelected>>', var_method) 236 #entry_method('<<ComboboxSelected>>', var_method)
237 # --- 237 # ---
238 var_exp = tk.DoubleVar() 238 var_exp = tk.DoubleVar()
239 - var_exp.set(2.0) 239 + var_exp.set(0.0)
240 label_exp = tk.Label(frame101m, text="Temps de pose (s)") 240 label_exp = tk.Label(frame101m, text="Temps de pose (s)")
241 label_exp.pack(side = tk.LEFT) 241 label_exp.pack(side = tk.LEFT)
242 entry_exp = tk.Entry(frame101m, width=4, textvariable=var_exp) 242 entry_exp = tk.Entry(frame101m, width=4, textvariable=var_exp)