Dans ce tutoriel, nous allons établir une communication série entre deux microcontrôleurs ATMEGA8. La communication établie ici est de type UART (Universal Asynchronous Receiver Transmitter). Grâce à cette communication série, les données peuvent être partagées entre deux microcontrôleurs, ce qui est nécessaire dans divers systèmes embarqués.
Composants requis
Matériel: ATMEGA8 (2 pièces), alimentation (5v), AVR-ISP PROGRAMMER, condensateur 100uF (connecté à travers l'alimentation), résistance 1KΩ (deux pièces), LED, bouton.
Logiciel: Atmel studio 6.1, progisp ou flash magic.
Schéma de circuit et explication
Laissez-nous comprendre la communication série dans les microcontrôleurs AVR. Ici, ATMEGA envoie des données à l'autre ATMEGA en série. Il a un autre mode de communication, mais pour une communication facile, nous choisissons RS232. La broche RS232 du premier ATMEGA8 est connectée à la broche RXD du deuxième ATMEGA8.
La communication de données établie est programmée pour avoir:
- Huit bits de données
- Deux bits d'arrêt
- Pas de bit de contrôle de parité
- Vitesse de transmission de 2400 BPS (bits par seconde)
- Communication asynchrone (pas de partage d'horloge entre deux ATMEGA8)
Nous avons donc deux registres définis pour deux ATMEGA8 différemment, où l'un agit comme TRANSMITTER et l'autre agit comme RECEIVER.
Maintenant, pour l' interfaçage RS232 entre deux microcontrôleurs ATmega, les caractéristiques suivantes doivent être satisfaites pour l'ÉMETTEUR et le RÉCEPTEUR:
1. La broche TXD (fonction de réception de données) du premier contrôleur doit être activée pour TRANSMITTER et la broche RXD du deuxième contrôleur doit être activée pour RECEIVER.
2. Puisque la communication est série, nous devons savoir chaque fois que l'octet de données est reçu, afin de pouvoir arrêter le programme jusqu'à ce que l'octet complet soit reçu. Ceci est fait en activant une interruption complète de réception de données.
3. Les DONNÉES sont transmises et reçues au contrôleur en mode 8 bits. Ainsi, deux caractères seront envoyés au contrôleur à la fois.
4. Il n'y a pas de bits de parité, un bit d'arrêt dans les données envoyées par le module.
Les fonctionnalités ci-dessus sont définies dans les registres du contrôleur; nous allons en discuter brièvement,
GRIS FONCÉ (UDRE): (TRASMITTER SIDE) Ce bit n'est pas mis au démarrage mais il est utilisé pendant le travail pour vérifier si l'émetteur est prêt à émettre ou non. Voir le programme sur TRASMITTER SIDE pour plus de détails.
GRIS CLAIR (RXC): (RECEIVING SIDE) Ce bit n'est pas défini lors du démarrage mais il est utilisé pendant le travail pour vérifier si le récepteur est prêt à recevoir des données ou non. Voir le programme sur RECEIVING SIDE pour plus de détails.
VOILET (TXEN): (TRASMITTER SIDE) Ce bit est réglé pour activer la broche de l'émetteur sur TRASMITTER SIDE.
ROUGE (RXEN): (RECEIVING SIDE) Ce bit représente la fonction de réception des données, ce bit doit être défini pour que les données du module soient reçues par le contrôleur, il active également la broche RXD du contrôleur.
MARRON (RXCIE): Ce bit doit être mis à 1 pour obtenir une interruption après une réception de données réussie. En activant ce bit, nous apprenons à connaître, juste après la réception de données 8 bits. Nous n'allons pas utiliser ce bit ici donc il est laissé seul.
PINK (URSEL): Ce bit doit être défini avant d'activer d'autres bits dans UCSRC, après avoir défini d'autres bits nécessaires dans UCSRC; URSEL doit être désactivé ou mis à zéro. Nous n'allons pas utiliser ce bit ici donc il est laissé seul.
JAUNE (UCSZ0, UCSZ1, UCSZ2): (RECEIVING SIDE & TRASMITTER SIDE) Ces trois bits sont utilisés pour sélectionner le nombre de bits de données que nous recevons ou envoyons en une seule fois.
La communication entre deux ATMEGA est établie comme une communication à huit bits. En faisant correspondre la communication avec la table, nous avons, UCSZ0, UCSZ1 à un et UCSZ2 à zéro.
Nous devons les définir à la fois du côté de la réception et de la transmission.
ORANGE (UMSEL): (RECEIVING SIDE & TRASMITTER SIDE) Ce bit est défini selon que le système communique de manière asynchrone (les deux utilisent une horloge différente) ou de manière synchrone (les deux utilisent la même horloge).
Les deux contrôleurs ne partagent aucune horloge. Étant donné que les deux utilisent leur propre horloge interne. Nous devons donc définir UMSEL sur 0 dans les deux contrôleurs.
VERT (UPM1, UPM0): (CÔTÉ DE RÉCEPTION ET CÔTÉ TRASMITTER) Ces deux bits sont ajustés en fonction de la parité des bits que nous utilisons dans la communication.
L'ATMEGA est programmé pour envoyer des données sans parité, car la longueur de transmission des données est petite, nous ne pouvons clairement nous attendre à aucune perte ou erreur de données. Nous ne fixons donc aucune parité ici. Nous définissons donc à la fois UPM1, UPM0 à zéro ou ils sont laissés, car tous les bits sont 0 par défaut.
BLUE (USBS): (RECEIVING SIDE & TRASMITTER SIDE) Ce bit est utilisé pour choisir le nombre de bits d'arrêt que nous utilisons pendant la communication.
La communication établie ici est de type asynchrone, donc pour obtenir une transmission et une réception de données plus précises, nous devons utiliser deux bits d'arrêt.Nous avons donc réglé USBS sur «1» dans les deux contrôleurs.
Le débit en bauds est défini dans le contrôleur en choisissant l'UBRRH approprié.
La valeur UBRRH est choisie en croisant le débit en bauds et la fréquence du cristal du processeur.
Ainsi, par référence croisée, la valeur UBRR est considérée comme «25», et donc la vitesse de transmission est définie.
Comme indiqué dans le circuit, un bouton est connecté du côté de l'émetteur. Lorsque ce bouton est enfoncé, des données de huit bits sont envoyées par TRANSMITTER et ces données sont reçues par RECEIVER. Lors de la réception de ces données avec succès, il allume et éteint la LED qui lui est connectée, ce qui indique un transfert de données réussi entre deux contrôleurs.