Étape 4: USART comme un port série
L’USART périphérique qui vient avec plusieurs micros AVR est un port souple qui peut agir comme de nombreux protocoles différents.
Certains micros ont un UART qui bien que similaire, ne peut effectuer comme un port série standard.
Alors qu’il peut agir comme beaucoup de différents types de port série, nous allons utiliser comme un base port série, qui nous permettra d’utiliser plus facilement la radio XBee plus tard.
Vous pouvez également utiliser ce port série pour relier à un vieil ordinateur, ou via une puce FTDI pour vous donner une connexion USB-Serial vers un nouvel ordinateur.
Il s’agit en fait combien arduinos travailler, ils utilisent une puce FTDI pour fournir une connexion USB-Serial au microcontrôleur.
Pour cet exemple nous allons micros ATtimy2313 programme deux d’envoyer des personnages au fil de la série les uns aux autres.
Construire la maquette comme indiqué dans l’image.
Nous allons appeler la gauche micro A et la b de seconde.
Relier la broche 2 de A à la broche 3 de B.
Relier la broche 3 de A à la broche 2 de B.
Broche 2 est la RXD (réception) et broche 3 TXD (Transmit).
Branchez une LED à B sur la broche 11 (PD6) et un bouton sur A sur broche 19 (PB7).
Utiliser le code ci-joint pour programmer les deux circuits.
Régler l’horloge de chaque à 1MHz
Puce A décommenter cette ligne :
#define TRANSMIT
et commentez cette ligne :
#define recevoir
Sur puce B faire le contraire :
#define TRANSMIT
#define recevoir
Maintenant, lorsque vous appuyez sur A, B la LED s’allume !
Au début il ne semblerait pas très impressionnant, mais vous pouvez utiliser ceci pour parler à puces loin sur une radio XBee, ou à un ordinateur qui peut s’avérer utile pour aider à déboguer votre code.
Alors, comment ça marche ?
Permet d’observer les lignes intéressantes :
UBRRH = 0 ;
UBRRL = 12 ;
Jetez un oeil dans la fiche technique du Registre UBRR.
Il s’agit d’un 12 bits enregistrer, afin que le 2313 est une micro 8-bit, c’est scindée en deux octets, hautes (UBRRH) et faible (UBRRL).
Le registre aigu n’est pas un registre complet, avec la moitié supérieure (4 bits) réservés (pas utilisé, mais ne devrait pas être touché par souci de compatibilité future).
Si vous faites défiler la page suivante, vous verrez un tableau pratique des vitesses différentes selon l’horloge de votre micro.
Pour cet exemple, nous voulons 9600 bauds (utile plus tard pour le XBee).
En regardant le tableau pour 1MHz, nous obtenons une valeur de 6 pour le UBRR.
Toutefois, il a un -7 % taux d’erreur, qui est un peu trop élevé.
Mais si vous examinez une colonne il y a un taux d’erreur de 0,2 %.
Ce qui est différent ?
L’indicateur U2X est défini, et le UBRR a la valeur 12.
Nous utiliserons qu’et définissez l’indicateur U2X.
Ensuite, nous avons différents paramètres à configurer :
UCSRA = (1 << U2X) ;
UCSRB = (1 << RXEN) | (1 << TXEN) ;
UCSRC = (1 << UCSZ1) | (1 << UCSZ0) ;
Ces 3 registres sont décrites dans la fiche technique donc nous nous pencherons sur eux que brièvement.
U2X est décrit comme « double la vitesse de transmission UART »
RXEN raconte l’USART pour activer le mode de réception et TXEN doit permettre de transmettre
UCSZ1 & UCSZ0 sont définis par le tableau de la page 133, réglage de la taille de caractère en 8-bits.
Ensuite, du côté de l’émission, nous avons cette ligne de code :
tandis que (! () UCSRA & (1 << UDRE))) ;
Ceci vérifie le bit « USART données Registre vide » du « contrôle de l’USART et statut Registre A ».
Lorsqu’elle est définie à 1, la boucle s’arrête et peut exécuter la ligne de code suivante :
UDR = « F » ;
C’est en passant dans le caractère « F » pour le tampon d’émission, ceci peut uniquement être écrites lorsqu’il est clair, c’est pourquoi nous avons la boucle d’attente devant elle.
Côté réception, c’est tout :
tandis que (! () UCSRA & (1 << RXC))) ;
Ici, nous attendons pour le tampon de réception est vide, et ensuite, nous lisons UDR pour voir quelle valeur il a :
Si (UDR == « F »)
Pourrais-je aussi facilement mettre cela dans une variable comme si :
char x = UDR ;
Il faut lire UDR pour le nettoyer, et vous pouvez le lire seulement une fois (après lequel il efface et permet un nouveau personnage dans), donc si la valeur est importante pour vous, assurez-vous que vous enregistrez une copie de la valeur sur la première lecture !
Maintenant, cet exemple est divisé en émission et réception, mais vous pouvez avoir les deux dans l’un, je voulais juste faire un exemple simple