Arduino Sparkfun Pro Micro e memoria disponibile

Ciao a tutti, rieccomi qui a stressarvi con le mie domande da principiante. :slight_smile:

Ho un problema al quale non sono riuscito a dare una risposta cercando sul web e sul forum.

Sto provando a realizzare un progetto che richiede un certa miniatutizzazione, per questo motivo ho pensato ad uno Sparkfun Pro Micro. Attualmente dispongo di un modello a 5V 16Mhz (clone cinese da 7€) che è quello con cui sto facendo dei test, ma pensavo di acquistarne poi uno a 3,3V 8 MHz.

Vengo alla raffica di domande.

Domanda 1: Il Pro Micro (compatibile Leonardo), se ho ben capito leggendo in giro, pur avendo 32K di memoria Flash, dispone di una quantità di program memory inferiore rispetto alle altre board perchè ha la necessità di gestire la seriale FTDI integrata. E' corretto?

Domanda 2: lo sketch una volta compilato per Arduino UNO, occupa 27332 byte quindi pensavo potesse essere caricato sul Pro Micro senza grossi problemi visto che questo ha una capacità massima di 28672 byte.
Lo stesso codice però, compilato per il Pro Micro occupa una considerevole quantità di memoria in più rispetto al modello Uno e Nano e di fatto non può essere caricato:

  • Uno: Lo sketch usa 27332 byte (84%) dello spazio disponibile per i programmi.
    Il massimo è 32256 byte.

  • Nano: Lo sketch usa 27332 byte (88%) dello spazio disponibile per i programmi.
    Il massimo è 30720 byte.

  • ProMicro: Lo sketch usa 30580 byte (106%) dello spazio disponibile per i programmi.
    Il massimo è 28672 byte.

Come mai lo stesso identico codice compilato per il Pro Micro occupa ben 3248 byte in più?
Nel caso non riesca a ridurre le dimensioni del codice, come alternativa al Pro Micro, che altro modello miniaturizzato di Arduino mi consigliate? Un ATTiny84?
Dovrebbe assorbire poca energia possibilmente visto che il progetto prevede una alimentazione a batterie.

Grazie anticipate per le dritte.

Ma ti serve proprio la USB integrata ? ? ?

Perché, altrimenti, Arduino Pro Mini è l'ideale :slight_smile:

Nello store di Arduino non è più disponibile, ma lo trovi tranquillamente su Sparkfun (sia a 3.3V che a 5V) che su AliExpress, dove te lo tirano dietro :smiley: :smiley: :smiley:

Guglielmo

P.S.: da AliExpress ne ho presi decine e sono sempre risultati tutti correttamente funzionanti :wink:

Oltre all'ottimo consiglio di Guglielmo, sei sicuro di non riuscire ad ottimizzare lo spazio utilizzato con un utilizzo più efficiente delle risorse disponibili?

Grazie Guglielmo,

la mia curiosità nel caso specifico si riferiva alla diversità di dimensioni del file .hex compilato per l'ATmega32u4 rispetto al quello compilato per l'ATmega328P. Ho fatto un test con un codice a caso.
Sarà poprio dovuta al diverso tipo di processore?

Il progetto in questione è un Heart Rate Monitor, mi ha intrigato questo che fra l'altro impiega proprio un Pro Mini con il 328P. La realizzazione hardware fa un pochino tenerezza, ma lo spunto, sopratutto le funzioni del Timer, mi hanno incuriosito. Fra l'altro quel codice per il Timer mi pare non funzioni con l'ATmega32u4 (controllore che per altro non conosco).

Sicuramente un Pro Mini è la scelta più azzeccata.
Ancora grazie.

la mia curiosità nel caso specifico si riferiva alla diversità di dimensioni del file .hex compilato per l'ATmega32u4 rispetto al quello compilato per l'ATmega328P.

Credo sia normale, il 32U4 ha una USB 'nativa', cioè gestita direttamente dall'MCU che il 328 non ha, demandando la comunicazione USB ad un altra MCU. Quando compili per il 32U4 viene incluso anche il codice di gestione della seriale tramite USB, cosa che nel 328 non avviene, ed il codice aggiunto fa crescere la dimensione indipendentemente dalla grandezza dello sketch.

