[RISOLTO]Sketch funzionante su Uno, compila e carica su Mini Pro ma non va !!

Per il momento non mi trovo a lavoro dove ho l'UNO il MINI PRO e lo sketch che mi da il problema..quindi non vi posso incollare in dettaglio l'errore che mi da l'ide (versione 1.6.10) Intanto premetto che con altri sketch (quelli di esempio dell'ide) non danno il problema, quindi è una cosa legata solo allo sketch su cui lavoro da un po di tempo.

Per ragioni di praticità sviluppo su Uno e li ha sempre caricato e funzionato alla grande. Arrivato a buon punto con il programma, carico sul mini pro lo stesso sketch e funziona tutto perfettamente anche li.. Ad inizio Agosto ho fatto qualche ritocchino a qualche "client.print" nel codice e nell'uno ad oggi continua a caricare e funzionare correttamente.

Oggi provo a ricaricare sul mini lo sketch (senza fare nessuna modifica e senza aver fatto nessuna modifica al pc ne all'ide di arduino) e compila correttamente ma arrivato all' upload fa il suo dovere, dopo il writing 100% fa la verifica e appena terminata mi da un errore relativo al "non matching"

Ho provato più volte e per scrupolo ho provato anche un'altro mini pro e stessa cosa...mentre su uno carica sempre perfettamente.

Ho provato anche tramite un programmatore usb diverso --> stessa cosa!

Mai successo a nessuno qualcosa di simile ? Il processore avendo optiboot caricato, non dovrebbe essere identico tra Uno e Mini Pro ?

La 1.6.10 ha dei buchi, aggiorna alla 1.6.11 che è disponibile già da un bel po.

Guglielmo

Ciao Guglielmo e grazie per la tua più che celere risposta di ieri sera :)

Oggi appena arrivato a lavoro ho subito seguito il tuo consiglio, aggiornato IDE e provato a caricare di nuovo il mio sketch sul mini.. purtroppo però il problema rimane:

Arduino:1.6.11 (Windows 7), Scheda:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz Optiboot)"

.....cut.......

avrdude: Version 6.3, compiled on Jun 22 2016 at 16:05:21
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\LeonardoSrv\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino2/etc/avrdude.conf"

         Using Port                    : COM7
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type 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    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "C:\Users\LEONAR~1\AppData\Local\Temp\build035fd880dbf40617fa65feacd28bf77f.tmp/WakeThroughArduinoMiniZ3.ino.hex"
avrdude: writing flash (32250 bytes):

Writing | ################################################## | 100% 5.20s

avrdude: 32250 bytes of flash written
avrdude: verifying flash memory against C:\Users\LEONAR~1\AppData\Local\Temp\build035fd880dbf40617fa65feacd28bf77f.tmp/WakeThroughArduinoMiniZ3.ino.hex:
avrdude: load data flash data from input file C:\Users\LEONAR~1\AppData\Local\Temp\build035fd880dbf40617fa65feacd28bf77f.tmp/WakeThroughArduinoMiniZ3.ino.hex:
avrdude: input file C:\Users\LEONAR~1\AppData\Local\Temp\build035fd880dbf40617fa65feacd28bf77f.tmp/WakeThroughArduinoMiniZ3.ino.hex contains 32250 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 3.98s

avrdude: verifying ...
Errore durante il caricamento dello sketch
avrdude: verification error, first mismatch at byte 0x7800
         0xff != 0x01
avrdude: verification error; content mismatch

avrdude done.  Thank you.

Mmmm … purtroppo quell’errore ti indica che ha caricato tutto il programma, è andato a verificarlo e … una cella di memoria contiene un valore diverso da quello che ci ha scritto caricandolo …

Brutta cosa :confused: … sembrerebbe che la Flash di quel Pro Mini, al byte 0x7800 (byte 30720) sia morta e non prenda la programmazione (0xff != 0x01) … da dove arriva quel Pro Mini ?

Guglielmo

P.S.: La Pro Mini NON usa Optiboot, tanto è vero che nel file “boards.txt” è chiaramente indicato: ATmegaBOOT_168_atmega328.hex … ma non significa nulla, non è un problema di bootloader.

