« USART ATmega328P - Programmation » : différence entre les versions
De fablabo
Page créée avec « {{Tutoriel |status_pub=Publié |image=Dsc08783.jpg |description=Exemple simple de communication USART |compétences requises=Débutant C/C++ |license=CC-by-sa-3.0 |contrib... » |
Aucun résumé des modifications |
||
Ligne 70 : | Ligne 70 : | ||
<br/>(à compiler avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d'architecture AVR, et le téléverser dans le circuit intégré avec avrdude par exemple) | <br/>(à compiler avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d'architecture AVR, et le téléverser dans le circuit intégré avec avrdude par exemple) | ||
<br/>Ci-dessus, au début les directives pré-processeur des pointeurs des adresses des registres qui nous intéressent (voir [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l'ATmega328P]), | |||
<br/>Ci-dessus, au début les directives pré-processeur des pointeurs des adresses des registres qui nous intéressent (voir [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l'ATmega328P]), puis le vecteur d'interruption pour RXD, puis la définition d'une fonction générique d'interruption. | |||
<br/>Une fonction startUsart permet de démarrer l'USART avec le choix du baudrate (paramètre FREQUENCY), une fonction readUsart permet de dépiler ce qui arrive sur RXD, une fonction writeUsart permet d'envoyer des données sur TXD, et une fonction d'interruption (_INTERRUPT_JUMP) avec le bon vecteur d'interruption (_USART_RX) est exécutée lorsque des trames arrivent sur RXD (plus précisément à la fin d'un bit de stop). | <br/>Une fonction startUsart permet de démarrer l'USART avec le choix du baudrate (paramètre FREQUENCY), une fonction readUsart permet de dépiler ce qui arrive sur RXD, une fonction writeUsart permet d'envoyer des données sur TXD, et une fonction d'interruption (_INTERRUPT_JUMP) avec le bon vecteur d'interruption (_USART_RX) est exécutée lorsque des trames arrivent sur RXD (plus précisément à la fin d'un bit de stop). | ||
Ligne 78 : | Ligne 79 : | ||
<br/>Mais il est tout à fait possible d'aller plus vite, en effet la limite de l'ATmega328P est 2M bauds/s, vous pouvez donc remplacer 9600 par 2000000, la durée est donc maintenant de : | <br/>Mais il est tout à fait possible d'aller plus vite, en effet la limite de l'ATmega328P est 2M bauds/s, vous pouvez donc remplacer 9600 par 2000000, la durée est donc maintenant de : | ||
<br/>'''1000000 / (2000000 / 10) | <br/>'''1000000 / (2000000 / 10) = 5 µs''' | ||
<br/>Supposons une liaison RS232 à 115200 bauds/s, la durée est donc maintenant de : | <br/>Supposons une liaison RS232 à 115200 bauds/s, la durée est donc maintenant de : |