IHMA : Interactions Humain-Machine Avancées

Dans cet exercice vous devez implémenter un afficheur de 3 nombres.

La carte

L'essentiel de la carte réside dans les 3 afficheurs à 7 segments (8 avec le point). Lisez la documentation de ce composant. Il a 10 pins, 8 pour les 8 segments, et deux de cathode. La cathode est commune à toutes les LEDs. Le circuit réalise un multiplexage, ce qui veut dire que les 8 pins sont partagés par les 3 afficheurs. L'afficheur que l'on désire allumer est sélectionné à l'aide de 3 autres pins, branchés sur un transistor qui active les afficheurs via les cathodes. Les 8 lignes sont reliées à un registre à décalage, ce qui permet de n'utiliser que 4 pins pour les commander.

L'ensemble des documentations est disponible ici.

Affichage commun

Allumez toutes les LEDs. Pour cela vous devez mettre les 3 lignes de commande à 1 (A$1, A$2 et A$3), et envoyer 0xff au registre à décalage à l'aide d'un bus SPI. Pour cela, branchez les 3 lignes sur un pin chacun. Par exemple PA0, PA1, PA2. Ensuite, utilisez l'en-tête hardware/include/gpio.h :

Vous aurez aussi besoin de hardware/include/ssp.h. Vous pouvez utiliser SPI2, qui utilise les pins suivants : PB10 (CLK), PC3 (MOSI, ou DATA). STR correspond au choix de l'esclave au cas où plusieurs esclaves sont connectés au bus. Il peut être relié à 3V. OE permet d'activer ou désactiver la sortie. Vous pouvez aussi la brancher à 3V.

Affichage du caractère

Chaque LED est représenté par un bit envoyé sur le bus SPI. Il faut bien 8 bits pour 8 segments, donc un octet. Définissez un tableau de 10 uint8_t, dans lequel vous mettrez le code hexa affichant chaque caractère. Le bit de chaque partie est indiqué sur le schéma ci-dessus. Ceci étant fait, Affichez un compteur incrémentant le chiffre affiché. Affichez le même chiffre sur les 3 afficheurs pour le moment.

Vous pouvez coder une fonction
sleep
approximative comme suit :
void sleep(uint16_t ms) { volatile uint32_t i; for (i = 0 ; i < ms * 50000 ; i++) { ; } }

Le compteur final

Vous devez maintenant implémenter le compteur complet. Pour cela il faut démultiplexer. L'idée est d'afficher en alternance chacun des 3 afficheurs, en sélectionnant celui que vous affichez avec les 3 lignes de commande (A$1, A$2 et A$3). Une fois que vous arrivez à afficher un nombre à 3 chiffres choisi, faites un programme qui incrémente un compteur.