Atmega328p 328P à 8MHz

Bonjour
Je voudrais installer le bootloader sur un MCU Atmega328PU.
Mais n’ayant pas encore reçu les Quartz 16 MHz j’aimerais le faire au moyen de l’horloge interne de 8MHz. Mais j’aurais quelques questions auxquelles je ne trouve pas de réponse.
Voilà donc:

  1. peux-t-on installer le bootloader sur un Atmega328p vierge directement sur une carte Arduino en remplaçant celui déjà installé ?

2)peux-t-on installer le bootloader sans quartz mais seulement avec l’horloge interne 8MHz ?

  1. peux-t-on revenir à une fréquence de 16Mhz après avoir configurer l’Atmega en 8MHz? En d’autres termes est-ce réversible ?

J’ai déplacé votre sujet de la section forum anglais à la section forum français.
Veuillez vous référer au guide suivant pour plus d’informations.
Règles de la section du forum français.
Merci.

Bonjour
1)oui
2)oui
3)oui

ps :un arduino 16mhz supposé avec quartz a démarré sans juste avec les condos du quartz ... mais évidemment je le conseille pas.
PS2 j'ai pas précisé mais ca va de soi .. pour charger le bootloader faut le faire avec le connecteur ICSP

Bonjour

Voilà ce que j’ai fait sans succès

  • Avec la carte Arduino Uno chargé avec ArduinoISP.
  • Ensuite programmer Arduino as ISP
  • puis board = Atmega328p on a breadboard (8MHz internal clock)
    Et enfin Burn Bootloader

Les connexions sont les suivanes:
Carte Arduino. > Atmega328p vierge sans quartz
10. ——————-——— > 1
11. ——————-———> 17
12. ——————-———> 18
13. —————————> 19
+5vusb ————-———-> 7 et 20 >> +5v
GND usb ———————-> 22 >> GND

Voici le message retourné par le compilateur


Arduino : 1.8.19 (Mac OS X), Carte : "ATmega328 on a breadboard (8 MHz internal clock)"

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
        Double check connections and try again, or use -F to override
        this check.

avrdude: stk500_disable(): unknown response=0x12
Erreur lors de la gravure de la séquence d'initialisation.


Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Merci de votre aide

Bonjour,

Ton atmega328 est un processeur neuf?
Si c'est la cas ça doit fonctionner car il est configuré d'origine avec une horloge interne.
Par contre si il a été configuré en horloge externe, il faut un quartz pour que ça fonctionne.

Pourquoi tu précises 5Vusb et GNDusb ? Il s'agit bien du 5V et du GND de la carte UNO?

Bonjour
En fait la carte Arduino est alimenter par l’USB de l’ordinateur et je reprend le +5v et GND de la carte pour alimenter le mcu vierge qui se trouve sur la breadboard.
Comment savoir si l’atmega328 est configuré en 8MHz ?
Pour moi les Atmega328p que j’ai acheté n’ont pas de bootloader
Je t’avoue que je suis un peu paumé :upside_down_face:
En tout cas merci pour aide.

Bonjour
Le mieux c’est de programmer les fuses avec Microchip studio. Ou de regarder comment elles sont programmer par défaut.

Bonne journée

