Gravação de bootloader (arduino uno) e programação em ATMEGA328P-AU?

Galera, como posso gravar o bootloader do Arduino Uno num ATMEGA328P-AU? Eu queria diminuir minhas placas usando o SMD em vez do atmega328 tradicional...

Grande abraço...

Porque nao apenas colocas um header ISP na board e programas directo com um programador ISP.

Sim, concordo com a opinião do HugoPT. Penso que é a melhor forma e penso que assim, nem precisa de ter Bootloader o que também não é mau, porque reduz o tamanho ocupado na memória de código.

É que na realidade, quero continuar tendo os benefícios do arduino, como bibliotecas, "facilidade de programação", entre outros...

Atualmente tenho 10 ATMEGA328P-PU 9 deles comprei virgem e eu mesmo gravei o bootloader.
E tenho 10 ATMEGA328p-AU (todos virgens ainda).

Como eu falei acima, quero continuar com a facilidade de programação usanso as diversas bibliotecas prontas que ja baixei e uso nas minhas placas.

Como posso gravar?

Grande abraço.

Podes usar as bibliotecas sem o bootloader...

Como eu falei acima, quero continuar com a facilidade de programação usanso as diversas bibliotecas prontas que ja baixei e uso nas minhas placas.

Como posso gravar?

Ao usares o metodo que te disse tal como o Bubulindo te disse nao perdes nada em termos de bibliotecas nem o que ja tens feito.Tudo ira funcionar igual apenas o metodo de upload do programa será diferente.Se nao usares este metodo e quiseres continuar a usar o bootloader vais ter de arranjar uma soluçao para teres a porta serie acessivel para poderes enviar o programa.Isso implica ou colocares um ftdi232 na board ou arranjares um externo e apenas deixares os pinos de RX,TX,GND,RTS.
Eu vejo mais vantagens em usares o meu metodo numa board final, ja que nao tens o tempo inicial de arranque que o bootloader apresenta quando o micro sofre reset, nao tens problema de auto-reset, ganhas um pouco na flash em termos de tamanho e é igualmente facil enviar o programa e mais rapido.Se reparares na IDE do arduino indo a Ficheiro tens la a opçao Upload using programmer…

Então galera... Eu teria que adaptar toda a programação que ja tenho, correto? Creio que eu não poderia usar o digitalWrite (13, HIGH) ou o analogRead(A0), por exemplo (ou poderia?)...

Caso eu não puder usar desta forma, eu terei que reaprender a programar e usar as portas digitais, analogicas e PWM...

Outra pergunta... O placa do Arduino Uno pode servir de programador ISP ou terei que comprar um gravador específico pra isto??

Grande abraço.

carlosad1981:
Então galera... Eu teria que adaptar toda a programação que ja tenho, correto? Creio que eu não poderia usar o digitalWrite (13, HIGH) ou o analogRead(A0), por exemplo (ou poderia?)...
(...)

Claro que pode! (a menos que ao desenhar a sua placa coloque alguma outra coisa nestes 2 pinos :slight_smile: )

carlosad1981:
Outra pergunta... O placa do Arduino Uno pode servir de programador ISP ou terei que comprar um gravador específico pra isto??

Se estou a entender bem a sua pergunta: Pode "construir" o seu próprio programador a partir de um Arduino UNO. Penso que já existem vários exemplos desse projectos espalhados pela net (nunca precisei, por isso nunca pesquisei a sério isso, mas penso já ter visto referências a isso)

NOTA: O bootloader serve para poder carregar (load) o programa na altura da inicialização (boot) do micro. É apenas um pequeno programa que fica guardado na memória flash para que esse processo de carga através da porta série seja automático. O ICSP é a forma "normal" que o micro tem de carregar o programa, sendo assim não é preciso esse tal bootloader.

Uno como ISP:

Quer dizer se eu usar o ISP não preciso do bootloader? :slight_smile: :slight_smile:

Tem como "apagar" o bootloader do Atmege328?

Há algum tempo estou usando um ISP deste:

Lago:
Tem como "apagar" o bootloader do Atmege328?

Claro que sim! Ele não nasceu lá :), então tem que dar para apagar.

