Merci et bravo à vous qui n'utilisez pas IE !

Votre navigateur est :

Votre adresse IP est 54.145.101.33

Programmation des µC ATMEL

Quelques bases

Les registres

Avant d'écrire tout programme, il est nécessaire de définir le µC que l'on souhaite utiliser, puis d'initialiser les entrées et sorties. Il existe déja les fichiers d'initialisation qui initialisent les registres, il suffit simplement de faire appel à ce fichier avec la commande #include <fichier.h>.
Ces fichiers se trouve dans le repertoire d'installation de CodeVisionAVR. Par exemple, si l'on veut utliser l'ATmega 16, alors il faudra inclure le fichier mega16.h


Ensuite, il est nécessaire de définir les entrées-sorties. On doit en effet définir quels ports sont utilisés en entrée (input) ou en sortie (output)

exemple:
#include <mega16.h> 

void main(void)
{
  //Input/Output ports initialization
  PORTA=0x00;
  DDRA=0x00;

  PORTB=0xF2;
  DDRB=0xFF;
}
Le registre DDRx (x=A, B,...) est le registre qui permet de configurer en entrée ou en sortie les bits du port concerné.
  • 0: configuration en entrée
  • 1: configuration en sortie

  • Le registre PORTx (x=A, B,...) permet de choisir la valeur ('0' ou '1') quand le port est configuré en sortie.

    Il n'est pas obligatoire de configurer un port complètement en entrée ou en sortie, on peut choisir les bits que l'on souhaite:
    PORTA=0x02;  //PORTA=0b00000010
    DDRA=0x3F;   //DDRA=0b00111111
    
    Le port C est configuré dans ce cas en entrée sur les 2 bits de poids fort et en sortie sur les autres bits. Seul le bit n°1 est à '1', c'est-à-dire que la tension de sortie de ce bit est VCC (la numérotation va de 0 à 7), les autres bits configurés en sortie sont à '0'.

    Accès aux entrées/sorties

    Pour chaque port il existe en fait 3 registres réservés. PORTx, DDRx et PINx. Suivant la configuration des ports on utilisera le registre PORTx ou PINx. Le registre DDRx est quant à lui utilisé uniquement pour la configuration du port correspondant.

    Lecture de l'état du bit d'un port :
    Pour lire l'état d'un bit on utilise le registre PINx.
    Par exemple PINB.2 permet de lire l'état du bit 2 du port B. Il est aussi possible d'utiliser un masque qui donne une instruction équivalente: PINB&0x04.

    Ecriture sur un bit : Pour écrire sur un bit on utilise le registre PORTx.
    Par exemple PORTB.7=1; permet d'imposer un état logique haut sur la patte correspondant au bit 7 du port B.

    Déclaration des variables

    On peut déclarer des variables suivant plusieurs manières : - en variables globales, valables dans tout le programme. - en variables locales, valables uniquement dans le sous-programme où la variable à été déclarée. Le tableau suivant liste les types de données supportées par CodeVisionAVR :
    Type Size (Bits) Range
    bit 1 0, 1
    char 8 -128 to 127
    unsigned char 8 0 to 255
    signed char 8 -128 to 127
    int 16 -32768 to 32767
    unsigned int 16 0 to 65535
    long int 32 2147483648 to 2147483647
    unsigned long int 32 0 to 4294967295
    float 32 ±1.175e-38 to ±3.402e38


    Introduction aux interruptions de programme

    Une interruption de programme est une partie de programme qui est exécuté en parallèle au programme principal. Le principal intérêt est la possibilité par exemple de gérer des actionneurs tels que des servomoteurs tout en pouvant utiliser le programme principal pour d'autres tâches. Le programme d'interruption est donc quasiment transparent sur le déroulement du programme principal.

    NB : le programme d'interruption n'est en fait pas totalement transparent car il est exécuté lors de l'appel de l'interruption et le programme principal reprend alors à l'endroit où il a été arrêté. Il y a donc des temps mort qui interviennent dans le déroulement du programme ce qui peut être préjudiciable si cela n'est pas pris en compte.

    Il existe plusieurs types d'interruptions : les interruptions externes, de comptage, de comparaison, de fin de conversion,...


    INTERRUPTIONS EXTERNES
    La plupart des µC Atmel disposent des interruptions externes de programme. Elles peuvent êtres déclenchées de différentes manières grâce aux entrées prévues à cet effet. Sur l'ATmega16, il existe 3 interruptions externes : INT0 (pin16), INT1 (pin17), INT2 (pin3).

    INT0 et INT1 peuvent êtres déclenchées par : INT2 peut être déclenchée par : (remarque : cette interruption est asynchrone)


    Registres pour utiliser les interruptions externes (exemple de l'ATmega 16):
    !! Il est fortement conseillé de se référer à la documentation pour comprendre le fonctionnement de chacun des registres et donc des exemples !!
    foufa
    02-10-2013 à 17h48
    Abouelmajde BOUAYAD
    30-12-2012 à 21h26
    Reda
    07-10-2012 à 14h23
    Reda
    07-10-2012 à 14h23
    Différent
    02-05-2011 à 11h32
    Pseudo :


    Email : facultatif, n'apparaît pas sur le site


    Votre site web : facultatif
    http://

    Liste de correspondance des smileys
    :) ^^ :,
    :S ;) :-o
    :( :@ (!)
    Votre commentaire ici:

    Anti-spam: merci de calculer cette petite addition facile avant de valider
    votre commentaire! (Ecrire la réponse en chiffres svp)

    vingt plus trente est égal à
    Balises HTML autorisées : <b></b> (gras)
    <u></u> (souligné)
    <i></i> (italique)