0

TUTO XMEGA (ASF): Temporisation avec la librairie delay

La derniere version de ce tuto est disponible sur le WIKI

Dans cette exemple, nous allons simplement faire clignoter une LED. Pour cela, nous allons avoir besoin de créer une temporisation avec la fonction “delay” de l’ASF.

Il est très facile de mettre en place ce type de temporisation néanmoins cette méthode accapare les ressources du microcontrôleur pendant toute l’exécution de la fonction de temporisation. Il est donc déconseillé de l’utiliser.

Importer les librairies qui sont nécessaires. Cliquer sur ASF → ASF Wizard. Chercher les librairies suivants :

  • Delay routines (pour les temporisations)
  • GPIO – Généra purpose Input/Output
  • Generic board support (elle integre des fonctions qui seront necessaire pour utiliser la librairie delay)
  • IOPORT – Généra purpose Input/Output (Librairie que nous avons vu dans la partie entrée/sorties.

Cliquer sur Add pour importer les librairies dans votre projet.

La fonction delay est directement liée à la fréquence de fonctionnement de votre micro.
Il est donc important de la définir dans votre projet.
Pour cela, faites un clic droit sur “board_init()” selectionner “Goto implementation”.
Vous pouvez voir dans les includes, le fichier “board.h”. Ouvrer le en faisant un clic droit dessus puis en sélectionnant “Goto implementation”.

Vous pouvez voir dans ce fichier, l’ensemble des cartes de developpement d’ATMEL.
Vous trouverez en bas de la liste

#elif BOARD == USER_BOARD
  // User-reserved area: #include the header file of your board here (if any).
#  include “user_board.h“

Atmel a prevu un fichier “user_board.h” qui intégrera les informations spécifiques de votre carte. (Clic droit → Goto implementation.)

Si vous utilisez un quartz externe, il faudra décommenter les 3 lignes et les compléter avec les caractéristiques de votre carte.

La fréquence de votre horloge (Pour ma part, il s’agit d’un quartz de 32.768 Khz connecté sur les pin TOSC.

#define BOARD_XOSC_HZ          32768

Le type d’oscillateur externe

XOSC_TYPE_32KHZ Quartz de 32.768Khz
XOSC_TYPE_EXTERNAL Signal d’horloge
XOSC_TYPE_XTAL Quartz de 0.4 à 16Mhz
#define BOARD_XOSC_TYPE        XOSC_TYPE_32KHZ

Le temps de stabilisation de votre oscillateur. Mettez 1ms pour être tranquille.

#define BOARD_XOSC_STARTUP_US  1000000

Ouvrez ensuite le fichier “conf_clock.h” dans le répertoire config de votre projet. Vous trouverez toute une série de lignes permettant de configurer vos horloges. Pour l’instant, nous allons juste nous intéresser aux premières.CONFIG_SYSCLK_SOURCE définit la source de votre horloge système qui peut être :

SYSCLK_SRC_RC2MHZ Oscillateur 2Mhz interne
SYSCLK_SRC_RC32MHZ Oscillateur 32Mhz interne
SYSCLK_SRC_XOSC Oscillateur externe
SYSCLK_SRC_XOSC PLL

Sélectionner le type d’horloge que vous utilisez.

Pour plus d’informations sur le fonctionnement des horloges, vous pouvez voir le tuto sur les XMEGA

Ouvrez le fichier main.c du projet et complétez avec :

#define LED IOPORT_CREATE_PIN(PORTR, 0)	//LED = PR0

int main (void)
{
	sysclk_init();	//Initialisation horloge système

	board_init();	//Initialisation de la carte

	//Initialisation des entrées/sorties
	ioport_init();					//Initialisation d'IOPORT
	ioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT);	//LED_ROUGE est une sortie

	while(1)
	{
		ioport_toggle_pin_level(LED);	//Inverse l'état de la LED1
		delay_ms(250);			//Tempo de 250ms
	}
}

Comme vous le savez les oscillateurs internes de l’XMEGA sont calibrés. Les valeurs de qualibration sont stockées dans le microcontrôleur mais ne sont pas cherchées automatiquement au démarrage. La fonction sysclk_init se charge de charger ces valeurs et paramétrer vos horloges comme vous l’avez indiqué dans votre projet

admin

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *