I have been trying to make a serial programmer for AVR chips. I have been using this schematic as reference, http://www.elektronika.lt/_sys/storage/2004/05/06/avr_prog.gif.

I made the circuit and have checked that the connections are correct. Here is a picture of it on breadboard

CKT on Breadboard

The problem is it doesn't even get detected in linux.

rick2047@Sophiya:~$ setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
rick2047@Sophiya:~$ dmesg |grep ttyS
[    0.220488] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.221036] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

In window there is a com3 and com1 but cannot connect to com3, it says check your port settings.

I checked the bios and there is only a Serial Port A in the peripherals section. Does that mean I can use only one serial? My monitor is an old CRT which runs on serial cable.

UPDATE The monitor is on VGA. So why does this not work?

rick2047@Sophiya:~$ avrdude -p atmega8 -P /dev/ttyS0 -c ponyser -V -U flash:w:test1.hex 

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude done.  Thank you.
  • \$\begingroup\$ I doubt your monitor runs on serial cable. \$\endgroup\$
    – markrages
    Feb 20, 2011 at 5:58
  • \$\begingroup\$ @markrages See the update \$\endgroup\$
    – Rick_2047
    Feb 20, 2011 at 6:15
  • \$\begingroup\$ That's a VGA plug, not serial. \$\endgroup\$
    – markrages
    Feb 20, 2011 at 6:27
  • \$\begingroup\$ Just opened it and realized how wrong I am. \$\endgroup\$
    – Rick_2047
    Feb 20, 2011 at 6:36
  • 2
    \$\begingroup\$ I do not have access to those things, I do not live in USA or somewhere this can be shiped with reasonable price. AND I WANT TO LEARN ALL THIS STUFF. \$\endgroup\$
    – Rick_2047
    Feb 20, 2011 at 7:48

2 Answers 2


I was recently making a very similar serial programmer too, and had lots of problems with it.

First, check your crystal for the AVR. I can't see much on the photo, but its ground should be directly connected to power supply's ground. I've read that sometimes breadboards can make problems if the ground is connected through them because of impedance. Still, if you're programming a fresh AVR, it's going to be running on its own internal oscillator, if it has one.

Next step is to check if the AVR is getting correct voltage when connected to the programmer.

When you power on insert the AVR, check voltages on each pin and see in the datahseet what that pin is supposed to be. Some AVRs may need multiple ground connections and multiple voltage sources, especially if it has analog to digital converters.

Make sure that all your grounds are at same voltage. That may seem to be obvious, but I forgot to connect GND on my ATmega162 and even without GND, it managed to flash LED while running on internal oscillator.

I agree with starblue about capacitor. Read the datasheet for the AVR you're using and AVR Hardware Design Considerations document. It should provide some more information on proper decoupling.

Next step is to get a program which can tun on and off a pin on the serial port. You should use something like that to check if you have connected the programmer to the port you're attempting to use. Turn on a pin and check voltage on AVR socket. If you're not getting correct voltages, there's something wrong with your setup, so check everything again.

Now that I'm talking about setup, I noticed that there's nothing on Vs+ and Vs- pin of your MAX232. From a datasheet I'm reading, they should be connected to +8.5 V and -8.5 V and have 1 µF decoupling capacitors. On my setup, I connected one side of the capacitor to the pins and the other to +5 V and GND, since I didn't have needed voltages. I read that in a on-line tutorial, so I don't know if it's the best setup, but it works for me.

Do not expect the programmer to be detected by your computer. It doesn't communicate with computer at all! Instead, it just converts pulses which computer sends to what AVR can see. Also, there's no plug and play for most serial devices.

If you're still having problems, you'll need an oscilloscope to see what's happening. I didn't have one, so I took an audio cable, cut off one of its ends, placed a voltage divider there and connected the other end end to microphone input. There are numerous tutorials on the Internet on how to build the probe. Here's the one I used. I used Soundcard Scope to see the what kind of signal I'm getting. There should be a clock signal on the SCK and you should be getting signals on MOSI and MISO too. Reset should give you just a few signals, when the AVR needs to be reset.

  • 1
    \$\begingroup\$ You don't need to connect Vs+ and Vs- (V+ and V- in my data sheet) to anything other than the capacitors indicated in the data sheet and the circuit of the OP. The MAX232 actually generates the higher voltages on these pins, and you can use them if you don't draw too much current (a few mA). \$\endgroup\$
    – starblue
    Feb 20, 2011 at 14:34
  • \$\begingroup\$ @starblue I can't believe that I haven't seen the capacitors there in the schematic! And I checked several times! I definitely shouldn't answer questions when tired... \$\endgroup\$
    – AndrejaKo
    Feb 20, 2011 at 17:24

If you have a parallel port, try the SP12 programmer. I used to use it without any problems, with just three resistors mounted inside a DB-25 shell.

I now use an Atmel Dragon, it's only $50 and you get in-circuit debugging as well programming. It also supports all the AVRs.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.