Ciao, Ale.

cotestatnt:
Oltre all'ottimo consiglio di Guglielmo, sei sicuro di non riuscire ad ottimizzare lo spazio utilizzato con un utilizzo più efficiente delle risorse disponibili?

No sono proprio all'osso, purtroppo la libreria del display OLED occupa parecchio, ricordi la mia domanda dell'altro giorno?

janux:
No sono proprio all'osso, purtroppo la libreria del display OLED occupa parecchio

Si ho visto l'esempio che hai linkato... in effetti temo che l'inghippo sia proprio quello.
Magari cambiando libreria per l'OLED... certo a quel punto è tutto da riscrivere :slight_smile:

ilguargua:
Credo sia normale, il 32U4 ha una USB ‘nativa’, cioè gestita direttamente dall’MCU che il 328 non ha, demandando la comunicazione USB ad un altra MCU. Quando compili per il 32U4 viene incluso anche il codice di gestione della seriale tramite USB, cosa che nel 328 non avviene, ed il codice aggiunto fa crescere la dimensione indipendentemente dalla grandezza dello sketch.

Ciao, Ale.

Sospettavo che l’aumento fosse per via del sofware per la seriale.
Grazie.

cotestatnt:
Si ho visto l'esempio che hai linkato... in effetti temo che l'inghippo sia proprio quello.
Magari cambiando libreria per l'OLED... certo a quel punto è tutto da riscrivere :slight_smile:

Ho già fatto alcune prove su un Arduino nano, le librerie Adafruit_SSD1306 insieme alla AdafruitGFX, pesano comunque meno della sola 8Gu2. Devo ancora provare la 8Glib a 8 bit.

Diciamo che un tentativo si puó fare con un programmatore esterno, bypassando il bootloader, qualche kilobyte si recupera.
"Flash Memory 32 KB (ATmega32U4) of which 4 KB used by bootloader"

speedyant:
Diciamo che un tentativo si puó fare con un programmatore esterno, bypassando il bootloader, qualche kilobyte si recupera.
"Flash Memory 32 KB (ATmega32U4) of which 4 KB used by bootloader"

Ci avevo pensato ma non saprei come fare per poter utilizzare anche la flash-mem del bootloader.
Cioè au un Arduino Pro Micro il bootloader è già presente.
Per fare l'upload del codice si usa un adattatore FTDI e si fa l'upload con "Carica tramite un programmatore".
Bisogna modificare avrdude.conf?

NO, devi avere un programmatore ISP (quello che si collega al connettore a 6 pin) come QUESTO. I pin del ISP sono:

... e NON devi modificare nulla nel IDE, solo sezionare il giusto programmatore ed usare l'apposito comando "carica con programmatore" ... ma non so se ne valga la pena ... ::slight_smile:

Guglielmo

P.S.: Via USB/Seriale la programmazione avviene SEMPRE via bootloader, solo via ISP puoi evitare il bootloaderd

Sono 2 cose che necessitano memoria Flash:
Il bootloader e la routine di inizializzazione del hardware.
Confrontando il ATmega328 e il ATmega32U4 si nota che sia il bootloader che l' inizializzazione nel 32U4 sono piú grandi proprio a causa del interfaccia USB presente nel 32U4.
Ciao Uwe

OK, in pratica mi sembra di capire che facendo l'upload di uno sketch su un Arduino Pro Micro da un Arduino UNO tramite interfaccia ISP con "Carica tramite un programmatore", l'intera flash viene cancellata e di fatto si trasferisce solo il codice senza bootloader, recuperando così lo spazio da esso occupato. In pratica dopo questa operazione il Pro Micro non avrà più bootloader.

Ho trovato questo interessante articolo in cui è spiegato (al Passo 7) il metodo usato dgli Arduino con ATmega32u4 chiamato 1200bps_touch per comunicare via seriale anche senza un pin DTR.

https://it.howtodogood.com/53872-Overview-the-Arduino-sketch-uploading-process-and--28

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.