Mini carte 8 entrées-sorties TTL et 6 entrées analogiques + buzzer

image principale Mini carte 8 entrées-sorties TTL et 6 entrées analogiques + buzzer

Difficulté:

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…


Matériel :

Budget : Non défini

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 2 : User

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...

Bonjour Stéphane,
J'aime bien l'idée de ta carte multifonctions.
Mais si je comprends bien, il faut remonter l'ATmega sur un UNO pour la reprogrammer.
J'ai fait justement le choix de charger le bootloader sur mon projet, pour pouvoir reprendre le programme directement à partir de l'IDE Arduino. C'est une autre approche !
Je suis en train de travailler actuellement sur une carte dans le même esprit où je relie un ATmega à un Raspberry Pi pour en faire là aussi une carte générique de pilotage de diverses entrées-sorties, avec afficheur 7 segments + buzzer + boutons de nav et surtout une conn. réseau grâce au Rpi. Ce sera certainement mon prochain tuto.
À te relire,
Serge Pintout

Bonjour Serge, merci pour ton post !

Cette carte avait été développée il y 2 ans pour un usage pro et resté à l'état de maquette avec 2 exemplaires trainant dans un tiroir. L'ide est donc de la faire revivre en s'apercevant qu'avec du logiciel on peut lui faire faire beaucoup de choses. Ton projet est encore plus ambitieux, hâte de voir... J'ai d'autres réalisation le truc c'est d'avoir le temps pour publier.

Pour répondre à ta remarque, au départ en effet j'avait maquetté à partir d'une carte UNO puis très vite passé à la petite carte puisqu'il s'agit plus de soft que de hard... La programmation se fait directement sur la carte à partir du connecteur ISP (j'utilise comme la photo le montre un AVRISP mkII), donc plus de boot loader. Toutefois puisqu'il y a une liaison série on pourrait conserver le boot loader et programmer comme une UNO  par un port com via un convertisseur USB-RS232 qu'on voit aussi sur la photo. pour tous mes projets j'utilise la programmation via ISP, à noter dans ce cas que par défaut l'EEPROM est effacée à chaque fois sauf si tu programme le bon fuse. Par contre avec le bootloader l'EEPROM est conservée.

A suivre, Steph.

Je suis allé trop vite, j'ai vu après qu'effectivement tu utilisais le SPI (ISP) pour charger le prg. Pour les bricoleurs qui ne sont pas équipés du matériel nécessaire à la réalisation de PCB, je trouve la solution Frtzing/Asler super intéressante. As-tu essayé ? Serge

pour charger un programme HEX sans passer par Arduino ou amtel studio, j'utilise le programmateur USBasp que l'on trouve facilement sur Ebay avec le logiciel ProgIsp 1.72 (très simple à utiliser)voici mon lien avec la doc en Français:

https://drive.google.com/drive/folders/1pwxivh09nnRw3YswXWqghX18S4y5pQZj?usp=sharing

sinon il y a aussi avrdudess qui fonctionne avec divers programmateur et est très complet:

http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/

Bonjour Mic2001, merci pour ces informations qui servirons à tous ceux qui se posent des questions sur les différents modes de programmation de l'Arduino et du composant ATMEGA328P. J'utilise moi même AVRDudess qui est essentiel pour réaliser certaines opérations sur le composant. J'ai une nouvelle version du firmware plus aboutie et plus lisible mais je ne voit pas comment je peut l'introduire dans le tuto...

Bonjour StephaneB, Pour les fichiers à joindre, j'ai deux méthodes je fais un zip et je le joins dans le tuto dans le paragraphe fichiers techniques ou je le met dans un serveur qui donne gratuitement quelques giga pour des fichiers personnels. OneDrive Basic 5Go gratuits Google Drive 15 Go gratuits pour Google Drive par exemple il faut avoir une adresse email Google, tu tapes google pour accéder à la page, gauche de connexion il y a un icône avec 6 petits carrés noir s, tu cliques dessus et tu as tous les services google dont Drive.

Ces tutoriels devraient vous plaire

vignette Préparer un fichier pour une découpe et une gravure laser
Préparer un fichier pour une découpe et une gravure laser
vignette Fabriquer une lampe à lave
Fabriquer une lampe à lave
vignette Connecter un  écran LCD en I2C
Connecter un écran LCD en I2C
avaatar StephaneB

StephaneB

Suivre

Vues: 219
Mis en favoris: 3

Découvrez d'autres tutoriels de

StephaneB

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers