Étape 2: Développer le code pour ATMEGA128
C’est la fonction permettant de communiquer avec l’ordinateur portable :
void usart_init (unsigned int ubrr)
{
/ * Réglage débit en bauds * /
UBRR0H = (unsigned char) (ubrr >> 8) ;
UBRR0L = ubrr (unsigned char) ;
/ * Activer le récepteur et l’émetteur * /
UCSR0B = (1 << RXEN) | (1 << TXEN) ;
/ * Format frame set: 8, 2Arrêtez bit * /
UCSR0C = (1 << USBS) | (3 << UCSZ0) ;
}
void usart_transmit (données unsigned char)
{
/ * Attendez du tampon d’émission vide * /
tandis que (! () UCSR0A & (1 << UDRE)))
;
/ * Mettre des données dans la mémoire tampon, envoie les données * /
UDR0 = data ;
}
void usart_pstr (unsigned char * s) {}
effectuer une boucle sur l’ensemble de la chaîne
tandis que (* s) {}
usart_transmit(*s) ;
s + + ;
}
}
unsigned char usart_receive (void)
{
/ * Attendre pour les données à recevoir * /
tandis que (! () UCSR0A & (1 << RXC)))
;
/ * Get et retourner des données reçues du tampon * /
Return UDR0 ;
}
.
.
.
.
sur main()
s’il vous plaît ajouter :
faire
{
c_byte = usart_receive() ;
usart_transmit(c_byte) ;
}
même si (c_byte ==' ') ;
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
lcd_data(c_byte) ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("Selected") ;
_delay_ms(1000) ;
{Switch(c_byte)}
case « a » :
_delay_ms (10) ;
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_cmd (0xC0); //goto deuxième rangée
_delay_ms (10) ;
lcd_cmd(0x01) ; Affichage clair
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string ("Relais A") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("Activated..") ;
_delay_ms(1000) ;
écran suivant
activer le relais 1
Relais 1 = 1 ;
Relais 2 = 0 ;
rupture ; / * optionnel * /
case « b » :
_delay_ms (10) ;
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_cmd (0xC0); //goto deuxième rangée
_delay_ms (10) ;
lcd_cmd(0x01) ; Affichage clair
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string ("Relais B") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("Activated") ;
_delay_ms(1000) ;
écran suivant
activer le relais 2
Relais 1 = 0 ;
Relais 2 = 1 ;
rupture ;
case « c » :
usart_pstr ("HALLO FROM ATMEGA128\n") ;
printf ("HALLO RIKO") ;
_delay_ms(50000) ;
_delay_ms (10) ;
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_cmd (0xC0); //goto deuxième rangée
_delay_ms (10) ;
lcd_cmd(0x01) ; Affichage clair
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string("message") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("Flasher") ;
_delay_ms(1000) ;
écran suivant
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string ("avec ATMEGA128") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string (« par Chris ») ;
_delay_ms(1000) ;
écran suivant
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string ("publiée sur") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("instructable.com") ;
_delay_ms(1000) ;
écran suivant
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string ("Made in") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string("Australia") ;
_delay_ms(1000) ;
écran suivant
lcd_cmd (0 x 80); //put le curseur dans la première rangée
_delay_ms (10) ;
lcd_cmd (0 x 01); //Clear affichage
_delay_ms (10) ;
lcd_string("Disable") ;
lcd_cmd (0xC0); //goto deuxième rangée
lcd_string ("tous les relais") ;
_delay_ms(1000) ;
désactiver tous les relais
Relais 1 = 0 ;
Relais 2 = 0 ;
rupture ;
} //end cas