WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


xmega

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

PORT_OPC_BUSKEEPER_gc permet de maintenir un niveau logique sur un fil qui passe en haute impédance et ainsi éviter un état indéterminé sur l'entrée.

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

PORT_ISC_INPUT_DISABLE_gc permet de réduire la consommation quand la pin n'est pas utilisée ou utilisée en analogique. Dans ce cas, l'entrée sera dans le registre IN sera toujours à 0

PORT_ISC_LEVEL_gc il est possible de faire une detection sur niveau haut en inversant l'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 :

  1. Configurer le registre PINnCTRL (Choix du mode de déclenchement, front montant etc …)
  2. Mettre à “1” le bit correspondant à l'entrée dans le registre INT0MASK
  3. Définir le niveau de priorité en paramétrant les registres INT0LVL et INTLVL

La priorité sélectionnée doit être activée dans le PMIC (Programmable Multilevel Interrupt Controler). Le flag d'interruption global doit également être activé

Sortie de veille

Quand l'XMEGA se met en veille sont 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

Diviseur de fréquence paramétrable /1 à /2048

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

xmega.txt · Dernière modification: 2014/10/25 03:01 (modification externe)