Hola gente, estoy hace semanas con un problema que no le encuentro explicacion.
Resulta que compré un Sparkfun jpeg trigger para manejar una cámara, pero la cámara que tengo no es compatible con el trigger, asique voy a usar la plaqueta para otra cosa. Para eso, me propuse instalar el bootloader de arduino en su atmega328p (nótese la p) para poder subirle programas mas facilmente con el IDE de arduino.
Aquí el esquema del trigger.
Aqui es donde viene el problema: al momento de quemar el bootloader en el atmega328p , obtengo un mensaje de error:
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Estoy usando un arduino duemilanove328 como programador (Arduino as ISP) segun éstas indicaciones
Ya lo hice de ésta forma para programar un atmega8 en una breadboard y todo salio bien, pero con el atmega328p del trigger me tira el error anterior.
Los conecto entre si, asi:
arduino as programmer -----> trigger jpeg
digital 10 -----> reset (el reset del socalo ISP que le pusieron al trigger)
digital 11 -----> MOSI (el MOSI del socalo ISP que le pusieron)
digital 12 -----> MISO (el MISO del socalo ISP que le pusieron)
digital 13 -----> SCK (el SCK del socalo ISP que le pusieron)
5v -----> alimentacion power +
grn -----> alimentacion power -
Pinmap del atmega328p (es el mismo micro que usa el arduino pro mini! )
Una vez conectado y con el skeetch "examples/ArduinoISP" quemado en el programmer, selecciono en "tools/boards" todos los que usen atmega328 y despues "tools->burn bootloader-> w arduino as ISP" , y todos me tiran el mismo error.
Un detalle es que el clock del trigger es de 14.7456 Mhz. ¿Puede ser que el bootloader que tengo que quemar, tenga que estár especificamente preparado para éste clock? (tengo que buscar un .hex para 328p a 14.7456 ?? o como lo hago? )
Tambien intente crear mi propio item en la lista de boards, en el boards.txt con los datos que más se ajustan al trigger:
################## boards.txt ###################################
p328p.name=Arduino 3.3v 14.7456 Mhz w/ ATmega328p
p328p.upload.protocol=stk500
p328p.upload.maximum_size=30720
p328p.upload.speed=57600
p328p.bootloader.low_fuses=0xFF
p328p.bootloader.high_fuses=0xDA
p328p.bootloader.extended_fuses=0x05
p328p.bootloader.path=atmega
#p328p.bootloader.file=ATmegaBOOT_168_atmega328.hex
p328p.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
#probe los dos .hex
p328p.bootloader.unlock_bits=0x3F
p328p.bootloader.lock_bits=0x0F
p328p.build.mcu=atmega328p
p328p.build.f_cpu=147456000L
p328p.build.core=arduino
pero me tira el mismo error.
Tambien intente hacerlo desde linea de comandos:
FacuMac:atmega facu$ avrdude -p m328p -P /dev/tty.usbserial-A9005csa -c avrisp -b 19200 -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.04s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
Lo que me asusta es que ahi dice avrdude: Device signature = 0x000000
Osea parece que el atmega328p no me responde nada!
Tambien intente con el -F y asi si, termina de copiar todo perfecto, pero no funciona cuando despues intento subirle un prog desde la IDE de arduino:
FacuMac:atmega facu$ avrdude -p m328p -P /dev/tty.usbserial-A9005csa -c avrisp -b 19200 -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex -F
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.04s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
avrdude: Expected signature for ATMEGA328P is 1E 95 0F
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "ATmegaBOOT_168_atmega328_pro_8MHz.hex"
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex auto detected as Intel Hex
avrdude: writing flash (32652 bytes):
Writing | ################################################## | 100% 2.27s
avrdude: 32652 bytes of flash written
avrdude: verifying flash memory against ATmegaBOOT_168_atmega328_pro_8MHz.hex:
avrdude: load data flash data from input file ATmegaBOOT_168_atmega328_pro_8MHz.hex:
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex auto detected as Intel Hex
avrdude: input file ATmegaBOOT_168_atmega328_pro_8MHz.hex contains 32652 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 37.57s
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0xff != 0x00
avrdude: verification error; content mismatch
avrdude: safemode: Fuses OK
avrdude done. Thank you.
(tambien probe con los .hex de 16Mhz y de 8Mhz)
pero nada...
Que puede estar pasando?
Tengo 5 grandes dudas que quizas el tema viene por ahi y no se la respuesta:
- ¿puede ser que como la board trigger trabaja a 3.3v no se entiendan atravez del ISP ? o no tiene nada que ver el voltaje?
- ¿puede ser que el bootloader.hex que le mando, tenga que ser preparado para 14Mhz ?
- ¿está quemado el atmega328p? por eso responde signature 000000 ?
- lei por ahi que aveces hay que desactivar el auto-reset (poniendo una resistencia de 120 ohms entre reset y 5v). pero ¿ en cual hay que hacerlo ? en el programer o en el target?
- ¿Puede ser que quemé el atmega328p porque el programmer le manda 5v por el ISP, y éste solo trabaja a 3.3v?
que mas puedo probar? que pasa?!!
desde ya muchas gracias!