Go Down

Topic: atmega 328P 8mhz (Read 581 times) previous topic - next topic

68tjs

#15
Mar 17, 2019, 07:04 pm Last Edit: Mar 17, 2019, 07:08 pm by 68tjs
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.

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

bouault

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

Artouste

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 

bouault

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

Go Up