A ce jour, cela reste le seul article complet pour l’initialisation des registres d’un ATmega8. Certains codes récents sont pour ATmega168 (celui des Arduino) et les registres ne sont plus les mêmes.
Juste une précision pour ceux qui ne sont pas à 9600 bauds ou qui n’ont pas un quartz à 8 MHz. Notamment ceux qui utilisent l’oscillateur interne. Tout d’abord rassurez-vous : malgré les mauvaises langues qui disent que l’UART ne fonctionne pas sans quartz à 8 MHz, si ça fonctionne très bien.
Il existe dans libc une façon de faire calculer la valeur de UBRRH et UBRRL en donnant la fréquence d’horloge et la vitesse de transmission :
#define F_CPU 1000000
#define BAUD 9600
// ... le reste comme dans l'article
#include <util/setbaud.h>
void usart_init(void) {
// ... le reste comme dans l'article sauf :
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
// et on rajoutera même le coefficient X2 :
UCSRA = (1 << U2X);
}
A ce jour, cela reste le seul article complet pour l’initialisation des registres d’un ATmega8. Certains codes récents sont pour ATmega168 (celui des Arduino) et les registres ne sont plus les mêmes.
Juste une précision pour ceux qui ne sont pas à 9600 bauds ou qui n’ont pas un quartz à 8 MHz. Notamment ceux qui utilisent l’oscillateur interne. Tout d’abord rassurez-vous : malgré les mauvaises langues qui disent que l’UART ne fonctionne pas sans quartz à 8 MHz, si ça fonctionne très bien.
Il existe dans libc une façon de faire calculer la valeur de UBRRH et UBRRL en donnant la fréquence d’horloge et la vitesse de transmission :
Voilà, en espérant que ça serve à d’autres.