Uso optiboot perché lo sketch non entrava von il bootloader normale… ho provato anche un altra mini pro…entrambe provenienti dalla cina… stesso errrore

Il guaio è che prima di editare lo sketch l ultima volta, l avevo caricato con successo e lo spazio occupato era simile se non uguale…la modifica infatti era un inezia

Aspetta ... ... [u]non avevo notato le dimensioni del tuo codice[/u] ... 32250 :o ... mi sa che con Optiboot sei veramente al limite, con il bootloader std. sicuramente non c'entra ...

Ora, se hai cambiato tu il bootloader, hai corretto il file "boards.txt" ed hai modificato i FUSE specificando le nuove dimensioni ? Perché l'errore, se non sbaglio, è proprio dove finiva il vecchio bootloader ... mentre il tuo codice richiede di più ... qundi, se non hai fatto tutte le modifiche necessarie, è ovvio che arrivato a 30720 da errore !

Guglielmo

Si, ho caricato io il bootloader optiboot utilizzando questa scheda aggiunta da me nel file board.txt

## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328 Optiboot
## -------------------------------------------------
pro.menu.cpu.16MHzatmega328optiboot=ATmega328 (5V, 16 MHz Optiboot)

pro.menu.cpu.16MHzatmega328optiboot.upload.maximum_size=32256
pro.menu.cpu.16MHzatmega328optiboot.upload.maximum_data_size=2048
pro.menu.cpu.16MHzatmega328optiboot.upload.speed=115200

pro.menu.cpu.16MHzatmega328optiboot.bootloader.low_fuses=0xFF
pro.menu.cpu.16MHzatmega328optiboot.bootloader.high_fuses=0xDA
pro.menu.cpu.16MHzatmega328optiboot.bootloader.extended_fuses=0x05
pro.menu.cpu.16MHzatmega328optiboot.bootloader.file=optiboot/optiboot_atmega328.hex

pro.menu.cpu.16MHzatmega328optiboot.build.mcu=atmega328p
pro.menu.cpu.16MHzatmega328optiboot.build.f_cpu=16000000L

Sempre che io non stia quindi sbagliando qualcosa, non mi spiego se il max spazio per lo sketch è 32256 se il mio codice è 32250 non dovrebbe starci dentro ?

Alla fine UNO ha lo stesso bootloader e lo stesso spazio disponibile e ci sta dentro il programma !

Infatti sono sbagliati i fuse, hai lasciato 2k riservati per il bootloader, invece di 512 byte, e questo crea il problema.

Devi usare i fuse della UNO:

low_fuses=0xFF high_fuses=0xDE extended_fuses=0x05

Mentre tu stai continuando ad usare i fuse della pro mini che sono quelli per il bootloader della 2009.

pro.menu.cpu.16MHzatmega328optiboot.bootloader.low_fuses=0xFF pro.menu.cpu.16MHzatmega328optiboot.bootloader.high_fuses=0xDA pro.menu.cpu.16MHzatmega328optiboot.bootloader.extended_fuses=0x05

Ci sono 3 FUSE che indicano l'occupazione del bootloader, e tu NON li hai cambiati ... ... alla MCU glie ne frega poco di quello che scrivi nel file boards.txt, devi cambiare i FUSE.

Quanto occupa OptiBoot per la Pro Mini? 512 bytes mi pare (VERIFICA), allora devi mettere :

pro.menu.cpu.16MHzatmega328optiboot.bootloader.low_fuses=0xFF
pro.menu.cpu.16MHzatmega328optiboot.bootloader.high_fuses=0xDC
pro.menu.cpu.16MHzatmega328optiboot.bootloader.extended_fuses=0x05

Così riservi 512 bytes.

Devi studiarti detti bit sul datasheet ;)

Guglielmo

P.S.: Ahahahahahahahah :D :D :D ... Astro ... ormai è accertato ... siamo in contatto telepatico ... :grin: P.P.S: Mi pare che l'OptiBoot per la Pro Mini stia in 512 Bytes ...

