Programming arduino pro mini fails

Hi there!
After my long and very happy relationship with ARM I finally had a need something arduino related. Basically I needed a quick hack for one of my projects and arduino already has a library that solves my issue and would take too long to port.

But that really doesn't matter. So I got myself a few of those cheap arduino pro mini clones floating on ebay and expected it to work in a matter of minutes. But it didn't. Actually it did at first. I uploaded the sketch over serial and everything worked. Then I tried it again a while later and it didn't. I don't remember why, but programming failed.

So I tried to upload the bootloader again using my other arduino duemilanove as ISP. But that failed too. So after messing around with this and that I finally managed to upload a sketch (just a simple blink) to the board again (though avrdude did complain about content mismatch at byte 0, but the sketch worked). And now I can't do it anymore.

This is what I get when I try to upload the sketch using a programmer:

avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25

Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "/Applications/Arduino/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"

User configuration file is "/Users/roli/.avrduderc"

User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/cu.usbserial-A6008clt

Using Programmer : stk500v1

Overriding Baud Rate : 19200

AVR Part : ATmega328P

Chip Erase delay : 9000 us

PAGEL : PD7

BS2 : PC2

RESET disposition : dedicated

RETRY pulse : SCK

serial program mode : yes

parallel program mode : yes

Timeout : 200

StabDelay : 100

CmdexeDelay : 25

SyncLoops : 32

ByteDelay : 0

PollIndex : 3

PollValue : 0x53

Memory Detail :

Block Poll Page Polled

Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff

flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff

lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00

hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00

efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00

lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00

calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00

signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : STK500

Description : Atmel STK500 Version 1.x firmware

Hardware Version: 2

Firmware Version: 1.18

Topcard : Unknown

Vtarget : 0.0 V

Varef : 0.0 V

Oscillator : Off

SCK period : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.04s

avrdude: Device signature = 0x000000 (retrying)

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.

I have no idea what is going on anymore. Does anyone have any ideas? If I understand this correctly avrdude does actually communicate with the chip, but it craps out when checking device signature.

It's not getting anything back when it asks for the signature.

Indicates wiring error, or the chip has been configured to use a clock source that isn't present (ie, telling it to use a crystal but not connecting one).

My guess for why it only worked once originally (no idea what you've done to it now) is that you didn't connect the DTR (or RTS - both work) line of your serial adapter to that last pin of the Pro Mini's 6-pin header - so autoreset didn't work, and that's how it resets the board so the bootloader runs

You are correct in guessing that I didn't connect DTR or RTS lines (because the serial adapter that I am using doesn't have them exposed). I did reset the board manually though. This isn't my first arduino without auto-reset.

I've tried another one of these boards. The whole thing seems interesting.

When I select "upload using programmer" I get the same response from avrdude - the one about wrong device signature. But the sketch seems to be uploaded correctly anyways. I don't know how this is possible or what is going on anymore.

roli:
I've tried another one of these boards. The whole thing seems interesting.

When I select "upload using programmer" I get the same response from avrdude - the one about wrong device signature. But the sketch seems to be uploaded correctly anyways. I don't know how this is possible or what is going on anymore.

Really? That makes absolutely no sense - I suspect you are incorrectly concluding that the sketch was uploaded (it's surprisingly easy to get confused when doing this). If it really did, post the verbose output of the upload process that gave an error yet still uploaded the sketch.

I know it makes absolutely no sense. That's why I find this whole thing so extremely weird.

Problem is that I can't do it anymore apparently. At least not after unplugging it from the computer for the first time.

But I managed to upload the blink sketch at least twice. First time was a standard blink, then it was one with modified delays. The timing was definitely correct.

Now I can't do it anymore. With my most recent attempt I got this (the sketch definitely isn't working right now):

Sketch uses 1,066 bytes (3%) of program storage space. Maximum is 30,720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.
/Applications/Arduino/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -P/dev/cu.usbserial-A6008clt -b19200 -Uflash:w:/var/folders/96/d_b8vx8178l1twdc7zpmv5400000gn/T/buildc196034aeb09a8de322df640fe203bb9.tmp/Blink.ino.hex:i

avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "/Applications/Arduino/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
User configuration file is "/Users/roli/.avrduderc"
User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/cu.usbserial-A6008clt
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x1e950f
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 "/var/folders/96/d_b8vx8178l1twdc7zpmv5400000gn/T/buildc196034aeb09a8de322df640fe203bb9.tmp/Blink.ino.hex"
avrdude: writing flash (1066 bytes):

Writing | ################################################## | 100% 1.44s

avrdude: 1066 bytes of flash written
avrdude: verifying flash memory against /var/folders/96/d_b8vx8178l1twdc7zpmv5400000gn/T/buildc196034aeb09a8de322df640fe203bb9.tmp/Blink.ino.hex:
avrdude: load data flash data from input file /var/folders/96/d_b8vx8178l1twdc7zpmv5400000gn/T/buildc196034aeb09a8de322df640fe203bb9.tmp/Blink.ino.hex:
avrdude: input file /var/folders/96/d_b8vx8178l1twdc7zpmv5400000gn/T/buildc196034aeb09a8de322df640fe203bb9.tmp/Blink.ino.hex contains 1066 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.86s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x00 != 0x0c
avrdude: verification error; content mismatch

avrdude done. Thank you.

It's either this or the standard Invalid device signature. Either the device signature comes out as 0 or as 0x1e2a02.

Finally!
Apparently it didn't like my power source. It was connected to a 3.3V regulated power supply on my projects PCB. Maybe it didn't like the current provided by it or something (it's a lipo powered device with a regulator on it). But the whole thing is designed for a really low power consumption. Anyways... Powering it from Arduino acting as a programmer seems to help. It programmed nicely now - without any errors or anything.

Sadly I still can't seem to program the first board. I need some way to try and restore the bastard to it's health.