Ici nous allons établir une communication entre un microcontrôleur ATmega8 et Arduino Uno. La communication établie ici est de type UART (Universal Asynchronous Receiver Transmitter). C'est la communication série. Grâce à cette communication série, les données peuvent être partagées entre deux contrôleurs, ce qui est nécessaire dans diverses applications système embarquées.
Dans les systèmes embarqués, nous devons avoir des connaissances de base sur les communications système, c'est pourquoi nous faisons ce projet. Dans ce projet, nous discuterons du système de communication de base et nous enverrons des données de l'émetteur au récepteur en série.
Dans ce projet, ATMEGA8 agit comme un ÉMETTEUR et ARDUINO UNO agit comme un RÉCEPTEUR. Dans la communication série, nous enverrons des données BIT PAR BIT, jusqu'à ce qu'un BYTE de données soit complètement transféré. Les données peuvent être de taille 10 bits mais nous allons nous en tenir à 8 BITS pour le moment.
Composants requis
Matériel: ATMEGA8, ARDUINO UNO, 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, ARDUINO NIGHTLY.
Schéma de circuit et explication
Avant de discuter du schéma de circuit et de la programmation de l'émetteur et du récepteur, nous devons comprendre la communication série. L'ATMEGA envoie ici des données à l'UNO en série comme indiqué précédemment.
Il a d' autres modes de communication comme la communication MASTER SLAVE, la communication JTAG mais pour faciliter la communication, nous choisissons RS232. Ici, nous allons connecter le PIN TXD (émetteur) de ATMEGA8 au PIN RXD (récepteur) d'ARDUINO UNO
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 9600 BPS (bits par seconde)
- Communication asynchrone (pas de partage d'horloge entre ATMEGA8 et UNO (les deux ont des unités d'horloge différentes))
Pour établir UART entre Arduino Uno et ATMEGA8, nous devons programmer le paramètre avec précision. Pour cela, nous devons garder les paramètres mentionnés ci-dessus identiques aux deux extrémités. Dans celui-ci agit comme ÉMETTEUR et d'autres agit comme RÉCEPTEUR. Nous discuterons des paramètres de chaque côté ci-dessous.
Maintenant, pour l' interface RS232, les caractéristiques suivantes doivent être satisfaites pour le côté ÉMETTEUR (ATMEGA8):
1. La broche TXD (fonction de réception de données) du premier contrôleur doit être activée pour TRANSMITTER.
2. Puisque la communication est série, nous devons savoir chaque fois que les données au revoir sont reçues, 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): Ce bit n'est pas défini lors du 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.
VOILET (TXEN): Ce bit est réglé pour activer la broche de l'émetteur sur TRASMITTER SIDE.
JAUNE (UCSZ0, UCSZ1 et UCSZ2): 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 SIDES est établie comme une communication à huit bits. En faisant correspondre la communication avec la table, nous avons, UCSZ0, UCSZ1 à un et UCSZ2 à zéro.
ORANGE (UMSEL): 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 SYTEMS 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): Ces deux bits sont ajustés en fonction de la parité des bits que nous utilisons dans la communication.
Les données ATMEGA ici sont programmées 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.
BLEU (USBS): Ce bit est utilisé pour choisir le nombre de bits d'arrêt que nous utilisons pendant la communication.
La communication qui l'a établie 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.
La vitesse de transmission est définie 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 «6», et donc le débit en bauds est défini.
Avec cela, nous avons établi des paramètres sur TRANSMITTER SIDE; nous allons parler de RECEIVING SIDE maintenant.
L'activation de la communication série dans UNO peut être effectuée à l'aide d'une seule commande.
|
La communication que nous avons supposé établir se fait par un débit BAUD de 9600 bits par seconde. Donc, pour UNO pour établir une telle vitesse de transmission et pour démarrer la communication série, nous utilisons la commande «Serial.begin (9600);». Ici, 9600 est la vitesse de transmission et est modifiable.
Maintenant tout est parti si pour recevoir des données, une donnée est reçue par l'ONU, elle sera disponible pour prise. Ces données sont récupérées par la commande «receivedata = Serial.read ();». Par cette commande, les données de série sont prises en un entier nommé «receivedata».
Comme le montre 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 le TRANSMETTEUR (ATMEGA8) et ces données sont reçues par le RECEPTEUR (ARDUINO UNO). Lors de la réception de ces données avec succès, il allume et éteint la LED qui y est connectée, pour indiquer le transfert de données réussi entre deux contrôleurs.
Par cette communication UART entre le contrôleur ATMEGA8 et ARDUINO UNO est établie avec succès.