Grazie per l aiuto...pensavo fosse giusta quella modifica al file board anche xke l avevo trovata sul forum in un altra discussione.. correggo provo e ringrazio ancora

astrobeed

pro.menu.cpu.16MHzatmega328optiboot.bootloader.high_fuses=0xDE

guglielmo:

pro.menu.cpu.16MHzatmega328optiboot.bootloader.high_fuses=0xDC

Uno usa 0xDE... ascolto astrobeed ? :)

inoltre nel board txt di UNO (che usa optiboot) c'è scritto sempre

uno.upload.maximum_data_size=2048

perchè nel mini devo scenderlo a 512 ?

data_size è la ram, ovvero 2k :)

Ok chiaro ancora gracias

5a2v0: Uno usa 0xDE... ascolto astrobeed ? :)

No devi "ascoltare" né uno né l'altro ... come ti ho scritto ... DEVI VERIFICARE quanto occupa il bootloader ...

Se mi ricordo bene, sulla Pro Mini, Optiboot occupa meno di 512 byte (ne ho modificate alcune tempo fa) e quindi dovresti usare il mio settaggio, ma [u]è un vago ricordo[/u] e potrei benissimo sbagliare; se invece occupa di più devi usare quello di Astro ... e comunque ribadisco DEVI VERIFICARE !!!

Guglielmo

ok, in ogni caso dopo aver "corretto" il file board.txt dovrò prima riscrivere il bootloader optiboot e poi ricaricare lo sketch oppure mi basta caricare lo sketch ?

Devi riscrivere i FUSE nella MCU ... quindi, se usi l'IDE di Arduino, devi ricaricare il bootloader così programma il tutto, se usi un'altro strumento (es. avrdudess) puoi solo riprogrammare i FUSE (Solo L, H ed E, senza toccare i LB, mi raccomando).

Guglielmo

Guglielmo :confused: mi dici di verificare ma non ho la più pallida idea del COME :)

Comunque darei per scontato che visto che Arduino/Genuino UNO usano l'optiboot e hanno high_fuses=0xDE

penso sia giusto mettere lo stesso valore anche per la mini pro essendo lo stesso 328 no ?

Prima di scrivere e chiederti (male..lo so..) ho comunque provato come consigliatomi da astrobeed e ora funge, ho scritto il bootloader e ricaricato lo sketch senza problemi !

Però mi rimane la curiosità di sapere come calcolare lo spazio usato dal bootloader...oppure semplicemente lo dice nell'output al momento in cui lo si scrive ?

... emmm ... quindi ne deduco che lo hai copiato bello che pronto e non lo hai compilato tu partedo dai sorgenti di "Optiboot" e vedendo cosa ti diceva il compilatore vero ? :grin:

Lascia stare, se funziona va bene il valore che ti ha detto Astro :D

Guglielmo

P.S.: Io, all'epoca, l'ho dovuto compilare per ottenerne uno funzionate bene sulle Pro Mini a 3.3V 8MHz

Sul web si trovano parecchie guide su come mettere optiboot nei mini (tutte diverse l'una dall'altra) quindi ho seguito quella più semplice.. :confused:

ho semplicemente scritto lo stesso bootloader dell'UNO sulla mini, sempre basandomi sul fatto che il processore è lo stesso e che lo sketch nell' UNO ci entrava e girava bene...

P.s. il mio Mini Pro è ovviamente 16Mhz 5v

non so se può dipendere dal bootloader o dai fuses...dopo aver fatto la suddetta operazione...anche caricando uno degli esempi della libreria ethernet, web server classico, il mini non capisco cosa fa ma sicuramente non quello che dovrebbe...

controllato 3 volte tutti i collegamenti...carico lo sketch di esempio e va a buon fine (come quando carico il mio sketch)... ma poi non ottiene l'ip e non si collega!

prima sul serial monitor mi ha stampato: "Server is at 255.0.0.0" Quindi qualcosa dello sketch di esempio sta facendo...ma perchè non riesce a collegarsi ? Ha sempre funzionato prima...