Mini carte 8 entrées sorties TTL et 6 entrées analogiques + buzzer
Intérêt : #interruptions, #portsérie, #I/O, #entréesTTL, #sortiesTTL, #pullup, #analogique, #EEPROM, #watchdog
Initialement conçue pour activer 8 leds et un buzzer à partir d'un port série, sans modifier le hardware j'ai étendu le firmware de la carte pour avoir 8 lignes d'I/O programmables individuellement dont 6 qui peuvent être analogiques. De nombreuses fonctions d'activation des sorties, lectures des entrées, buzzer etc… c’est une base pour réaliser un projet comme un data-logger, un micro-automate, et bien d’autres fonctions.
La maquette a été réalisée sur Arduino UNO puis le circuit simplifié à l’extrême implanté sur un petit circuit imprimé simple face maison, on ne retient sur le circuit que l'ATMEGA328P et un ICL232 pour la conversion en RS232.
L'intérêt est du point de vu matériel pour le portage sur le composant ATEMEGA sans boot loader et côté logiciel pour l'usage des interruptions et toutes les fonctions analogiques, pull up, eeprom, port série, watchdog...
La carte peut directement adresser des leds, lire des contacts ou niveaux TTL, lire des tensions analogiques. Pour une utilisation particulière il sera facile de lui adjoindre le conditionnement approprié avec par exemple des relais, isolateurs optiques, ampli opérationnels etc...
Le firmware développé sur l’IDE Arduino v1.8.5 est largement à optimiser. C’est une base qui a été écrite rapidement pour tester de multiples possibilités I/O possibles dont une sorte de data-logger. Le source en C est assez bien documenté.
On peut imaginer dialoguer via le bus I2C également, en Bluetooth ou émuler un bus de terrain simple etc…
Etape 1 : Schéma
Quelques informations importantes et problèmes rencontrés résolus :
* Les résistances de 220 ohms sur les I/O protègent les sorties en cas de court-circuit et permettent de piloter directement des leds. Les pull up internes activées permettent de lire des contacts directement.
* La fonction parseCmd() est à véritablement à optimiser, le goto peut être évité ce qui serait mieux vu la longueur de la fonction qui si trop long peut créer une erreur de compilation du linker (problème des sauts jmp et call qui ne sont pas gérés en rjmp et rcall par l’IDE)
* Lors de la programmation sans bootloader avec un AVRISP par exemple, l’EEPROM est systématiquement effacée ce qui est gênant en phase de développement puisque des paramètres y sont sauvegardés. Bloquer son effacement en programmant les fusibles avec AVRDUDESS.
* Lors de la programmation des sorties en entrées les pull up restent activées, il faut systématiquement faire précéder pinMode(pinX, INPUT); par digitalWrite(pinX, LOW);.
* Fonctions intéressantes de manipulation des bits bitClear() bitRead() bitSet() bitWrite()… et des opérateurs logiques &&, &, ^…
* Une fonction de reset logiciel et une d’initialisation du watch dog.
* Au niveau interruption la récupération de l’It toute les millisecondes implémenté par l’IDE.
sont disponibles le schéma, PCB, la liste des commandes via port série du firmware et d’autres info utiles, le reste est largement documenté sur le net. Le firmware est réparti en 3 modules sources .ino.
Le coût des composants est d'environ 15 à 25 €, avec le PCB maison selon les possibilités de chacun on atteint 30 €
Enjoy !
StephaneB
Etape 3 : Commandes série
Etape 4 : ino module principal
Etape 5 : ino module parseCmd
Etape 6 : ino module eeprom
A noter que pour faire un data logger simple l'utilisation du petit logiciel très bien fait https://bitbucket.org/hyOzd/serialplot est parfaite...