La famille des XMEGA est la nouvelle génération de microcontrôleur d'ATMEL qui remplace l'ancienne gamme des AVR ATMEGA.
XMEGA | ATMEGA |
---|---|
ADC : 12bits | 10 bits |
DMA | - |
Très faible consommation en veille (100nA @ 1.6V) | Nettement plus |
Cryptage : AES, DES, CRC | - |
32 sorties PWM | 2 - 3 ? |
6 UARTS | 4 |
4 I²C (TWI) | 2 |
4 SPI | 1 |
11 Timer | 3 |
Fonction de génération de signaux (AWex) | - |
Interface pour bouton tactile | - |
XCL (XMEGA Custom Logic) (1) | - |
(1) : Possibilité de générer de la glue logique simple (Portes Logiques, bascules, multiplexeurs etc …)
Les entrées/Sorties des XMEGA sont regroupés par port de 8 bits. Ces ports s'appellent PORTx où x est la lettre du port. Exemple : PORTA, PORTB. Les Pin indivituelles s'appellent Pxn où x correspond au nom du port et n au numéro de la pin. Exemple : PA0
Chaque pin peut être utilisée en sortie ou en entrée. Ce choix se définit dans le registre DIR. Si DIRn est à “0” la pin est paramétrée en entrée si DIRn est à “1” la pin est configurée en sortie.
Direction | Etat logique |
---|---|
Entrée | “0” |
Sortie | “1” |
PORTR.DIR = 0xFF; //Met port R en sortie
L'état de la sortie est contrôlé par le registre OUT. La sortie passera à VCC si OUTn est à “1” et la sortie passera à 0V si la OUTn est à “0”
Etat logique | Tension de sortie |
---|---|
“0” | 0V |
“0” | VCC |
PORTR.OUT = 0x0F; //Met PR0 à PR3 3.3V et PR4 à PR7 à 0V
L'état logique d'une entrée peut être obtenu par une lecture du registre IN.
unsigned char EtatPortA; EtatPortA = PORTA.IN;
Chaque Pin peut avoir une configuration particulière. Ce paramétrage est réalisé via le registre PINnCTRL.
Nom | Configuration de l'entrée/sortie |
---|---|
PORT_OPC_TOTEM_gc | 0 ou VCC |
PORT_OPC_BUSKEEPER_gc | Mémorise le dernier état sur l'entrée via une résistance Pull-up ou Pull-down |
PORT_OPC_PULLDOWN_gc | Pull-down sur l'entrée |
PORT_OPC_PULLUP_gc | Pull-up sur l'entrée |
PORT_OPC_WIREDAND_gc | OUT=1 → H, OUT=0 → 0V (Collecteur ouvert) |
PORT_OPC_WIREDANDPULL_gc | OUT=1 → Pull-Up, OUT=0 → 0V (Collecteur ouvert avec résistance de tirage) |
PORT_OPC_WIREDOR_gc | OUT=1 → VCC, OUT=0 → H |
PORT_OPC_WIREDORPULL_gc | OUT=1 → VCC, OUT=0 → Pull-Down |
PORTA.PIN0CTRL |= PORT_OPC_PULLUP_gc; //Activation de la résistance de tirage à l'état haut sur PIN0 du PORT A
Sur les PIN déclenchant des interruptions, il est possible de définir le mode de déclenchement.
PORTA.PIN0CTRL |= PORT_ISC_RISING_gc;
Nom | Configuration de l'entrée |
---|---|
PORT_ISC_BOTHEDGES_gc | Front montant et descendant |
PORT_ISC_RISING_gc | Front montant |
PORT_ISC_FALLING_gc | Front descendant |
PORT_ISC_LEVEL_gc | Niveau bas |
PORT_ISC_INPUT_DISABLE_gc | Désactivation du buffer d'entrée |
Il est possible d'inverser une entrée. Appliquer 0V sur l'entrée donnera un “1” logique et inversement, appliquer VCC donnera un “0”.
PORTA.PIN0CTRL |= PORT_INVEN_bp;
Chaque entrée a 2 interruptions. Activer une interruption se fait en 3 étapes :
Quand l'XMEGA se met en veille son horloge est désactivée. Un changement sur l'entrée doit être détecté de maniéré asynchrone. Tous les modes de déclenchement (front montant, niveau etc …) ne sont pas possible sur toutes les pin. Seule la PIN2 de chaque port permettra un reveil du microcontroleur quelque soit le mode de déclenchement choisi. Pour les autres PIN, il faudra soit les paramétrer en PORT_ISC_BOTHEDGES_gc ou en PORT_ISC_LEVEL_gc.
Les E/S des périphériques USART, SPI, Timer sont paramétrables sur pin que l'on souhaite pour avoir plus de flexibilité hard/soft.
Après un démarrage, le microcontrôleur utilise l'oscillateur 2Mhz interne. L'horloge peut ensuite être modifiée softwarement à tout moment.
L'horloge périphérique pour fonctionner 2x ou 4x plus rapidement que l'horloge CPU.
Les horloges internes sont calibrées en usine. Les valeurs de calibration sont stockés dans la mémoire flash du microcontrôleur. Ces valeurs doivent être chargés lors de l'initialisation des horloges afin d'avoir la plus grande précision possible.
Oscillateur interne calibré à 32 Mhz lors de la fabrication. Une boucle à verrouillage phase numérique permet de faire varier sa fréquence de 30Mhz à 55Mhz. C'est cette oscillateur qui est utilisé pour la connexion USB qui nécessite une horloge de 48Mhz.
+/-1% de précision. Cette horloge peut être utilisée pour les bus de communications UART, SPI etc … Un quartz externe n'est pas nécessaire.
+/-1% de précision. Cette horloge peut être utilisée pour les bus de communications UART, SPI etc … Un quartz externe n'est pas nécessaire.
+/-2% de précision.
20% de précision. Utilisé pour le BOD et le Watch dog. Consommation : 1µA
Fréquence d'entrée : 400kHz à 32Mhz
Fréquence de sortie : 8 à 128 Mhz
Multiplicateur de la fréquence interne de 1x à 31x
Fréquence max de sortie pour le CPU : 32Mhz
7 Timer de 16 bit (4 de type 0 et 3 de type 1)
Chaque timer est associé un port. Le timer TCx0 est associé au port x.
Exemple de dénomination :
Type 0 :
TCC0 (Port C),
TCD0 (Port D),
TCE0 (Port E),
TCF0 (Port F)
Type 1 :
TCC1 (Port C),
TCD1 (Port D),
TCE1 (Port E)
4 Timer de 8 bit
Possibilité de créer des timers de 32bit en utilisant 2 timer
Générateur de signaux sur le timer 0 (AWex)
Compteur sur entrée externe et mesure de fréquence
Les sources d'horloge
Dénomination | Horloge |
---|---|
TC_CSEL_OFF_gc | Timer off |
TC_CSEL_DIV1_gc | fCLK,SYS |
TC_CSEL_DIV2_gc | fCLK,SYS/2 |
TC_CSEL_DIV4_gc | fCLK,SYS/4 |
TC_CSEL_DIV8_gc | fCLK,SYS/8 |
TC_CSEL_DIV64_gc | fCLK,SYS/64 |
TC_CSEL_DIV256_gc | fCLK,SYS/256 |
TC_CSEL_DIV1024_gc | fCLK,SYS/1024 |
tc_write_clock_source(&TCD1, TC_CLKSEL_DIV8_gc);
tc_set_wgm(&TCD1, TC_WGMODE_SINGLESLOPE_gc);
Vous savez que le timer du microcontroleur s'incrémente à chaque coup d’horloge. La valeur du timer peut être comparée à un registre CCx. En fonction du résultat de cette comparaison le microcontrôleur peut déclencher une interruption ou changer l'état d'une sortie.
tc_write_cc(&TCD1, TC_CCB, 10000);
Nous avons vu que le microcontroleur peut changer l'état d'une sortie sur le résultat de la comparaison avec le registre CCx.
Chaque CCx a un pin associée :
Exemple d'utilisation : En mode PWM, si la valeur du timer est inférieur à CCx, la pin Pxy sera à l'état haut. Si la valeur du timer est supérieur à CCx, la pin Pxy sera à l'état bas. Il est donc possible de faire varier le rapport cyclique de Pxy en changeant simplement la valeur de CCx.
tc_enable_cc_channels(&TCD1,TC_CCBEN);
Plusieurs modes de mise en veille possible :
L'indication de la présence du module USB est indiqué par la lettre U en suffix dans la référence du composant.
Exemple : ATxmega64A1U
Dans les documentations, vous verrez aussi souvent la dénomination xmegaAU. Il s'agit de tous les microcontroleurs de la série A disposant d'une interface USB.
L'XMEGA ne nécessite aucun composant externe pour le connecter en USB.
Il s'agit d'une interface USB “périphérique” et non hote. Ce qui veut dire que votre XMEGA sera reconnu comme une périphérique si vous le connecté à votre PC (Support de stockage, clavier, souris etc …). Il ne sera pas possible de connecter des périphériques à votre XMEGA.
Atmel fournit une série de driver que vous pouvez utiliser en fonction de vos besoins :
Atmel a créé différente séries avec des spécificités particulières.
Le nom de la série est indiqué dans la référence du composant. Exemple : ATxmega64A1U
Il s'agit donc d'un XMEGA64 de la série A.
Il s'agit de la série standard. A utiliser quand vous n'avez pas de besoin spécifique.
Atmel picoPower technology DMA controller Event System Dual 12-bit ADC 12-bit DAC AES/DES crypto engine Full-Speed USB device interface Multiple USARTS, SPI and two-wire interfaces
La série B est équivalente à la série A en intégrant un contrôleur LCD. En contrepartie, elle perd le module de cryptage.
Atmel picoPower technology
Segment LCD controller with: Contrast control Integrated LCD buffers SWAP mode ASCII character mapping Support for scrolling text Programmable segment blinking LCD power supply
Full-speed USB device interface Dual 12-bit ADCs DMA controller Event System Atmel AVR single-cycle CPU
La série C est orientée vers les fonctions USB. Il s'agit de la série A avec des fonctionnalités en moins.
Atmel picoPower technology Event System 12-bit ADC Full-Speed USB device interface
La série D est orientée vers des projets faible consommation. Elle est équivalente à la série C sans le module USB
Atmel picoPower technology Event System 12-bit ADC
La série E est orientée vers des projets nécessitant un faible encombrement. Les boitier sont du type QFN de 32 pins
Atmel picoPower technology XMEGA Custom Logic (XCL) Enhanced DMA 12-bit 1MSPS DAC, 2 channels 12-bit 300kSPS ADC, 16 channels Asynchronous Event System Enhanced timer/counters Fast mode+ 1MHz support on TWI Fast wake-up from internal oscillators System wake-up from USART
Télécharger le logiciel FLIP for Windows (Java Runtime Environement included)
Appuyer sur le bouton SW0 puis alimenter la carte. Le bootloader se mettra en attente de programmation.
Démarrer le logiciel FLIP
Device → Select …
Settings → Communication » USB » Open
File → Load HEX file … Sélectionner le fichier votre fichier .hex qui se trouve dans le dossier
Clique sur RUN