Go Down

Topic: ATmega328PB (Read 102881 times) previous topic - next topic

PaoloP

#240
Feb 26, 2016, 03:21 pm Last Edit: Feb 26, 2016, 03:35 pm by PaoloP
Astro, io dall'IDE di Arduino riesco a compilare.
Non riesco a fare l'upload da IDE verso l'Xplained PB.


Astro, io riesco a compilare e a fare l'upload da IDE con la Xplained PB.  :)  :)  :)

PaoloP

Ho usato come bootloader quello di Watterott, con quello standard di Arduino non andava.

astrobeed

Ho usato come bootloader quello di Watterott, con quello standard di Arduino non andava.
L'optiboot standard non va bene per la questione delle due seriali, l'init è leggermente diverso.
Quale toolchain stai usando ?
Ho appena provato a trapiantare la 4.9.2 Atmel dentro l'IDE e non da problemi se compilo per i vari micro standard, se compilo per il 328PB adesso non dà errore sul nome micro, però ottengo vari errori sul core.

Questi sono gli errori se provo a compilare il blink.

Code: [Select]
Arduino:1.6.5 (Windows 7), Scheda:"ATmega328PB, 16 MHz"

In file included from e:\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from E:\arduino\hardware\arduino\avr\cores\arduino\wiring_private.h:28,

                 from E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c:27:

E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c: In function 'analogWrite':

E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c:222:17: error: 'COM4A1' undeclared (first use in this function)

     sbi(TCCR4A, COM4A1);

                 ^

E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c:222:5: note: in expansion of macro 'sbi'

     sbi(TCCR4A, COM4A1);

     ^

E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c:222:17: note: each undeclared identifier is reported only once for each function it appears in

     sbi(TCCR4A, COM4A1);

                 ^

E:\arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c:222:5: note: in expansion of macro 'sbi'

     sbi(TCCR4A, COM4A1);

     ^

Errore durante la compilazione

  Questo report potrebbe essere più ricco
di informazioni con
  "Mostra un output dettagliato durante la compilazione"
  abilitato in "File > Impostazioni"



p.s.
Posso inventare pure io una nuova parola ?
Propongo arduinoso per indicare un sistema composto da più Arduino. :D


Scientia potentia est

astrobeed

Dimenticavo, per il momento non mi interessa usare il bootloader sul 328PB, faccio prima ad usare l'AVRISP MKII  :)
Scientia potentia est

gpb01

Quale toolchain stai usando ?
Probabilmente, in funzione dell'ambiente, una di quelle indicate QUI da Watterott ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

astrobeed

Ho aggiunto i 3 file di Astro più un 4° che mi chiedeva (specs-atmega328pb).
Si serve anche il file "specs-atmega328pb", va copiato in "\arduinoxxx\hardware\tools\avr\lib\gcc\avr\4.9.2\device-specs", io l'ho preso da Atmel Studio 7

E' un file di testo, senza estensione, questo è il suo contenuto:

Code: [Select]
#
# Auto-generated specs for AVR device atmega328pb (core avr5, 16-bit SP)
#
# Generated by   : ./gcc/config/avr/gen-avr-mmcu-specs.c
# Generated from : ./gcc/config/gcc.c
#                  ./gcc/config/avr/specs.h
#                  ./gcc/config/avr/avrlibc.h
# Used by        : avr-gcc compiler driver
# Used for       : building command options for sub-processes
#
# See <https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html>
# for a documentation of spec files.


# If you intend to use an existing device specs file as a starting point
# for a new device spec file, make sure you are copying from a specs
# file for a device from the same core architecture and SP width.
# See <https://gcc.gnu.org/gcc-5/changes.html> for a description
# of how to use such own spec files.

*avrlibc_startfile:
crtatmega328pb.o%s

*avrlibc_devicelib:
%{!nodevicelib:-latmega328pb}

*cc1_n_flash:
%{!mn-flash=*:-mn-flash=1}

*cc1_rmw:
%{mrmw}

*cc1_errata_skip:
%{!mskip-bug: -mno-skip-bug}

*asm_arch:
-mmcu=avr5

*asm_relax:
%{mrelax:--mlink-relax}

*asm_rmw:
%{mrmw}

*asm_errata_skip:
%{!mskip-bug: -mno-skip-bug}

*link_pmem_wrap:
%{mpmem-wrap-around: --pmem-wrap-around=32k}

*link_relax:
%{mrelax:--relax %(link_pmem_wrap)}

*link_arch:
%{mmcu=*:-m%*}

*link_data_start:
-Tdata 0x800100

*link_text_start:


*self_spec:
%{!mmcu=avr*: %<mmcu=* -mmcu=avr5} %<msp8