No entanto, depois de ler por alto isto:

não sei se será fácil. Atenção a esta parte:

The bootloader lives in high flash memory and is protected from being erased by the fuse settings in the chip

Apagar o bootloader é mais facil do que tu pensas.Tudo que precisas de fazer é carregar um programa novo e ele será apagado.

Não é bem isso que aqui diz.

The bootloader lives in high flash memory and is protected from being erased by the fuse settings in the chip

Eu tenho mais experiência com 8051 e PIC que com AVR e Arduino, por isso, pelo menos para já, não posso dar grandes certezas. No entanto, eu diria que não devia ser assim. Devia estar pelo menos numa zona de memória que fosse "pouco provável" ser apagado por outro programa. No entanto, há uma dívida que não consigo deixar de pensar nela e para a qual não tenho a resposta (por não conhecer o código e o funcionamento do sistema). Se é um bootloader, há alguma coisa no inicio do programa que o chama. Uma coisa do género: "aconteceu o reset, faz a inicialização, chama o bottloader, (faz o que tem a fazer, espera por um sinal vindo dá série, ou o que quer que seja), passou o tempo? então volta para a execução normal". Sendo assim, penso que não basta "apagar o bootloader, mas tem também que se apagar a chamada do bootloader (e não estou a perceber como é que isso se consegue). Com microcontroladores PIC (que também não têm bootloader "integrado" (que tem que ser programado como aqui no AVR), fiz isso uma vez, mas o bootloader fazia parte do projecto e embora não tenha sido escrito por mim, eu dizia em que zona da memória esta e como era chamado e onde estava a minha função main, etc. Aqui, como a maior parte do projecto está "escondido", não se tem essa facilidade, por isso não estou a ver como é que esta parte se faz.

O computador inicia e o apontador olha para o inicio da memoria de programa. Ai ou esta o bootloader, ou comeca o programa propriamente dito.

O fuse em questao, referido pelo Hugo e gravado automaticamente pela IDE do Arduino quando se selecciona gravador externo dai ele ter referido que e assim tao facil.

Se estivesses a usar o gravador pela linha de comandos, ai sim terias de mudar o fuse conscientemente para nao guardar o espaco de bootloader.

esse fuse reserva 256,512 ou 1024 palavras de codigo no inicio para escrever la um bootloader, se nao for seleccionado, o programa e logo escrito sobre esse espaco. Creio que o manual tinha uma seccao sobre isso. :confused:

E ai galera, blz?

Então... Eu posso uasr um arduino uno para gravar o programa num ATMEGA328-P-AU (sem bootloader)?

Alguém conhece algum tutorial para gravar a programação feita para arduino num atemega (sem bootloader)?

Para que mesmo serve o bootloader então?

Grande abraço.

Sim.

Existe um tutorial para isso na pagina do Arduino. Breadboard Arduino ou ArduinoISP.

Serve para poderes usar apenas uma placa em vez de uma placa para o projecto e outra para gravacao do codigo.

Se tiveres um Arduino, ligas ao USB e metes la o teu projecto.... sem o bootloader isso e impossivel.

Se tiveres um gravador externo o bootloader torna-se desnecessario... mas ainda assim usar o bootloader e extremamente mais comodo.

bubulindo:
Se tiveres um Arduino, ligas ao USB e metes la o teu projecto.... sem o bootloader isso e impossivel.

Se tiveres um gravador externo o bootloader torna-se desnecessario... mas ainda assim usar o bootloader e extremamente mais comodo.

Então eu volto à minha pergunta original... Como eu gravo o bootloader num ATMEGA328P-AU?

Não tenho o gravador, tenho um Arduino Uno, um Arduino Mega, um Arduino Leonardo e alguns ATMEGA328P-AU (SMD 32 pins) virgens... Tenho como gravar o bootloader no SMD com essas "ferramentas" que tenho?

Grande abraço...

Já foi respondido mais de uma vez neste tópico. Sim, tem. Vai usar outro arduino como ISP, seguindo este tutorial:

Basta ligar os pinos correspondente sem seu atmega.

Carrega o sketch do ISP no Arduino e manda gravar o bootloder.

Aqui tem um vídeo: