[Resolu] changer un ATmega328P sur une carte Arduino Uno

Bonjour

J'ai une carte Arduino Uno avec une puce ATmega328P.
J'aimerai la mettre sur une carte electronique pour n'utiliser que le coeur (et diminuer la consomation).
Si je charge le ATmega328P qui est sur la carte ca a l'air de bien fonctionner.
J'ai ensuite acheté des ATmega328P "vierge".
J'ai vu pas mal de tuto sur comment en programmer un avec un autre Arduino....

Mais ma question est : est il possible de mettre un ATmega328P "vierge" sur la carte Arduino et de claquer un bootloader dedans depuis le PC via le cable USB directement ?

Merci

Non, pas possible, il faut un 2eme Arduino.

Quelques petites video ici : https://www.youtube.com/results?search_query=Arduino+load+boatloader

Explication :
Les puces des microcontrôleurs avr sont testés avant la mise en boîtier.
Le test n'est probablement pas systématique mais par prélèvement pour savoir si le wafer (disque de silicium) est correct.

Ces vérifications s'effectuent en descendant des pointes de test minuscules sur la puce.

Pour que ces tests se fassent rapidement et facilement la puce est conçue pour brut de fonderie :

  1. tourner sur son oscillateur interne à 8MHz
  2. un diviseur d'horloge par 8 est en service ce permet de faire les tests à seulement 1 MHz

Pour rendre le microcontroleur exploitable il y a des opération à faire : programmation les fuses.

  1. suprimmer le diviseur par 8
  2. mettre en service les accès utilisés pour connecter un quartz externe
  3. faire quelques autres réglages.
    Tout est expliqué dans la datasheet du micocontroleur.

Ces opération ne peuvent se faire qu'en mode ISCP.
Au moment du démarage du micro ce mode utilise les pins utilisées par le SPI mais l'ISCP n'est pas du SPI.
Il faut donc une autre carte arduino avec le programme qui la transforme en programmeur ISCP.
On peut aussi acheter des programmeurs tout fait (tinyUSB ou USBasp), ce n'est pas obligatoire mais c'est plus simple avec un vrai programmeur et ce n'est pas plus cher qu'une carte arduino.

Dernière opération qui reste facultative : installer un bootloader pour pouvoir programmer le nouveau micro par l'interface USB/série.
C'est facultatif vu que tu as déjà dû utiliser un programmeur ISCP pour configurer le micro tu peux très bien programmer le micro de la même façon.

Le programme à utiliser s'appelle avrdude, c'est un programme Atmel qui est déjà présent dans l'IDE arduino. Sa documention est claire.

NB : ce qu'Arduino appelle "graver la séquence d'initialisation" est en fait la réunion des deux opérations : configuration des fuses + installation d'un bootloader qu'Arduino fait en une seule opération.

NB2 : on trouve dans le commerce des microcontroleurs ATmega328p déjà configurés et avec le bootloader, le seul problème est leur prix : c'est peu courant donc c'est cher pour ce que c'est.

Solution alternative :

En tout fait et prêt à l'emploi il y a les cartes minimalistes pro-mini qui sont très simples à implanter sur un circuit imprimé et qui prendront moins de place que ton gros boîtier DIP28.
En supprimant juste les dels (led) inutiles elles sont à consommation minimale et toutes câblées ce qui n'est pas désagréable.
Elles existent en fréquence 16 MHz et 8MHz.
Pour le 16 MHz il faut obligatoirement un Vcc de 5V mais en 8MHz on peut les alimenter soit en 5V soit en 3,3V ce qui baisse encore la consommation.

J'aimerai la mettre sur une carte electronique pour n'utiliser que le coeur (et diminuer la consomation).

Une PRO MINI fera aussi bien en matière de consommation.

Suivant le modèle (DIP28 ou TQFP32) le branchement est différent.

montage-et-chargement-dun-atmega328p

Merci pour vos réponses tres claire. (un plus pour celle de 68tjs :slight_smile: )
Je vais donc le programmer avec un Arduino vu que j'en ai un.

Pour la taille mon boîtier DIP est quand même plus petit qu'un mini
Par contre pour info j'ai vu un article qui avait l'air de dire qu'un mini en 5V consommait moins qu'en 3.3V ...

C'est bon j'ai reussi
Pour info comme je n'avais pas de Qwartz j'ai plutot suivi ce tuto :
atmega328P sans Qwartz

