Par Julien Le Sech,
mercredi 9 mai 2012.
// Configure pin direction.
DDRB |= (1 << PB5);
// Set pin level.
PORTB |= (1 << PB5);
Ces quelques lignes de code ne parleront sans doute qu'aux personnes connaissant les microcontrôleurs, voire même seulement à celles connaissant les microcontrôleurs AVR d'Atmel. En effet, elles configurent le PORTB5 d'un ATmega en sortie et le mettent au niveau logique haut.
Certes, c'est le meilleur moyen de réduire l'empreinte mémoire du logiciel sans recourir à l'assembleur. Mais c'est loin d'être le plus parlant. Sans oublier que ce code n'est pas portable. C'est à dire que le jour où on souhaitera troquer l'AVR pour un autre microcontrôleur tel qu'un PIC ou un MSP430, il sera nécessaire de revenir sur l'ensemble du logiciel.
Afin de remédier aux inconvénients cités ci-dessus, iDreamMicro propose dans cet article de découvrir la bibliothèque digital_io. Elle permet de piloter les ports d'entrée/sortie numériques des microcontrôleurs AVR d'Atmel :
- configuration des ports d'entrée/sortie ;
- lecture du niveau d'entrée ;
- écriture du niveau de sortie.
La tout en offrant abstraction, portabilité et réutilisabilité. Les quelques lignes ci-dessous ne sont-elles pas plus parlantes ?
// Declare pin.
digital_io__pin_position_t output =
DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5;
// Configure pin direction.
digital_io__configure_pin(output, DIGITAL_IO__DIRECTION__OUTPUT);
// Set pin level.
digital_io__set_pin_level(output, DIGITAL_IO__LEVEL__HIGH);