Recently my Arduino UNO stopped to be recognized by computer (using USB), I tried a few stuffs:
- Changed the Atmega328
- Rewrite bootloader
- Tested the controller on other board
- Measure the connection between a few pins using a multimeter
Nothing worked, so I decided to try to update the atmega8u2 firmware that is responsible to control de USB connection, I found two articles that I used as base:
Updating the Atmega8U2 on an Uno or Mega2560 using DFU e também How to upgrade atmega8u2 firmware
Both of them used solutions that needs to soldering a resistor on the board, but I don't want to solder anything to the board, so I checked next to the atmega8u2 exists the ICSP pins, so I decided to try to burn the bootloader using them. Just to prevent other disaster I removed my atmega328 from board and connected the USB ASP to the ICSP pins. (Remember that the PIN 1 has a number or a little mark near it, mine had a small white circle)
After that, I accessed the dir that contains atmega8u2 hex of Arduino Uno (/arduino/hardware/arduino/firmware), and then I tried to rewrite the bootloader:
sudo avrdude -c usbasp -p m8 -u -U flash:w:UNO-dfu_and_usbserial_combined.hex
It didn't worked because it is a atmega8u2 and I was trying to write it with atmega8 the error was:
avrdude: Yikes! Invalid device signature.
So I did a little more research and I discover that at90usb162 is almost the same, so I decided to take a shot with force (-F) option
sudo avrdude -c usbasp -p usb162 -u -U flash:w:UNO-dfu_and_usbserial_combined.hex -F
I waited it to burn, turn arduino uno off, connected my atmega328 and then turn it on and my USB just showed up on my computer, so now I can program my Arduino UNO using USB again.
PS: Right after the booloader update I tried to Upload a Sketch to atmega328 without sucess, it was out of sync, so I tried to rewrite the bootloader of atmega328, and then everything started to work.