Table des matières
ATMEL XMEGA
La famille des XMEGA est la nouvelle génération de microcontrôleur d'ATMEL qui remplace l'ancienne gamme des AVR ATMEGA.
Fonctionalités - Comparatif 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 ports d'entrée / sortie
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
La direction
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
Etat d'une 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
Lecture de l'état d'une entrée
L'état logique d'une entrée peut être obtenu par une lecture du registre IN.
unsigned char EtatPortA; EtatPortA = PORTA.IN;
Configuration
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 |
Inversion
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;
Interruption
Chaque entrée a 2 interruptions. Activer une interruption se fait en 3 étapes :
- Configurer le registre PINnCTRL (Choix du mode de déclenchement, front montant etc …)
- Mettre à “1” le bit correspondant à l'entrée dans le registre INT0MASK
- Définir le niveau de priorité en paramétrant les registres INT0LVL et INTLVL
Sortie de veille
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.
E/S périphériques
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.
Horloges
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.
Horloges internes
- 32Mhz
- 2Mhz
- 32.768Khz
- 32KHz (ULP - ultra low power)
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.
32 Mhz
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.
2 Mhz
+/-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.
32.768Khz
+/-2% de précision.
32KHz (ULP)
20% de précision. Utilisé pour le BOD et le Watch dog. Consommation : 1µA
Horloges Externes
- Quartz 0.4Mhz à 16Mhz
- 32.768Khz
- Signal carré externe
PLL et prédiviseur
PLL
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
Prediviseur
Timer
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
Horloge
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);
Modes de fonctionnement
- Normal mode.
- Frequency Generation mode.
- Single Slope PWM.
- Dual Slope PWM, overflow on TOP.
- Dual Slope PWM, overflow on TOP and BOTTOM.
- Dual Slope PWM, overflow on BOTTOM.
tc_set_wgm(&TCD1, TC_WGMODE_SINGLESLOPE_gc);
Normal mode
Registre de comparaison
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);
Sortie Timer
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);
Veille
Plusieurs modes de mise en veille possible :
Idle
- Tous les périphériques sont fonctionnels
- Tous les périphériques peuvent réveiller le microcontroleur
- Le contrôleur DMA et les systèmes d'interruptions sont fonctionnels
Power save
- Horloges coupées sauf l'horloge la RTC
- La RTC, les interruptions externes, la liaison I2C, le watchdog peuvent redémarrer le microcontrôleur
Power down
- Toutes les horologes sont coupées
- Les interruptions externes, la liaison I2C, le watchdog peuvent redémarrer le microcontrôleur
Standby
- Power down mais les oscillateurs sont fonctionnels pour un démarrage rapide
Extended Standby
- Power save mais les oscillateurs sont fonctionnels pour un démarrage rapide
USB
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.
Drivers
Atmel fournit une série de driver que vous pouvez utiliser en fonction de vos besoins :
- CDC (Communication Device Class) - Port COM virtuel
- HID Mouse - Émulation d'une souris
- HID Keyboard - Émulation d'une souris
- HID Generic - Il s'agit d'un driver générique. Il faudra développer votre propre driver coté PC pour pouvoir l'utiliser.
- Mass Storage (MSD) - Émulation d'une carte mémoire ou d'une clé USB externe.
- Personal Healthcare - Pour les systèmes médicaux ayant comme vocation d'envoyer des données à monitorer.
- DFU Bootloader - Il s'agit d'un driver permettant de programmer le microcontrôleur via la liaison USB.
Série
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.
Tableau comparatif
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
Série B
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
Série C
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
Série D
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
Série E
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
Bootloader
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