Go Down

Topic: Programando um atmega8 novo (Read 2 times) previous topic - next topic

Porcao

May 31, 2008, 09:03 pm Last Edit: May 31, 2008, 09:12 pm by Porcao Reason: 1
Estou com o meu programa rodando legal no Severino. Agora eu tirei o atmega8 que veio com ele, coloquei um novo e gravei o programa via ICSP usando a porta paralela.
Aparentemente ocorreu tudo bem porque o display foi inicializado e exibiu os textos corretamente. Mas  não está lendo nenhum dos pinos de interrupção. Pinos 2 e 3.
Sabem o que pode ser? Fusiveis talvez?
Também procurei por um meio de ler e alterar os fusiveis via porta paralela e o ICSP mas não enontrei. Não existe mesmo?
[]s
Artur Porcão

Porcao

Acho que achei alguma coisa, podem me confirmar se o caminho é esse?
Achei essa calculadora aqui.

E dentro do diretorio do arduino-0011 um arquivo chamado boards.txt com algumas definições, no caso do atmega8 são essas:
atmega8.name=Arduino NG or older w/ ATmega8

atmega8.upload.protocol=stk500
atmega8.upload.maximum_size=7168
atmega8.upload.speed=19200

atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F

atmega8.build.mcu=atmega8
atmega8.build.f_cpu=16000000L
atmega8.build.core=arduino

O resultado do que eu obter na calculadora eu devo colocar nestas linhas certo?
atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca

Agora uma duvida, se esses fuses estão sendo gravados no chip que veio no Severino, eles também nao deveriam ser gravados no meu novo chip? Ele nao deveria ser um clone do anterior?
Não estou conseguindo entender onde é que estou errando  :(
Artur Porcão

Adilson Akashi

Teoricamente, todas as informações que eram gravadas no CI original, deveriam ser gravadas neste novo também, mesmo sem bootloader. A única diferença é que seu chip original já teve o bootloader gravado uma vez, mas isto não deveria fazer diferença, pois ao usar o ICSP para carregar programas sem bootloader (inclusive com as informações necessárias para as interrupções), o bootloader deveria ser apagado.
Agora, como está tendo este problema, o que poderia testar, é:
- gravar o bootloader (NG or older w/ Atmega8) no chip novo, via ICSP;
- e depois gravar programas via ICSP neste mesmo CI.

se funcionar, avise, pois pode indicar que alguma informação gravada com o bootloader esteja persistindo mesmo após tendo um programa escrito por cima, e sendo necessária para as interrupções funcionarem corretamente.
PCB Designer

Porcao

Olha eu me respondendo de novo  ;)

A primeira coisa que fiz foi baixar uma versão nova do avrdude:
[glow]sudo apt-get install gcc-avr avr-libc avrdude[/glow]

Maravilha esse apt-get  ;)

Depois tive que fuçar um pouco para descobrir o comando certo. Este aqui, por exemplo, liga os fuse bit da forma que eu preciso:
[glow]avrdude -p m8 -c dapa -U hfuse:w:0xc4:m -U lfuse:w:0xca:m[/glow]

Achei interessante que ele não apagou o programa da memória, realmente só fez o que eu pedi hehehe.
Nem um segundo depois meu chip novo já estava rodando da forma que eu esperava.

Agora posso gravar os programas pelo ambiente normal do arduino-001 que ele não altera os fuse bit. Bom, na minha opinião deveria existir algum lugar onde eu pudesse marcar que quero que sejam gravados, mas não achei nada parecido.
Agora vou colcoar no comando o upload do programa .HEX. Alias, sketch é o nome certo né?
[]s
Artur Porcão

Adilson Akashi

#4
Jun 01, 2008, 12:53 am Last Edit: Jun 01, 2008, 12:55 am by adilson Reason: 1
Que bom que funcionou.
Acho que os fuse bits não são alterados, mesmo ao carregar os sketches depois (sim, é esse mesmo o nome).
[edit]Os fuse bits no CI original foram gravados porque, como disse, gravei o bootloader para testar se estava ok. No CI novo você precisou configurar (que bom que manja), mas para um leigo, acho que funcionaria gravar o bootloader como falei.[/edit]

E acho que nem precisava baixar o avrdude, pois em todos os diretórios dos IDEs Arduino, você encontra uma versão dele. (em ...\hardware\tools\avr\bin\)
E com os comandos avrdude (como sua linha de comando) podem ser usados até mesmo para carregar os sketches, sem precisar abrir o IDE.
Por exemplo (o sketch "blink"), assim:
avrdude -Cc:\arduino-0010-win\arduino-0010\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pm8 -cdapa -b115200 -D -Uflash:w:c:\arduino-0010-win\arduino-0010\examples\Digital\Blink\applet\Blink.hex:i
PCB Designer

Porcao

E achei o executavel mas sei la porque nao funcionava. Mas sem erro com linux.
apt-get install pra instalar e apt-get remove para remover, boi baba bico e sem deixar nenhum arquivo morto igual naquele sistema operacional pago  ;)

Há, já vi esse lance de usar ele para subir os sketch. Eu inclusive montei uma linha para subir somente na eeprom. Assim consigo queimar todos os chips com um programa em comum e em cada um deles um arquivo de definicao exclusivo. Estou fazendo assim:
[glow]avrdude -p m8 -c dapa -U eeprom:w:"senha.hex"[/glow]

Ainda nao testei mas acho que a linha vai ficar assim para subir uma definicao e sketch:
[glow]avrdude -p m8 -c dapa -U eeprom:w:"senha001.hex" flash:w:"programa.hex"[/glow]

[]s
Artur Porcão

Go Up