# AVR-LibC's avr/io.h uses the device specifying macro to determine
# the name of the device header.  For example, -mmcu=atmega8a triggers
# the definition of __AVR_ATmega8A__ and avr/io.h includes the device
# header 'iom8a.h' by means of:
#
#     ...
#     #elif defined (__AVR_ATmega8A__)
#     #  include <avr/iom8a.h>
#     #elif ...
#
# If no device macro is defined, AVR-LibC uses __AVR_DEV_LIB_NAME__
# as fallback to determine the name of the device header as
#
#     "avr/io" + __AVR_DEV_LIB_NAME__ + ".h"
#
# If you provide your own specs file for a device not yet known to
# AVR-LibC, you can now define the hook macro __AVR_DEV_LIB_NAME__
# as needed so that
#
#     #include <avr/io.h>
#
# will include the desired device header.  For ATmega8A the supplement
# to *cpp would read
#
#     -D__AVR_DEV_LIB_NAME__=m8a


*cpp:
-D__AVR_ATmega328PB__ -D__AVR_DEVICE_NAME__=atmega328pb -D__AVR_DEV_LIB_NAME__=m328pb

# End of file




Scientia potentia est

PaoloP

#246
Feb 26, 2016, 06:08 pm Last Edit: Feb 26, 2016, 06:09 pm by PaoloP
Si, sto usando la 4.9.2 (http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.5.0/). Più i famosi 4 file,più un file board.txt, platforms.txt e pins_arduino.h che ho creato io.
Li trovi in una delle pagine precedenti.
Oppure usi quelli di Watterott.  :)

Per l'upload devi aggiornare avrdude.conf con le indicazioni di Guglielmo.
Watterott si è spinta oltre includendo anche il nuovo file con le definizioni per l'uso delle EEPROM.

La cosa complicata è che le definizioni dei nomi dei registi tra i due micro P e PB sono diverse. Quindi il core di Arduino non le riconosce.

PaoloP

La nuova domanda è: cambiare i nomi dei registri nel core di Arduino con dei #ifdef e #else oppure rinominare i registri nel file iom328pb.h? (che però e sotto copyright e non ridistribuibile)

astrobeed

Nel frattempo mi sono inventato una "paraculata" per compilare gli sketch di Arduino col 328PB senza dover modificare nulla nel IDE :D
La ricetta prevede Atmel Studio 7 senza il plugin visual micro, questa release di Atmel Studio prevede nativamente l'import degli sketch di Arduino senza bisogno di installare nulla, basta andare in File->New->Project  e viene aperta una finestra di selezione tipo progetto tra cui c'è anche la voce "create project from Arduino Sketch", selezionate questa, lo sketch da importare e la directory dove si trova l'IDE di Arduino, gli serve per importare i core e le librerie.
Fatto quanto sopra basta andare nelle proprietà del progetto e cambiare il micro in 328PB, invece del 328P, ed ecco che il progetto viene compilato senza problemi per il 328PB, si può caricare tramite mEDBG e, sorpresa, funziona anche il debug tramite mEDBG se compilato in modo debug :)
Ovviamente senza un core specifico manca il supporto per le periferiche aggiuntive e i GPIO in più, però questo non è un reale problema perché basta crearsi una lib aggiuntiva di supporto, con copia incolla dal core del 328 cambiando come serve registri e nomi, ed ecco il supporto completo al 328PB. :)
Scientia potentia est

astrobeed

La nuova domanda è: cambiare i nomi dei registri nel core di Arduino con dei #ifdef e #else oppure rinominare i registri nel file iom328pb.h?
Perché devi cambiarli ?
Scientia potentia est

PaoloP

Perchè il core dell'IDE cerca il registro, ad esempio SPCR della SPI, e quelli di Atmel l'ho hanno rinominato SPCR1.
E così per tutti i registri interni.
Se provi a compilare sketch per la I2C, per lo SPI o altre periferiche...va in errore.

testato

#251
Feb 26, 2016, 06:25 pm Last Edit: Feb 26, 2016, 06:27 pm by Testato
Si atmel7 importa direttamente sketch, pero perdi la compatibilità diretta con ide.
Inoltre  n on importa le librerie, le si deve manualmente gestire
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed

Si atmel7 importa direttamente sketch, pero perdi la compatibilità diretta con ide.
Inoltre  n on importa le librerie, le si deve manualmente gestire
Nella prova che ho appena fatto mi ha importato anche le librerie aggiuntive, oltre a quelle del core.
Scientia potentia est

testato

Scusa intendo le librerie terze parti.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed

Scusa intendo le librerie terze parti.
Io sto parlando di quelle, nel dubbio ho provato adesso ad importare un mio progetto per Atmega2560, che gira su una board che ho progettato io, non su Arduino, dove uso svariate librerie di terze parti e librerie personali, tutte poste nelle cartella lib dentro lo sketchbook, ha importato in automatico tutto senza problemi, ho compilato, caricato il codice sulla scheda e funziona perfettamente.
Scientia potentia est

Go Up