atmega 328P 8mhz

Bonjour à tous,
je souhaite utiliser un atmega 328p en standallone et sans kwartz, avec l'oscilateur interne à 8mhz.
j'ai donc sélectionné arduino pro 8mhz dans l'IDE, apparemment pas de souci pour graver le bootloader, par contre je ne parviens pas ensuite à téléverser le moindre sketch...

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x21

Une piste ?
merci,
Jacques

Bonjour,

L'arduino pro utilise un quartz. Si tu veux fonctionner sans quartz, il te faut sélectionner 'Atmega328 on breadboard (8Mhz internal clock)'.
Je ne me souviens plus comment je l'avais ajouter à la liste des cartes. Je recherche.

Bonjour

Lors de la gravure du boortloader les 'fusibles' ont-ils été positionnés de manière à autoriser l'oscillateur RC interne 8 Mhz?
Il me semble que la configuration évoquée par Kamill n'estiste pas à l'origine et qu'il faut créer une section dans boards.txt.... sous réserve ....je n'ai pas touché à ça depuis qq années...

Tu trouveras les infos ici (chapitre Minimal Circuit (Eliminating the External Clock))
J'ai utilisé la config hard breadboard-1-6-x.zip qui comme son nom ne l'indique pas fonctionne aussi avec la version 1.8.x

Je comprend: l'arduino pro est équipé d'un kwartz externe 8mhz !
j'ai cherché sur le net des bootloader "breadboard 8mhz" mais tous ceux que j'ai testé (3) ne fonctionnent pas et semblent obsolètes.
al1fch, je ne comprend pas le sens de ta question... j'ai sélectionné arduino pro 8mhz, j'ai ensuite cliqué sur "graver la séquence d'initialisation" et c'est tout.

al1fch, je ne comprend pas le sens de ta question... j'ai sélectionné arduino pro 8mhz, j'ai ensuite cliqué sur "graver la séquence d'initialisation" et c'est tout.

En faisant ça tu configures un Mega 28P en oscillateur externe 8MHz (quartz)

Suis le lien que je t'ais donné, ajoute la carte contenue dans breadboard-1-6-x.zip comme indiqué et sélectionne 'Atmega328 on breadboard (8Mhz internal clock)' et ça va fonctionner.

Enfin ça va fonctionner avec un atmega328 vierge, si tu y as gravé un bootloader avec quartz ça a positionné les fuses pour fonctionner avec un quartz 8MHz et j'ai bien peur qu'il faille un quartz 8MHz pour positionner les fuses pour l’oscillateur interne.

Super, ça marche !
Merci beaucoup kamill

Bonne nouvelle.
C'était avec plaisir :slight_smile:

Et ça fonctionne avec un atmega précédemment bootloadé à 16mhz avec oscillateur !

Dans mon souvenir j'avais eu des problèmes dans ce cas, mais j'avais peu être fait une mauvaise manip.

Le morceau de fichier ajouté comporte implique une re-définition des fusibles
La ligne suivante impose le nouveau mode d'oscillation

atmega328bb.bootloader.low_fuses=0xE2

Oui, mais pour pouvoir programmer les fuses, il faut que le atmega fonctionne et je pensais que pendant la programmation il fonctionnait avec l'oscillateur actuellement programmé dans les fuses.

oui, en effet , ça me dit quelquechose maintenant que tu en parles....

question subsidiaire : est-ce que je dois m'attendre à ce que certaines library ou autre ne fonctionnent pas ?

Si on veut être maître de ce que l'on fait il faut se passer du confort de "graver la séquence d'initialisation".
Ce qu'Arduino appelle "graver la séquence d'initialisation" consiste en deux opérations :

  1. réglage des fuses.
  2. injection du bootloader

Remarque : il n'est pas obligatoire d'utiliser un bootloader pour charger un programme par l'USB/UART.
La programmation des Atmega est primitivement prévue pour être effectuée par l'ISP (In Situ Programming). Attention le connecteur est le même que le SPI mais au démarrage c'est le mode ISP qui est activé, le SPI ne le sera qu'un peu plus tard une fois la phase d'initialisation passée).

Il faut utiliser un programmeur spécial ISP. Ce peut être une carte arduino avec le bon programme interne, des exemples sont donnés sur le site Arduino, ou plus simple à mon avis acheter un programmeur USBasp ou tinyUSB pour quelques euros et livré avec le câble qui va bien, aucun câblage à faire.

Première opération : il faut positionner les fuses.
Un Atmega sorti d'usine a les fuses réglés pour :

  • oscillateur interne à 8 MHz
  • diviseur interne par 8 en service
    Ce qui fait qu'il tourne à 1 MHz.
    Il faut mettre le diviseur par 8 hors service.
    Le réglage des fuses se trouve dans la datasheet du microcontroleur.

Ensuite si on veut un bootloader il faut choisir le bon (c'est une évidence qui n'est pas aussi simple qu'on le pense) et le charger par ISP.

Le chargement du programme utilisateur peut aussi de faire par ISP, on gagne l'espace libéré par le bootloader. Maintenant avec un bootloader de 500 octets c'est moins utile que quand il faisait 2k soit presque 10% de la mémoire totale.

Information importante :
Quand le micro fonctionne sur son oscillateur interne il est possible de retrouver l'usage des pins numériques Xtal1 et Xtal2 qui sont les entrées numériques PC6 et PC7 du port C qui devient complètement accessible.
Bien évidement elles ne sont pas gérées par digitalWrite/Read. Voir la datasheet pour les gérer par leur registres.

question subsidiaire : est-ce que je dois m'attendre à ce que certaines library ou autre ne fonctionnent pas ?

A priori non mais cela reste à vérifier.
La configuration du micro est faite dans la fonction init() qui est lancée avant setup(), c'est automatique tu ne le vois pas.
Le code de cette fonction init() est rangé dans le même répertoire que les codes de toutes les autres fonctions.

Par contre la précision des fonctions de temps (delay, millis, etc) sera moins bonne et bougera avec la température interne de la puce.

Ok, merci beaucoup pour ces précisions.
Si je trouve une lib qui pose problème je vous tiendrai au courant.

bouault:
question subsidiaire : est-ce que je dois m'attendre à ce que certaines library ou autre ne fonctionnent pas ?

Bonsoir Jacques
en horloge interne à 8MHz tu peux tomber sur des composants/protocoles tres time dependent" qui n'apprecient pas trop l"imprécision relative de l'horloge interne.
Je pense par exemple au protocole 1-Wire® lorsque tu veux emuler du compo en slave

Hello Artouste,
en tout cas les LED neo pixel qui me semble-t-il sont dans ce cas, fonctionnent bien.