Il est un peu plus simple (et mieux fait que d'autre qui oublient de dire qu'il faut flasher dans le UNO un sketch particulier

J'ai eu a modifier

atmega328bb.bootloader.extended_fuses=0x05
en
atmega328bb.bootloader.extended_fuses=0xfd

et puis ca marche!

Merci Merci

Pour la taille mon boîtier DIP est quand même plus petit qu'un mini

Je viens de comparer : un boîtier DIP occupe la moitié de la surface d'une carte pro-mini.
Oui mais la pro-mini pro est complète avec quartz et découplages alors que le micro en dip est nu.

Juste pour voir fais une implantation avec les composants que tu sais souder et seulement après fais la comparaison.
Fais aussi la comparaison sur le prix global : il y a une énorme différence de prix entre les composants achetés à l'unité et ceux acheté par 100 000 (ou plus) qui équipent la pro-mini.

Par contre pour info j'ai vu un article qui avait l'air de dire qu'un mini en 5V consommait moins qu'en 3.3V ...

Vraiment n'importe quoi. Une PRO MINI 8MHz sous 3.3V en mode veille consomme 1.5µA, 3µA pour une 16MHz sous 5V, donc le double, ce qui semble plutôt normal.
Mesures personnelles, j'affirme et assume à 100%.

Un circuit CMOS ne consomme qu'au moment des transitions haut-> bas et bas->haut.

Pendant le temps de 1 seconde il fera deux fois plus de transitions à 16 MHz qu'à 8MHz donc il consommera deux fois plus à 16MHz qu'à 8MHz.

Comme hbachetti je confirme que l'auteur de ton article a écrit n'importe quoi et j'ajoute qu'il n'a rien compris au fonctionnement d'un montage CMOS.

Dans un montage CMOS il y a deux transistors en série entre la masse et l'alimentation.
Un seul est passant à la fois donc aucun courant ne circule.

SAUF au moment du changement d'état où il se passe deux phénomènes :

  1. un transistor ne peut ni devenir passant ni se bloquer instantanément il lui faut un tout petit temps pour le faire.
    Il existe un moment ou le transistor passant n'est pas encore bloqué et où le transistor bloqué commence à devenir passant : donc les deux conduisent en même temps mais pendant un temps très bref.
  2. Il existe dans tout le circuit intégré des capacités parasites qu'il faut charger ou décharger pendant les changements d'état : cela provoque aussi le passage d'un courant pendant un temps très bref.

Avant d'affirmer que l'auteur de l'article dit n'importe quoi il faudrait lire l'article.
Il y a deux possibilités: soit l'auteur dit n'importe quoi, soit le lecteur lit n'importe quoi.

J'ai répondu en fonction des informations fournies et physiquement c'est impossible qu'un CI CMOS consomme plus à 8 MHZ qu'à 16 MHz.
C'est un règle bien établie que la consommation croit avec la fréquence, il suffit de regarder les datasheets des produits.

Effectivement il faudrait avoir le lien sur l'article, l'auteur s'est probablement fait abuser en comparant deux cartes non identiques mais cela ne change rien au fait que la consommation du micro sera plus grande à 16 MHz qu'à 8 MHz.

ewok2:
Par contre pour info j'ai vu un article qui avait l'air de dire qu'un mini en 5V consommait moins qu'en 3.3V ...

Important : toujours donner l'origine de ses sources. Sans lien, difficile d'en dire quoi que ce soit.

Je recherche l'article mais je n'ai jamais dis que ca consomais moins a 16MHZ qu'a 8MHZ :slight_smile:

Sauf erreur il est possible d'avoir la fréquence a 8MhZ en 5V ? (En tout cas c'est ce que j'ai eu l'impression de programmer sur mon DIP...

Dans cet article le but etait de consommer le moins possible.
L'Arduino était mis en mode veille et réveillé toutes les 8secondes!
Et c'est ce que je tente de faire...

On ne programme pas la fréquence. C'est une question d’oscillateur. On met en place un modèle 8MHz ou 16MHz. Ensuite on indique à l'IDE quelle est la fréquence de fonctionnement.

Au départ c'est toi qui décide :

  • soit d'utiliser l'oscillateur interne à 8MHz mais qui n'est pas aussi précis et stable qu'un resonnateur ou un quartz.
  • soit de mettre en service l'oscillateur externe.
    Et tu choisi le résonnateur ou le quartz qui va bien pour travailler à 8 MHz ou à 16 MHz.

La fréquence max de fonctionnement dépend de la tension Vcc.

Sous 3,3V le concepteur du micro ne garanti le fonctionnement que jusqu'à 12 MHz.
C'est pour cela qu'on choisi des cartes équipées en 8 MHz pour travailler sous 3,3V mais rien n'empêche de les faire fonctionner sous 5V.
Sous 5 volts tu peux même monter jusqu'à 20 MHz mais les fonctions de temps fournies avec l'IDE arduino donneront des résultats faux, elles ne sont valables que pour 16 ou 8 MHz.
<Apparté> :
Bien sur en fonction des dispersions de fabrication certaines cartes équipée en 16MHz fonctionneront sous 3,3V
Mais il n'y a aucune garantie, ce sera le hasard des lots de fabrication.
<fin d'apparté>

Comme ton but c'est de consommer le moins possible la solution 8 MHz/3,3V est la meilleure.
Sauf si tu as des circuit 5V à commander. Il existe des circuits d'adaptation de niveau mais là ce sera du cas par cas.

Après il faut que tu te poses la question de la stabilité de la fréquence horloge dont tu as réellement besoin.
Un fonctionnement sur l'oscillateur interne est envisageable si tu n'utilise pas de fonctions de timer, delay() et millis() ou avec des précisions très lâches, exemple un delay() utilisé pour laisser le temps à un module satellite de se stabiliser n'est pas ±10 % près .
Par contre si tu as besoin d'envoyer une impulsion calibrée en temps ce sera plus gênant.

En fait mon Arduino me sert a réveiller de temps en temps un raspberry un cours instant pour assurer une mise a jour snmp.
Le temps de reveil est calculé en fonction de l'etat de la batterie (qui est chargé par des panneaux solaire).
Donc j'aurai tendance a dire que je n'ai pas besoin d'une precision forte.

Par contre l'Arduino (enfin a terme le DIP) est en liaison I2C avec des capteur INA219 pour la tension et le courant.
Et quand le Raspberry est allumé il lui envoie les infos via la liaison série.
=> Donc l’oscillateur 8MHZ est il suffisement precis pour assurer le timing des echanges I2C? Serie ?

PS : Je continue a chercher mes sources (dans lesquel le gars etait lui aussi surpris que cela consomme moins a 5V qu'a 3.3V) mais c’était il y a quelques temps....

J'ai déjà fait fonctionner un INA226 sous 3.3V avec un ESP32, sans problème.
Il supporte 6V, donc tu as le choix.
Si tu avais parlé de panneau solaires plus tôt je t'aurais dit qu'en recharge solaire on n'est pas au µA près, ni même à 100, à moins d'avoir un tout petit panneau, ou d'installer à Kerguelen ou Svalbard.

Un peu usine à gaz ce montage. C'aurait été plus simple avec un ESP32 (il y a des libs SNMP).
Mais bon, si c'est déjà fait ...

hbachetti, dois je comprendre "un INA226 sous 3.3V avec un ESP32" comme pas de pb de timing sans Qwartz sur le DIP qui parle en I2C?

Je ne suis ni aux Kerguelen ni au Svalbard (je savais memem pas ou c'etait :slight_smile: ), mais sur un balcon dans une rue... donc j'ai en hivers a peine 2h de soleil (quand il n'y a pas de nuage!

Oui je suis d'accord que c'est un peu usine a gaz mais j'ai déjà plein de raspberry pour ma domotique et j'ai eu la fleme de changer de techno. En plus je préfère le Python au langage Arduino :wink:

Mais je confirme l'I2C marche bien avec le DIP sans Qwartz...
Au fait je profite de ce poste (meme si ca commence a etre hors sujet) pour demander si vous connaissez un composant qui permet de gerez un panneau solaire et une batterie pour remplacer la cartelette chinoise que j'ai actuellement histoire d'avoir un pcb plus prore :slight_smile:

Tout dépend de la batterie.
Si c'est une LITHIUM-ION ou LIPO un module TP4056 fera ça très bien.

La batterie c'est une Li-ion 7,4V 3000mAh
Donc le TP4056 tel quel va pas passer :slight_smile: il a l'air d'etre fait pour une batterie a un module.
En plus mon panneau solaire de memoire monte potentiellement a 12V et la datasheet semble indiquer un max a 8V