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

Atmega ISP

Started by almamater, 27 de June de 2015, 10:50

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

almamater

Desde ontem que ando a tentar gravar um ATMega168\328 através de 1 arduino, não tenhno nenhum programador AVR.

Tenho sempre erro, já testei usar como Master um Arduino normal, outro original (UNO), como Slave um Atmega168, ou um 368, ou mesmo até o UNO.

O Master com boards normais meto uma resistência de 120R 1/2W entre o Reset e o 5v (tb já testei com um cap 10uF),  com o UNO meto tb o CAP mas tenho sempre erros...:

arduino avrdude: verification error, first mismatch at byte 0x0100 0x83 != 0x80
ou
avrdude: Yikes! Invalid device signature.
ou
avrdude: stk500_getsync(): not in sync: resp=0x00

A board está corretamente seleccionada no IDE, um dos chips por acaso era 'virgem' e supostamente trazia o Bootloader mas não.., fiz o Burn Bootloader e correu bem e depois para fazer o ISP já não dá na mesma.. os mesmos erros. Alguém costuma usar um Arduino para fszer isto? costuma resultar?  Já não sei o que raio posso fazer..

O meu objectivo era gravar um Atmega168 através de um Arduino com o objectivo de fazr upload de um .hex, mas se não consigo efetuar esta comunicação não dá..



jm_araujo

Se não ocupar até ao bootloader, podes carregar um hex diretamente no Arduino com o xloader.

senso

O signature mismatch tipicamente indica problemas de ligações, tipicamente MISO e MOSI cruzados.

Pergunta, os chips vieram de onde?
Ebay?
Podes ter ai chips queimados, ou semi-queimados, ou um core semi-compativel com atmega, sei que havia pelo menos a fazer uma cópia dos atmega328p na china que eram praticamente compativeis, mas não na totalidade..

Se não tiveres 30 ou 40€ para comprar um Avr ISP original, compra um USBASP, custa 1-2€ no eBay, até deves encontrar por cá.
Avr fanboy

Njay

Quote from: almamater on 27 de June de 2015, 10:50
O Master com boards normais meto uma resistência de 120R 1/2W entre o Reset e o 5v
Isso "estraga" tudo, assim ninguém consegue meter o chip em reset (puxar a linha para o GND). Minimo aí uns 10K.

Quote(tb já testei com um cap 10uF),  com o UNO meto tb o CAP mas tenho sempre erros...:
Para quê o cap (como não diseste suponho que é entre o reset e os 5V como a resistência)? Nunca usei nem vi isso.

senso

Quote from: Njay on 27 de June de 2015, 14:48
Quote from: almamater on 27 de June de 2015, 10:50
O Master com boards normais meto uma resistência de 120R 1/2W entre o Reset e o 5v
Isso "estraga" tudo, assim ninguém consegue meter o chip em reset (puxar a linha para o GND). Minimo aí uns 10K.

Quote(tb já testei com um cap 10uF),  com o UNO meto tb o CAP mas tenho sempre erros...:
Para quê o cap (como não diseste suponho que é entre o reset e os 5V como a resistência)? Nunca usei nem vi isso.

A resistência é no Arduino, para quando começa a mandar dados via serial para o atmega para ele fazer de ISP não fazer um auto-reset e saltar para o bootloader.
Avr fanboy

almamater

exacto é isso mesmo, no entanto meti uma de 10k mas o resultado é o mesmo:

Binary sketch size: 1.082 bytes (of a 14.336 byte maximum)
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.


Acho que vou desistir, será que com um programador terei o mesmo problema? Que treta, queria fazer isto já hoje e assim terei de esperar 1 mês..  >:(

Está tudo bem ligado:

MASTER ARDUINO 328: Pino 11 -> Pino11 Atmega168 | Pino 12->Pino12 168 | Pino 13 -> Pino 13 168 | Pino 10 -> Pino 1 168

Não sei se o problema está no IDE, no Chip Master ou no Slave.. já fiz várias tentativas e com outros chips e inclusivé o UNO é mesmo oficial made in italy.. os outros sim são do ebay.





senso

O Miso tem de ligar ao Mosi do outro chip e o Mosi ao Miso..
MISO = Master In Slave Out
MOSI = Master Out Slave In
Avr fanboy

almamater

Quote from: senso on 27 de June de 2015, 15:47
O Miso tem de ligar ao Mosi do outro chip e o Mosi ao Miso..
MISO = Master In Slave Out
MOSI = Master Out Slave In

Tem? De acordo com isto não:



Mas tb já fiz isso e deu erro à mesma..

Binary sketch size: 1.082 bytes (of a 14.336 byte maximum)
avrdude: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

Njay

#8
Esse ATmega é virgem? É que depois de programares uma vez "para arduino", ele passa a precisar sempre do cristal e condensadores no cristal.

Os cabos fazem bons contactos? Também não podem ser muito compridos (20cm máximo dos máximos, < 15cm melhor, mas qto mais curtos menor a probabilidade de problemas).

Sendo um chip virgem tb podes ter que reduzir a velocidade de programação, não sei que sw tás a usar como programador mas deve ter alguma opção para isso.

almamater

Os cabos são aqueles de ligações para breadboard, não são muito grandes mas posso testar com outros mesmo pequenos.
O Atmega já foi programado várias vezes no Arduino, já testei agora na breadboard e sem cristal mas tb já o liguei noutro arduino e mesmo assim nada..

Vou testar isso dos cabos.. 

almamater

Com cabos pequenos o erro passa a ser:

Binary sketch size: 1.082 bytes (of a 30.720 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00


Neste momento estou a testar o Master o UNO oficial e o Slave um 328 também com o bootloader UNO.

Njay

#11
Se já o programaste 1 vez então tens que usar *sempre* o cristal e respectivos condensadores. Não vai funcionar sem eles.

O que se passa é que, mesmo em modo de programação, o AVR tem que ter clock. Um AVR virgem vem configurado (nos "fuses") para usar o clock RC interno e portanto é sempre programável pois tem um clock, mas quando programas o bootloader do arduino ele muda a configuração (fuses) para usar cristal externo, e a partir daí ele tem sempre que ter um cristal para poder ter clock e poder ser programado.

almamater

Bom, quanto a programar o 168 ou 328 com 1 Arduino não consegui, montes de erros e não saía dali. Como neste caso tinha o .hex optei pela sugestão do  jm_araujo e o XLoader funcionou na perfeição.

Quanto a comprar 1 programador AVR se calhar vou mandar vir um, mas é coisa que não devo usar todos os dias, por isso um USBASP deve chegar.

Já agora, o objectivo disto era ligar um GLD 128x64 via Serial, tenho de usar o ATMega168 na receção dos comandos e com o Firmware, depois é só enviar via serial o pretendido com outro micro.

Isto veio no seguimento de ter visto a placa SparkFun LCD Backpack, algo cara, pensei em pegar nos ficheiros Eagle e comprar os componentes, mas tb saía caro e estava difícil de arranjar alguns. Por isso adaptei o esquema para o meu LCD e para o ATMgea168 DIP em vez do SMD:

https://youtu.be/VXa4VE_x8U0