Si ce sont des atmega328p vierges ils sont configurés en horloge interne (je ne sais plus si c'est 1MHz ou 8MHz) et ça doit fonctionner.

Je te conseille d'utiliser avrdudess, pour lire/configurer les fuses.

re bonjour
quand on en a beaucoup a programmer il est souhaitable de réaliser un programmateur adapté soit directement a enficher sur uno soit en réalisant un truc spécifique. la planche a pain ca va bien un moment mais on est jamais a l'abri d'une erreur ou d'un contact merdique.

Un atmega 328P neuf est configuré en mode "test sous pointes" avant découpe du wafer (disque de silicium de quelques dizaines de cm de diamètre).

La config est indiquée dans la datasheet :

  • oscillateur interne 8 MHz
  • diviseur par 8 sur l'horloge en service
    soit une horloge à 1 MHz.

La datasheet explique tous les réglages possibles.

Pour connaitre la config, il faut lire les "fuses".
Les f uses se lisent avec un programmeur ISCP (carte spécialisée USBasp ou carte arduino + programme ArduinoISCP)
Les fuses se lisent avec le logiciel avrdude dont il existe une notice avec de nombreux exemples.

Attention :
Les fuses sont une zone d'eeprom protégée, c'est pour cela qu'il faut le logiciel spécial avrdude.
Technologiquement en sortie de fabrication l'eeprom est nativement à l'état 1.
L'état "sortie de fabrication" est tous les bits à 1
Pour modifier un bit "Fuse" il faut le mettre à l'état 0.

Il existe des sites pour aider comme :
https://www.engbedded.com/fusecalc/
https://microchipdeveloper.com/8avr:avrfuses

2 Likes

Bonjour @68tjs
+1
L’avantage d’avrdude c’est qu’il est multiplateforme alors que Microchip studio ne tourne que sous Windows si ma mémoire est bonne.
Il y a également minicore si on veut faire simple :
https://github.com/MCUdude/MiniCore
Mais à l’époque où je l’avais testé il souffrait de quelques imperfections.

Bonne journée

2 Likes

Même si c'est un peu exagéré d'utiliser un IDE uniquement pour lire la configuration du µC, pour information un palliatif à Microchip studio est MPlab X qui est multiplateforme, je crois que Atmel studio aussi d'ailleurs.

1 Like

Bonjour
La configuration du MCU 328P se fait toujours au moyen de la carte Arduino uno avec mini core, microchip studio, MPlab x ou avrdude ? Car je n’ai que ce moyen pour l’instant.
Merci

Personnellement j'utilise avrdudess (gui de avrdude), mais je cois qu'il ne fonctionne pas sur mac.

La configuration se fait avec avrdude. Avrdude est un programme écrit par le concepteur du microcontroleur Atmel,( acheté depuis par Microchip).
Ce n'est pas un programme provenant de je ne sais où.

Les logiciels que tu cites utilisent avrdude.
avrdude est obligatoirement inclu dans les fichiers des l'IDEs.
avrdude s'utilise aussi seul en ligne de commande, je sais cela ne plait pas aux windowsiens, mais c'est ce qui fonctionne le mieux.
Question sécurité je pense qu'écrire une ligne est moins dangereux que de se tromper en cliquant au mauvais endroit, cela n'engage que moi.

Une recherche gogole "avrdude manual" donne accès au manuel d'emploi.
Ce document est très clair, il y a les lignes de commande pour lire et les lignes de commandes pour écrire.

C'est la version 6.4, avrdude doit être en 7 maintenant.
Je n'ai pas trouvé de version plus récente probablement parce qu'elle serait inutile.
La 6.4 décrit ce qu'il faut faire.

Le manuel donne la ligne exacte à taper pour lire la configuration des fuses.

La datasheet de l'atmega328p donne ce à quoi cela correspond.

1 Like

Bonsoir @franck911
Si tu es débutant, le plus simple pour toi c’est minicore. Tu ne mets pas de quartz bien sûr puisque tu n’en as pas pour l’instant et que ton 328p est configuré sur son oscillateur interne :wink:
Essaye ça :

Bonne bidouille
Bonne soirée

PS : avec minicore tu choisis 8 mhz interne bien sûr.

1 Like

Bonjour
Donc j’avance petit à petit, j’ai utilisé minicore et voilà le résultat retourné. Peut-être ai-je mal choisi le programmeur j’ai essayé avec Arduino as ISP ou AVRISP mkII. Je ne vois pas ce qui cloche !!!
Merci pour le coup de main, je désespère pas.


Arduino : 1.8.19 (Mac OS X), Carte : "ATmega328, Yes (UART0), EEPROM retained, 328P / 328PA, BOD 2.7V, LTO disabled, External 16 MHz"


avrdude: Version 7.1-arduino.1
        Copyright the AVRDUDE authors;
        see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

        System wide configuration file is /Users/franck/Library/Arduino15/packages/MiniCore/hardware/avr/2.2.2/avrdude.conf
        User configuration file is /Users/franck/.avrduderc
        User configuration file does not exist or is not a regular file, skipping

        Using Port                    : /dev/cu.usbmodem641
        Using Programmer              : stk500v1
        Overriding Baud Rate          : 19200
        AVR Part                      : ATmega328P
        Chip Erase delay              : 9000 us
        PAGEL                         : PD7
        BS2                           : PC2
        RESET disposition             : possible i/o
        RETRY pulse                   : SCK
        Serial program mode           : yes
        Parallel program mode         : yes
        Timeout                       : 200
        StabDelay                     : 100
        CmdexeDelay                   : 25
        SyncLoops                     : 32
        PollIndex                     : 3
        PollValue                     : 0x53
        Memory Detail                 :

                                          Block Poll               Page                       Polled
          Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
          ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
          eeprom                 65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
          flash                  65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
          lfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
          hfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
          efuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
          lock                    0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
          signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
          calibration             0     0     0    0 no          1    1      0     0     0 0x00 0x00

        Programmer Type : STK500
        Description     : Atmel STK500 version 1.x firmware

avrdude stk500_getparm() error: protocol expects OK byte 0x10 but got 0x14

avrdude stk500_getparm() error: protocol expects sync byte 0x14 but got 0x02

avrdude stk500_getparm() error: protocol expects sync byte 0x14 but got 0x10
        Hardware Version: 32767
        Firmware Version: 48.48
        Topcard         : STK502
        Vtarget         : 1.8 V
        Varef           : 0.0 V
        Oscillator      : Off
        SCK period      : 0.1 us

avrdude stk500_initialize() error: protocol expects OK byte 0x10 but got 0x01
avrdude main() error: initialization failed, rc=-1
       - double check the connections and try again
       - use -B to set lower ISP clock frequency, e.g. -B 125kHz
       - use -F to override this check

avrdude stk500_disable() error: protocol expects sync byte 0x14 but got 0x10

avrdude done.  Thank you.

Erreur lors de la gravure de la séquence d'initialisation.


Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Bonjour @franck911

Je n'ai pas trop de temps en ce moment mais j'ai fait la manip du tuto que je t'ai fourni.
Pas d'erreurs, je suis sous Mac Monterey 12.6.8 :

        avrdude: Version 7.1-arduino.1
         Copyright the AVRDUDE authors;
         see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

         System wide configuration file is              /Users/philippe86220/Library/Arduino15/packages/MiniCore/hardware/avr/2.2.2/avrdude.conf
         User configuration file is /Users/philippe86220/.avrduderc
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14601
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         Serial program mode           : yes
         Parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW          ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom                 65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash                  65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           hfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           efuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           lock                    0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
           calibration             0     0     0    0 no          1    1      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude: erasing chip
avrdude: reading input file 0xff for lock
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0xff
avrdude: 1 byte of lock verified
avrdude: reading input file 0b11111101 for efuse
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte efuse ...
avrdude: 1 byte of efuse written
avrdude: verifying efuse memory against 0b11111101
avrdude: 1 byte of efuse verified
avrdude: reading input file 0b11010111 for hfuse
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte hfuse ...
avrdude: 1 byte of hfuse written
avrdude: verifying hfuse memory against 0b11010111
avrdude: 1 byte of hfuse verified
avrdude: reading input file 0xe2 for lfuse
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lfuse ...
avrdude: 1 byte of lfuse written
avrdude: verifying lfuse memory against 0xe2
avrdude: 1 byte of lfuse verified

avrdude done.  Thank you.


avrdude: Version 7.1-arduino.1
         Copyright the AVRDUDE authors;
         see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

         System wide configuration file is /Users/philippe86220/Library/Arduino15/packages/MiniCore/hardware/avr/2.2.2/avrdude.conf
         User configuration file is /Users/philippe86220/.avrduderc
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14601
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         Serial program mode           : yes
         Parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                           Block Poll               Page                       Polled
           Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom                 65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash                  65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           hfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           efuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           lock                    0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
           calibration             0     0     0    0 no          1    1      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude: Note: flash memory has been specified, an erase cycle will be performed.
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file /Users/philippe86220/Library/Arduino15/packages/MiniCore/hardware/avr/2.2.2/bootloaders/empty/empty.hex for flash
         with 0 bytes in 0 sections within [0, -1]
         using 0 pages and 0 pad bytes
avrdude: writing 0 bytes flash ...

Writing | ################################################## | 100% 0.00s

avrdude: 0 bytes of flash written
avrdude: verifying flash memory against /Users/philippe86220/Library/Arduino15/packages/MiniCore/hardware/avr/2.2.2/bootloaders/empty/empty.hex

Reading | ################################################## | 100% 0.00savrdude: 0 bytes of flash verified
avrdude: reading input file 0xcf for lock
         with 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0xcf
avrdude: 1 byte of lock verified

avrdude done.  Thank you.


La configuration de MiniCore :

Je précise que je travaille avec un 328pu.
Je n'ai pas eu le temps de regarder l'origine de ton message d'erreur.
Je repars en forêt faire des photos animalières car c'est la période du brame du cerf.

Bonne journée

PS : Contrairement au tuto je grave le bootloader (j’ai fait un essai sans puis avec)
A lire : RitonDuino: janvier 2020

Bonjour
Merci de ton retour.
En téléversant par l’USB dans la UNO j’ai déjà ce warning qui apparaît (voir photo), j’ai refait des essais sans succès Apparemment dans ce que j’ai pu voir sur les messages d’erreur c’est que les valeurs retournées ne sont pas celles attendues.
Y a t-il un problème avec le MACos ?

Warning: Board breadboard:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB

est un problème soulevé par d’autres utilisateurs sur le net.
Il va peut-être falloir apprendre à utiliser avrdude en ligne de commande…

Bonne soirée à toi et bon match si tu le regardes :wink: