votre temps local: :: ()
heure officielle (en France) : ::(TZ:)
Heure UTC client: :: Offset client: s - delai: ms - - timeZone: Heure UTC: ::Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
fr:dds [2016/03/02 10:48] fwiotte |
fr:dds [2018/03/23 14:39] (Version actuelle) fwiotte [Les dernières applications DDS au LPL] |
||
|---|---|---|---|
| Ligne 12: | Ligne 12: | ||
| [[fr: programmes en C pour communiquer avec le DDS]] | [[fr: programmes en C pour communiquer avec le DDS]] | ||
| - | **Exemple de programme en C écrit dans le microcontrôleur MSP430F169** | + | [[fr: Nouveau développement 2018-> double DDS 8 sorties pour piège RF programmation QSPI]] |
| - | + | ===== Un schéma de base avec l'AD9959 ===== | |
| - | initialisation et chargement des registres CSR et CFTW0: | + | |
| - | + | ||
| - | int CSR_ADDRESS = 0x00; AD9959 CSR adresss Byte | + | |
| - | int CSR_NUM_BYTE = 0x01; CSR nombre d'octet du registre | + | |
| - | long CSR0 = 0x10; AD9959 du channel 0 MSB first SPI par défaut | + | |
| - | + | ||
| - | int FTW_ADDRESS = 0x04; AD9959 FTW adresss Byte | + | |
| - | int FTW_NUM_BYTE = 0x04; FTW nombre d'octet du registre | + | |
| - | long FTW0 = 0x28F5C28F; frequence en hex fout x2^32/fclock | + | |
| - | + | ||
| - | dans le main: | + | |
| - | P4OUT = 0x40; AD9959 master reset bit de validation du MSP430 | + | |
| - | P4OUT = 0x00; AD9959 master set bit de validation du MSP430 | + | |
| - | + | ||
| - | write_serial_port(CSR_ADDRESS, CSR0, CSR_NUM_BYTE); | + | |
| - | P5OUT = 0x40; I/O update du DDS bit de validation du MSP430 | + | |
| - | P5OUT = 0x00; I/O update du DDS bit de validation du MSP430 | + | |
| - | + | ||
| - | write_serial_port(FTW_ADDRESS, FTW0, FTW_NUM_BYTE); | + | |
| - | P5OUT = 0x40; I/O update du DDS bit de validation du MSP430 | + | |
| - | P5OUT = 0x00; I/O update du DDS bit de validation du MSP430 | + | |
| - | + | ||
| - | + | ||
| - | **Commentaires sur le programme:** | + | |
| - | + | ||
| - | on fait un RESET du DDS (pin 3), on charge les données de chaque registre au travers du port SPI write_serial_port... | + | |
| - | Puis on réalise un I/O UPDATE pin 46 du DDS pour la validation et le transfert des données. | + | |
| - | Ce bout de programme permet de charger le channel 0 avec une fréquence de 80MHz et une amplitude par défaut FULL DAC. | + | |
| - | + | ||
| - | I/O_UPDATE is synchronous to the SYNC_CLK (Pin 54) = Master clock/4. | + | |
| - | Voir figure 40 du datasheet du DDS. | + | |
| - | + | ||
| - | Ci-dessous le sous programme d'initialisation des ports du microcontrôleur et du SPI pour le MSP430F169 : TI fourni de nombreux exemples de codes de bases pour configurer les modes SPI, I2C et utiliser la mémoire Flash: {{:fr:slac015p.zip|}} | + | |
| - | + | ||
| - | #include <msp430x16x.h> | + | |
| - | void DDS_quartz_oscillator_init(void) | + | |
| - | { | + | |
| - | BCSCTL1 |= XTS; ACLK= LFXT1= HF XTAL | + | |
| - | BCSCTL2 |= SELM_3; MCLK = LFXT1 (safe) pin 8,9 du MSP430 | + | |
| - | P1SEL = 0x00; P1 I/O select | + | |
| - | P2SEL = 0x00; P2 I/O select | + | |
| - | P3SEL = 0x00; P3 I/O select | + | |
| - | P4SEL = 0x00; P4 I/O select | + | |
| - | P5SEL = 0x0A; P5.1,3 SPI option select | + | |
| - | P6SEL = 0x00; P6 I/O select | + | |
| - | P1DIR = 0xFF; P1.output direction | + | |
| - | P2DIR = 0xFF; P2 output direction | + | |
| - | P3DIR = 0xFF; P3 output direction | + | |
| - | P4DIR = 0xFF; P4 output direction | + | |
| - | P5DIR = 0xFF; P5 output direction | + | |
| - | P6DIR = 0xFF; P6 output direction | + | |
| - | ME2 |= USPIE1; Enable USART1 SPI | + | |
| - | UCTL1 |= CHAR + SYNC + MM; 8-bit SPI Master **SWRST** | + | |
| - | UTCTL1 = CKPH + SSEL1 + STC; SMCLK delayed, 3-pin | + | |
| - | UBR01 = 0x2; ACLK/2 for baud rate | + | |
| - | UBR11 = 0x0; ACLK/2 for baud rate | + | |
| - | UMCTL1 = 0x0; Clear modulation | + | |
| - | UCTL1 &= ~SWRST; Initialize USART state machine | + | |
| - | } | + | |
| - | + | ||
| - | BCSCTL1 |= XTS; et BCSCTL2 |= SELM_3; permet d'être en mode HF XTAL le MSP430 fonctionnera à 8MHZ au lieu | + | |
| - | de 32KHz par défaut. | + | |
| - | MSP430F169 | + | |
| - | ----------------- | + | |
| - | /|\| XIN|- | + | |
| - | | | | HF XTAL (455k - 8Mhz) | + | |
| - | --|RST XOUT|- | + | |
| - | | | | + | |
| - | | P5.4|-->MCLK = XTAL | + | |
| - | + | ||
| - | D'après : | + | |
| - | // M. Buccini | + | |
| - | // Texas Instruments Inc. | + | |
| - | // Feb 2005 | + | |
| - | // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A | + | |
| - | + | ||
| - | la routine pour le chargement des données en mode SPI du MSP430F169 : | + | |
| - | + | ||
| - | void write_serial_port(int instruction, long data, int num_byte) | + | |
| - | { | + | |
| - | int i=0; | + | |
| - | + | ||
| - | TXBUF1 = instruction; | + | |
| - | do | + | |
| - | { | + | |
| - | TXBUF1 = data >>(num_byte-1-i)*8; | + | |
| - | i++; | + | |
| - | } | + | |
| - | while (i < num_byte); | + | |
| - | } | + | |
| - | la routine pour le chargement des données en mode SPI de l'ARM TM4C123GH6PM : | + | |
| - | + | ||
| - | int i=0; | + | |
| - | SSI0_DR_R = instruction; | + | |
| - | while( num_byte ) | + | |
| - | { | + | |
| - | while(!(SSI0_SR_R & SSI_SR_TNF)) {} // SPI0 du TM4C123GH6PM | + | |
| - | SSI0_DR_R = data >>(num_byte-1-i)*8; | + | |
| - | num_byte--; | + | |
| - | } | + | |
| - | + | ||
| - | while( !( SSI0_SR_R & SSI_SR_TNF ) ) | + | |
| - | { | + | |
| - | ; | + | |
| - | } | + | |
| - | La routine init (SPI) pour l'ARM TM4C123GH6PM: | + | |
| - | + | ||
| - | // Enable Peripheral SSI0 | + | |
| - | SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //Enable GPIO port A SSI0. | + | |
| - | SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); | + | |
| - | GPIOPinConfigure(GPIO_PA2_SSI0CLK); | + | |
| - | GPIOPinConfigure(GPIO_PA3_SSI0FSS); | + | |
| - | GPIOPinConfigure(GPIO_PA5_SSI0TX); | + | |
| - | GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_3 | GPIO_PIN_2); | + | |
| - | //GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_2); | + | |
| - | SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, | + | |
| - | SSI_MODE_MASTER, 10000000, 8); | + | |
| - | SSIEnable(SSI0_BASE); // Enable the SSI | + | |
| - | Exemple d'initialisation d'un PORT sur l'ARM TM4C123GH6PM | + | |
| - | //void PortB_Init(void) | + | |
| - | volatile unsigned long delay; | + | |
| - | SYSCTL_RCGC2_R |= 0x00000002; // 1) activate clock for Port B | + | |
| - | delay = SYSCTL_RCGC2_R; // allow time for clock to start | + | |
| - | GPIO_PORTB_AMSEL_R = 0x00; // 3) disable analog on PB | + | |
| - | GPIO_PORTB_PCTL_R = 0x00000000; // 4) PCTL GPIO on PB0 | + | |
| - | GPIO_PORTB_DIR_R |= 0xFF; // 5) PB0-PB7 is out | + | |
| - | //GPIO_PORTB_AFSEL_R &= ~0x01; // 6) disable alt funct on PB0 | + | |
| - | GPIO_PORTB_AFSEL_R &= ~0xFF; // 6) disable alt funct on PB0-PB7 | + | |
| - | GPIO_PORTB_DEN_R |= 0xFF; // 7) enable digital I/O on PB0-PB7 | + | |
| - | + | ||
| - | ====== Un schéma de base avec l'AD9959 ====== | + | |
| Parce qu'un schéma vaut mieux qu'un long discours! | Parce qu'un schéma vaut mieux qu'un long discours! | ||
| Cette carte est générique, et grâce au port SPI sur la carte on | Cette carte est générique, et grâce au port SPI sur la carte on | ||
| Ligne 151: | Ligne 20: | ||
| {{:fr:carte_ad9959.png?200|}} | {{:fr:carte_ad9959.png?200|}} | ||
| - | ====== La carte électronique pour l'habillage du piège RF===== | + | ==== La carte électronique pour l'habillage du piège RF==== |
| ===== BEC de Rubidium ====== | ===== BEC de Rubidium ====== | ||
| {{:fr:dds_ad9959_bec.pdf|}} | {{:fr:dds_ad9959_bec.pdf|}} | ||
| Ligne 174: | Ligne 43: | ||
| Document complet | Document complet | ||
| {{:fr:cartes_dds_ad9858_et_ad9852_sur_carte_ni_dio_32hs.pdf|}} | {{:fr:cartes_dds_ad9858_et_ad9852_sur_carte_ni_dio_32hs.pdf|}} | ||
| - | ====== Le programme sous windows avec interface CVI ====== | + | ===== Le programme sous windows avec interface CVI ===== |
| + | |||
| + | Une routine sous Windows CVI à été développée avec une liaison USB-Série (un pont USB) | ||
| + | pour charger les données via un PC. | ||
| - | Une routine sous Windows CVI à été développée avec une liaison USB-Série (un pont USB). | ||
| Ci-dessous le programme en C dans le microcontrôleur qui permet le transfert des données à une vitesse maximale de 1Mb | Ci-dessous le programme en C dans le microcontrôleur qui permet le transfert des données à une vitesse maximale de 1Mb | ||
| data1 => données séries venant du pont USB-serial.puce FTDI | data1 => données séries venant du pont USB-serial.puce FTDI | ||
| Ligne 212: | Ligne 83: | ||
| {{:fr:20151027electroniqueatomesfroidslpl2-a0.pdf|}} | {{:fr:20151027electroniqueatomesfroidslpl2-a0.pdf|}} | ||
| + | |||
| + | {{ :fr:geneyig.pdf |}} | ||
| + | |||
| + | {{ :fr:notebusdds.pdf |}} | ||
| + | |||
| + | |||