PAS EGSE HVPS for Nucleo F746ZG
Dependencies: SDFileSystem TextLCD mbed
Revision 0:f24491e13cb3, committed 2016-07-25
- Comitter:
- hcseran
- Date:
- Mon Jul 25 09:48:24 2016 +0000
- Commit message:
- PAS EGSE HVPS for Nucleo F746ZG
Changed in this revision
diff -r 000000000000 -r f24491e13cb3 SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Mon Jul 25 09:48:24 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/mbed/code/SDFileSystem/#7b35d1709458
diff -r 000000000000 -r f24491e13cb3 TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Mon Jul 25 09:48:24 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
diff -r 000000000000 -r f24491e13cb3 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Jul 25 09:48:24 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34 \ No newline at end of file
diff -r 000000000000 -r f24491e13cb3 pas_hv_mbed.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pas_hv_mbed.cpp Mon Jul 25 09:48:24 2016 +0000 @@ -0,0 +1,625 @@ +#include "mbed.h" +//#include "TextLCD.h" +//#include "SDFileSystem.h" + +#define GAIN_TOPDEF 6 +#define SIGN_TOPDEF 5 +#define GAIN_BOTDEF 4 +#define SIGN_BOTDEF 3 +#define GAIN_TOPPLATE 2 +#define SIGN_TOPPLATE 1 +#define GAIN_ANL 0 + +//#define LPC1768 +//#define K64F +//#define KL25Z +#define F746ZG + +Serial pc(USBTX, USBRX); +#ifdef LPC1768 +DigitalOut led1(LED1),led2(LED2); +TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); // rs, e, d4-d7 +SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board +SPI spi(p11, p12, p13); // MOSI (Din DAC), MISO (Dout ADC), SCLK +DigitalOut on_off_mhv(p21), cs_adc(p22), sign_top_def(p25), gain_top_def(p26), cs_top_def(p23), cs_mhv(p24); +#endif +#ifdef K64F +SPI spi(D11, D12, D13); // MOSI (Din DAC), MISO (Dout ADC), SCLK +DigitalOut on_off_mhv(PTB18), cs_adc(PTC17), sign_top_def(PTC1), gain_top_def(PTC8), cs_top_def(PTC9), cs_mhv(D9); +DigitalOut gain_anl(D0), cs_anl(PTB19), sign_top_plate(D2), gain_top_plate(D3), cs_top_plate(D4); +DigitalOut sign_bot_def(D5), gain_bot_def(D6), cs_bot_def(D7), hv_limit(D10); +DigitalOut led_green(LED2); // GREEN +DigitalOut led_red(LED1); // RED +DigitalOut led_blue(LED3); // BLUE +#endif +#ifdef F746ZG +SPI spi(D11, D12, D13); // MOSI (Din DAC), MISO (Dout ADC), SCLK +DigitalOut on_off_mhv(PB_2), cs_adc(D1), sign_top_def(PF_4), gain_top_def(PC_2), cs_top_def(PB_1), cs_mhv(D9); +DigitalOut gain_anl(D0), cs_anl(PB_6), sign_top_plate(D2), gain_top_plate(D3), cs_top_plate(D4); +DigitalOut sign_bot_def(D5), gain_bot_def(D6), cs_bot_def(D7), hv_limit(D10); +DigitalOut led_green(LED2); // GREEN +DigitalOut led_red(LED1); // RED +DigitalOut led_blue(LED3); // BLUE +#endif +#ifdef KL25Z +SPI spi(PTD2, PTD3, PTD1); // MOSI (Din DAC), MISO (Dout ADC), SCLK +DigitalOut on_off_mhv(PTC7), cs_adc(PTA1), sign_top_def(PTC3), gain_top_def(PTC4), cs_top_def(PTC5), cs_mhv(PTC6); +DigitalOut gain_anl(PTA2), cs_anl(PTC0), sign_top_plate(PTD4), gain_top_plate(PTA12), cs_top_plate(PTA4); +DigitalOut sign_bot_def(PTA5), gain_bot_def(PTC8), cs_bot_def(PTC9), hv_limit(PTC11); +DigitalOut led_green(LED2); // GREEN +DigitalOut led_red(LED1); // RED +DigitalOut led_blue(LED3); // BLUE +#endif + +struct hv { + short top_def, bot_def, top_plate, anl; + char gain_sign; + struct hv *next; +} *head, *tail, *node, *temp; +typedef struct hv element; + +Ticker sweeper; + +void sweep(void); +void load_dac_gain_sign(element *tail); +void libere_memoire(); + +int main() +{ + char c, on, byte[4] = {0}; + short mhv = 0, dac = 0; + int dwell = 1000000; // interval between steps in microsec +// short adc = 0, gbot_def, sbot_def, gtop_plate, stop_plate, ganl; + short nb_elts = 0; + int adc = 0; + short adc0 = 0, adc1 = 0; + bool clean = false; + unsigned int checksum = 0; + short ok = 0xcc; +// char texte[128]; + +#ifdef LPC1768 + led1 = 0; + led2 = 0; +#endif + +#ifdef K64F + led_red = true; + led_green = true; + led_blue = true; +#endif + +// int step = 10; // increment pour les DACs + // initialisations + on_off_mhv = 0; // mhv off + cs_adc = 1; // adc not selected + cs_anl = 1; + cs_bot_def = 1; + cs_top_plate = 1; + cs_top_def = 1; // dac anl not selected + cs_mhv = 1; // dac mhv not selected + gain_anl = 0; // low gain + gain_top_def = 0; // low gain + gain_bot_def = 0; + gain_top_plate = 0; + sign_top_def = 1; // positif + sign_bot_def = 0; // negatif + sign_top_plate = 1; // positif + + spi.format(16,1); // setup for SPI DAC, 16 bit data, high steady state clock, second edge capture +// spi.frequency(1000000); // 1 MHz SPI clock + spi.frequency(100000); // 100 kHz SPI clock + +// pc.baud(9600); // set baud rate for RS232 + pc.baud(115200); + pc.format(8, SerialBase::None, 1); // 8 bits data, no parity bit, 1 stop bit + + +#ifdef LPC1768 + if (sign_top_def == 1) s = '+'; + else s = '-'; + if (gain_top_def == 1) g = 'H'; + else g = 'L'; + if (on_off_mhv == 0) on = 'A'; + else on = 'M'; + lcd.cls(); // clear the LCD screen + lcd.locate(13,0); // locate to column 13, row 0 + lcd.printf("%c%c%c", g, s, on); + lcd.locate(0,1); // locate to column 0, row 1 + lcd.printf("MHV %4d AN %4d", mhv, anl); +#endif + while (1) { + c = pc.getc(); + if (c == 0x01) { + pc.puts("Connexion OK\r\n"); +#ifdef LPC1768 + led1 = 1; +#endif + } + if (c == 0x02) { // load DAC, gain and sign values +#ifdef K64F +// led_green = false; // allume la LED verte +#endif + if (clean) { + nb_elts = 0; + ok = 0xcc; + libere_memoire(); + clean = false; +#ifdef K64F + led_green = false; // allume la LED verte +#endif + } + +#ifdef LPC1768 + led2 =!led2; +#endif +#ifdef K64F +// led_green = !led_green; // LED verte clignote +#endif + // renvoie la commande pour signaler qu'on est prêt à recevoir les données + pc.putc(0x02); + checksum = 0; + if (nb_elts == 0) { + byte[0] = pc.getc(); // MSB + byte[1] = pc.getc(); // LSB + if (ok == 0xcc) head = (element*)malloc(sizeof(element)); + head->top_def = (byte[0] << 8) | byte[1]; + checksum += head->top_def; + byte[0] = pc.getc(); // MSB + byte[1] = pc.getc(); // LSB + head->bot_def = (byte[0] << 8) | byte[1]; + checksum += head->bot_def; + byte[0] = pc.getc(); // MSB + byte[1] = pc.getc(); // LSB + head->top_plate = (byte[0] << 8) | byte[1]; + checksum += head->top_plate; + byte[0] = pc.getc(); // MSB + byte[1] = pc.getc(); // LSB + head->anl = (byte[0] << 8) | byte[1]; + checksum += head->anl; +#ifdef LPC1768 + lcd.cls(); + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",head->top_def,head->bot_def,head->top_plate,head->anl); +#endif + byte[0] = pc.getc(); + checksum += byte[0]; + head->gain_sign = byte[0]; +#ifdef LPC1768 + lcd.locate(0, 0); // columb 0, row 0 + lcd.printf("%04x",head->gain_sign); +#endif + tail = head; + // renvoyer le checksum + byte[0] = checksum & 0xff; // LSB + pc.putc(byte[0]); + byte[1] = (checksum >> 8) & 0xff; // MSB + pc.putc(byte[1]); + byte[0] = (checksum >> 16) & 0xff; + pc.putc(byte[0]); + byte[1] = (checksum >> 24) & 0xff; + pc.putc(byte[1]); + // attendre la réponse: si Ok attendre 0xcc, si Nok attendre 0x33 + ok = pc.getc(); + if (ok == 0xcc) nb_elts = 1; + } else { + if (ok == 0xcc) { + tail->next = (element*)malloc(sizeof(element)); + tail = tail->next; // avance d'un pas + } + byte[0] = pc.getc(); + byte[1] = pc.getc(); + tail->top_def = (byte[0] << 8) | byte[1]; + checksum += tail->top_def; + byte[0] = pc.getc(); + byte[1] = pc.getc(); + tail->bot_def = (byte[0] << 8) | byte[1]; + checksum += tail->bot_def; + byte[0] = pc.getc(); + byte[1] = pc.getc(); + tail->top_plate = (byte[0] << 8) | byte[1]; + checksum += tail->top_plate; + byte[0] = pc.getc(); + byte[1] = pc.getc(); + tail->anl = (byte[0] << 8) | byte[1]; + checksum += tail->anl; + byte[0] = pc.getc(); + checksum += byte[0]; + tail->gain_sign = byte[0]; +#ifdef LPC1768 + lcd.cls(); + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",tail->top_def,tail->bot_def,tail->top_plate,tail->anl); + lcd.locate(15, 0); // columb 15, row 0 + lcd.printf("%2x",tail->gain_sign); +#endif + + // renvoyer le checksum + byte[0] = checksum & 0xff; // LSB + pc.putc(byte[0]); + byte[1] = (checksum >> 8) & 0xff; // MSB + pc.putc(byte[1]); + byte[0] = (checksum >> 16) & 0xff; + pc.putc(byte[0]); + byte[1] = (checksum >> 24) & 0xff; + pc.putc(byte[1]); + // attendre la réponse: si Ok attendre 0xcc, si Nok attendre 0x33 + ok = pc.getc(); + if (ok == 0xcc) nb_elts++; + tail->next = NULL; + } +#ifdef K64F +// led_green = true; // éteint la LED verte +#endif + } + if ( c == 0x03) { // send the number of elements loaded in memory +#ifdef LPC1768 + lcd.locate(0, 0); + lcd.printf("Nb of elts: %4d",nb_elts); +#endif + byte[0] = nb_elts & 0xff; // LSB + pc.putc(byte[0]); + byte[1] = nb_elts >> 8; // MSB + pc.putc(byte[1]); + // positionne en début de liste + tail = head; + // Set DACs gain & sign + spi.format(16,1); + load_dac_gain_sign(tail); + clean = true; +#ifdef K64F + led_green = true; // éteint la LED verte +#endif + + } + if ( c == 0x04) { // receive the DAC MHV and returns it + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + mhv = (byte[0] << 8) | byte[1]; +#ifdef LPC1768 + lcd.locate(0, 0); + lcd.printf("MHV : %04d %02x ",mhv,tail->gain_sign); +#endif + pc.putc(byte[1]); // LSB sent + pc.putc(byte[0]); // MSB sent + + spi.format(16,1); // format to write into DAC + cs_mhv = 0; + spi.write(mhv); // send value to DAC MHV + cs_mhv = 1; + } + if ( c == 0x05) { // avance d'un pas +#ifdef K64F +// led_blue = false; // allume la LED +#endif + tail = tail->next; +#ifdef LPC1768 + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",tail->top_def,tail->bot_def,tail->top_plate,tail->anl); +#endif + // configure DAC with top_def value, gain and sign + spi.format(16,1); + load_dac_gain_sign(tail); +#ifdef K64F +// led_blue = true; // éteint la LED +#endif + } + if ( c == 0x06) { // recule d'un pas +#ifdef K64F +// led_red = false; // allume la LED +#endif + node = head; + if (tail != head) { + while (node->next != tail) node = node ->next; + tail = node; // recule d'un pas dans la liste + } +#ifdef LPC1768 + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",tail->top_def,tail->bot_def,tail->top_plate,tail->anl); +#endif + // configure DAC with top_def value, gain and sign + spi.format(16,1); + load_dac_gain_sign(tail); +#ifdef K64F +// led_red = true; // éteint la LED +#endif + } + if ( c == 0x07) { // set DAC values, gain & sign + spi.format(16,1); + load_dac_gain_sign(tail); +#ifdef LPC1768 + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",tail->top_def,tail->bot_def,tail->top_plate,tail->anl); + lcd.locate(14, 0); + lcd.printf("%02x",tail->gain_sign); +#endif + } + if ( c == 0x08) { // receive DAC top def value and reloads top def DAC + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + dac = (byte[0] << 8) | byte[1]; + spi.format(16,1); + cs_top_def = 0; + spi.write(dac); // send value to DAC + cs_top_def = 1; + } + if ( c == 0x09) { + tail = head; // set pointer to beginning of list +#ifdef LPC1768 + lcd.locate(0, 1); + lcd.printf("%4x%4x%4x%4x",tail->top_def,tail->bot_def,tail->top_plate,tail->anl); +#endif + spi.format(16,1); + load_dac_gain_sign(tail); + } + if ( c == 0x0a) { + tail->gain_sign = pc.getc(); // gain & sign received + gain_top_def = ((tail->gain_sign) >> GAIN_TOPDEF) & 0x01; + sign_top_def = ((tail->gain_sign) >> SIGN_TOPDEF) & 0x01; + gain_bot_def = ((tail->gain_sign) >> GAIN_BOTDEF) & 0x01; + sign_bot_def = ((tail->gain_sign) >> SIGN_BOTDEF) & 0x01; + gain_top_plate = ((tail->gain_sign) >> GAIN_TOPPLATE) & 0x01; + sign_top_plate = ((tail->gain_sign) >> SIGN_TOPPLATE) & 0x01; + gain_anl = ((tail->gain_sign) >> GAIN_ANL) & 0x01; + //lcd.locate(14, 0); // column 15, row 0 + //lcd.printf("%2x",tail->gain_sign); + } + if ( c == 0x0b) { // receive On/Off value and set it + on = pc.getc(); + on_off_mhv = on; // set on(1) / off(0) MHV + } + if ( c == 0x0c) { // send ADC values +#ifdef F746ZG + spi.format(16,3); // format pour l'ADC +// spi.format(8,3); + + // faire une lecture bidon sans sélectionner l'ADC + spi.write(0); + cs_adc = 0; + +// adc = spi.write(0); + + adc = spi.write(0x0800); // lecture adc in0 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part + // adc1 = spi.write(0x8); // lecture adc in0 (HK_TEMP_HVPS) + // adc0 = spi.write(0); + pc.putc(adc1); // send MSB in0 + pc.putc(adc0); // send LSB in0 + + adc = spi.write(0x1000); // lecture adc in1 + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part + // adc1 = spi.write(0x10); // lecture adc in1 (HK_TEMP_EA) + // adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x1800); // lecture adc in2 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part +// adc1 = spi.write(0x18); // lecture adc in2 (HK_MHV_POS) +// adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x2000); // lecture adc in3 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part +// adc1 = spi.write(0x20); // lecture adc in3 (HK_MHV_NEG) +// adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x2800); // lecture adc in4 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part +// adc1 = spi.write(0x28); // lecture adc in4 (HK_ANL) +// adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x3000); // lecture adc in5 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part + // adc1 = spi.write(0x30); // lecture adc in5 (HK_TOP_DEF) + // adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x3800); // lecture adc in6 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part + // adc1 = spi.write(0x38); // lecture adc in6 (HK_BOT_DEF) + // adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + + adc = spi.write(0x0); // lecture adc in7 (HK_TEMP_HVPS) + adc1 = adc >> 8; // MSB part + adc0 = adc & 0xff; // LSB part + // adc1 = spi.write(0); // lecture adc in7 (HK_TOP_PLT) finit sur 0 pour démarrer par in0 + // adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + cs_adc = 1; +#endif +#ifdef K64F +// spi.format(16,3); // format pour l'ADC + spi.format(8,3); + + // faire une lecture bidon sans sélectionner l'ADC + spi.write(0); + cs_adc = 0; + + adc = spi.write(0); + +// adc = spi.write(0x0800); // lecture adc in0 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x8); // lecture adc in0 (HK_TEMP_HVPS) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB in0 + pc.putc(adc0); // send LSB in0 + +// adc = spi.write(0x1000); // lecture adc in1 +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x10); // lecture adc in1 (HK_TEMP_EA) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x1800); // lecture adc in2 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x18); // lecture adc in2 (HK_MHV_POS) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x2000); // lecture adc in3 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x20); // lecture adc in3 (HK_MHV_NEG) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x2800); // lecture adc in4 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x28); // lecture adc in4 (HK_ANL) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x3000); // lecture adc in5 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x30); // lecture adc in5 (HK_TOP_DEF) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x3800); // lecture adc in6 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0x38); // lecture adc in6 (HK_BOT_DEF) + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + +// adc = spi.write(0x0); // lecture adc in7 (HK_TEMP_HVPS) +// adc1 = adc >> 8; // MSB part +// adc0 = adc & 0xff; // LSB part + adc1 = spi.write(0); // lecture adc in7 (HK_TOP_PLT) finit sur 0 pour démarrer par in0 + adc0 = spi.write(0); + pc.putc(adc1); // send MSB adc + pc.putc(adc0); // send LSB adc + cs_adc = 1; +#endif + spi.format(16,1); // format to write into DAC + // faire une lecture bidon sans sélectionner l'ADC + spi.write(0); + } + if ( c == 0x0d) { // load the dwell time in us + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + byte[3] = pc.getc(); // LSB + byte[2] = pc.getc(); // MSB + dwell = (((byte[2] << 24) | byte[3]) << 16) | ((byte[0] << 8) | byte[1]); +#ifdef LPC1768 + lcd.locate(0, 0); + lcd.printf("Dwell : %8d",dwell); +#endif + pc.putc(byte[1]); // LSB sent + pc.putc(byte[0]); // MSB sent + pc.putc(byte[3]); // LSB sent + pc.putc(byte[2]); // MSB sent + } + if ( c == 0x0e) { // start sweeping + spi.format(16,1); // ecrire dans les DACs + sweeper.attach_us(&sweep,dwell); + } + if ( c == 0x0f) { // stop sweeping + sweeper.detach(); + } + if ( c == 0x10) { // receive DAC analyzer value and reloads analyzer DAC + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + dac = (byte[0] << 8) | byte[1]; + spi.format(16,1); + cs_anl = 0; + spi.write(dac); // send value to DAC + cs_anl = 1; + } + if ( c == 0x11) { // receive DAC bot def value and reloads bot def DAC + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + dac = (byte[0] << 8) | byte[1]; + spi.format(16,1); + cs_bot_def = 0; + spi.write(dac); // send value to DAC + cs_bot_def = 1; + } + if ( c == 0x12) { // receive DAC top plate value and reloads top plate DAC + byte[1] = pc.getc(); // LSB received + byte[0] = pc.getc(); // MSB received + dac = (byte[0] << 8) | byte[1]; + spi.format(16,1); + cs_top_plate = 0; + spi.write(dac); // send value to DAC + cs_top_plate = 1; + } + } // end while (1) + +} // end main + +void sweep() +{ + if (tail->next != NULL) { + tail = tail->next; // avance d'un pas + } else tail = head; // revient au début + load_dac_gain_sign(tail); +} // end sweep() + +void load_dac_gain_sign(element *tail) +{ + gain_top_def = ((tail->gain_sign) >> GAIN_TOPDEF) & 0x01; + sign_top_def = ((tail->gain_sign) >> SIGN_TOPDEF) & 0x01; + cs_top_def = 0; + spi.write(tail->top_def); // send value to DAC + cs_top_def = 1; + gain_bot_def = ((tail->gain_sign) >> GAIN_BOTDEF) & 0x01; + sign_bot_def = ((tail->gain_sign) >> SIGN_BOTDEF) & 0x01; + cs_bot_def = 0; + spi.write(tail->bot_def); // send value DAC bot def + cs_bot_def = 1; + gain_top_plate = ((tail->gain_sign) >> GAIN_TOPPLATE) & 0x01; + sign_top_plate = ((tail->gain_sign) >> SIGN_TOPPLATE) & 0x01; + cs_top_plate = 0; + spi.write(tail->top_plate); // send value DAC top plate + cs_top_plate = 1; + gain_anl = ((tail->gain_sign) >> GAIN_ANL) & 0x01; + cs_anl = 0; + spi.write(tail->anl); // send value DAC top plate + cs_anl = 1; +} + +void libere_memoire() +{ + element *node,*temp; + + node = head; + temp = node; + + while (node != NULL) { + temp = node; + node = node->next; + free(temp); + } + head = NULL; +// free(head); +} +