• Welcome to LusoRobótica - Robótica em Português.
 

Assembly num Arduino UNO

Started by jOrGe.mRNh, 12 de April de 2014, 19:41

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

jOrGe.mRNh

Boas pessoal,

Preciso da vossa ajuda. Tenho um Arduino Uno mas nas aulas usamos umas boards atmega controller com um Atmega128 em vez do 328 do uno. Lá usamos o avr studio 4 para gerar o ficheiro .hex e depois fazermos upload do mesmo para o atmega com a ajuda do ponyprog2000. COmo posso fazer no uno para colocar os programas que faço em assembly para a outra board?

Obrigado pela ajuda,

Cumprimentos,
Jorge

senso

Penso que o ponyprog não sabe falar com o bootloader do arduino, se não, usas avrdude, e usas o avrstudio 4 á mesma, simplesmente no projecto metes atmega238p em vez de atmega128, se bem que eu acho isso uma má ideia, os micros são diferentes, estás sujeito a não puder fazer/testar certas coisas, o instruction set é igual entre os dois, os periféricos, depende..

EDIT:
A não ser que programes o bootloader antigo de 2K que suportava o protocolo STKv2.
Avr fanboy

jOrGe.mRNh

Se coloca-se o bootloader antigo que vantagem teria para mim neste caso?
Quanto ao AVR Dude, também há para windows?

Ou seja, basicamente preciso de uma maneira de carregar ficheiros .hex para o arduino, preferencialmente trabalhar mesmo com o uP sem softwares arduino e assim.

PS: O Uno usa o atmega328 penso eu.

senso

Atmega328p, está escrito no chip, é só olhares para ele.
O avrdude está numa pasta do ide do arduino, e dado que o arduino já tem installer, abre a linha de comandos do windows e escreve avrdude, quase de certeza que está instalado, se não, terás de abrir a linha de comandos e navegar até onde tens o ide do arduino instalado para poderes usar o avrdude.
Avr fanboy

dropes

O Avrdude está incluído em muitos programas que lidam com os micros AVR, já o AVRstudio precisa de uma plataforma apropriada para se comunicar com o micro, por isso é que se recorre a um programa externo e enviar o .hex assim como alterar os fusebits e afins.

Recomendaria o AVR Burn-O-Mat + adaptador USB-ISP para ligar ao ICSP do arduino, o conversor USB presente no hardware do arduino não serve para isso, é apenas para comunicação série.
O adaptador USB-ISP é barato.

obs: o ponyprog2000 não suporta o micro Atmega328

jOrGe.mRNh

Encontrei o .exe do avrdude mas mal abro, ele fecha-se.
O pessoal nas aulas acho que passa programas em assembly para o arduino sem usar recorrer a programmers.
Não há nenhuma forma de fazer isso sem recorrer a hardware?

senso

Re-lê o que eu escrevi, mas desta vez com atenção!
Primeiro abres a linha de comandos, carregas no botão do windows, ou na barra iniciar e escreves cmd.exe e carregas enter, e vai-te aparecer a linha de comandos, cd e dir até dares com a pasta do avrdude, escreves avrdude e ele "abre" na linha de comandos.

Depende do que chamas hardware externo, o arduino trás um bootloader serial de fábrica, logo é só ligar o cabo usb e o avrdude fala com o bootloader via serial(porta COM emulada sob USB-CDC), não é preciso nenhum hardware extra a não ser o próprio arduino.

Sim, o avrdude tambem vem incluido tanto na antiga toolchain que era chamada de WinAvr e que vinha juntamente com o AvrStudio 4, e é tambem o que o Arduino usa, dai aquilo usar uma versão tão antiga do compilador.
O AvrStudio 6 continua a ter uma toolchain, simplesmente mudou de nome(não é só bem isso, mas para efeitos de utilizador final o efeito é o mesmo), e continua a estar disponivel para download para quem quiser usar um qualquer outro ide e makefiles.
Avr fanboy

jOrGe.mRNh

Ah, assim já lá consegui chegar. Ou seja o avrdude permite-me passar .hex ou .asm para o arduino?
Se não for pedir muito, podes-me explicar assim por alto como usar as opções? Não vi assim nenhuma muito óbvia de como transferir o programa hehehe.

senso

No meu tutorial sobre avr-gcc que está aqui no fórum, na primeira página tem lá uma pequena explicação de como usar o avrdude com um arduino.
Avr fanboy

dropes

Quote from: jOrGe.mRNh on 14 de April de 2014, 14:31
Ah, assim já lá consegui chegar. Ou seja o avrdude permite-me passar .hex ou .asm para o arduino?

O avrdude é o programa que envia o ficheiro .hex (ou .bin) para o micro em questão através de linhas de comando, essas linhas de comando são dadas não manualmente (embora seja possível) mas por um programas mais "User-friendly" como o "AVR Burn-O-Mat" que tinha referido.

.asm é uma extensão para listagens de código em assembler, ao ser compilado passa para .hex e não pode ser enviado antes disso.

jOrGe.mRNh

Vou ver se amanhã arranjo algum tempo para testar.
O meu muito obrigado ao dropes e ao senso pela disponibilidade :)

Njay

O resultado do compilador ou do assemblador são ficheiros "objecto" (extensão .o).
Depois o linker junta os vários ficheiros objecto, adiciona algum código de inicialização (se for caso disso) e gera um .ELF, que é um ficheiro com várias "secções" e muita "meta-informação" como informação de debug. A partir daí o utilitário objcopy (avr-objcopy no caso do winavr) é usado para extrair o conteúdo de secções do .ELF para um novo formato; neste caso, ele é usado para extrair as secções relevantes do programa para um .HEX (um formato de texto criado pela Intel e ainda muito usado por programadores de microcontroladores) ou um .BIN (que é apenas e só o código máquina puro, os bytes tal-e-qual como devem ser gravados na flash do micro).
Na parte inicial deste tutorial também faço uso do avrdude para gravar:
http://embeddeddreams.com/users/njay/Micro%20Tutorial%20AVR%20-%20Njay.pdf

jOrGe.mRNh

Mais uma vez obrigado a todos.

À conversa com um eng. falou-me do programa Xloader e é realmente do amis simples que pode haver e cumpre a 100% a função que eu pretendia sem recurso a mais hardware ou outros bootloaders.

Njay

Deves poder fazer o mesmo com o avrdude, só muda o nome do parâmetro "programador" a usar.

senso

Está tudo explicado(e em Português!) no meu tutorial aqui no fórum, é só pesquisar que dá logo com o tópico, não é preciso nenhuns programas, e saber usar uma linha de comandos é essencial(digo eu)..
Avr fanboy