Skip to content


TTL to RS232 adaptor Explained

Main-Shifter-InUseHow to build a simple TTL to RS232 adaptor for your microcontroller projects. You should be able to scrounge all the parts you need or buy them at your local Radio Shack. In this article I explain how the adaptor works and provide many links to more information you need to know as a microcontroller hobbyist. This article should be very helpful to those that receive the free Arduino compatible kit offered by uC hobby as part of the Arduino Microcontroller kit giveaway.

Just about every microcontroller available today includes at lest one UART or serial port. Serial ports are the most common way to communicate with a uC or other devices such as GPS receivers. The most common interface type is RS232, only a simple conversion from the logic level signals of the uC serial RX and TX pins is required to work with RS232.

RS232 101
For a detailed understanding of RS232 and serial interfacing in general, go to Beyond Logic, the mother load for interfacing information. From this point forward I will assume you know enough about serial communications and will focus on the why and how for the TTL to RS232 adaptor.

The easiest way to make an RS232 interface is with an interface IC, the MAX232 for example. There are a great number of different dedicated chips available with cost ranging in the $1-$3 range. You simply add a few capacitors and you have a reliable RS232 interface. For hobby work you can buy a versatile RS232 adaptor from SparkFun for about $7 as a kit. The picture shows the kit parts and the assembled adaptor. I highly recommend this kit if you want to solve this problem quickly and at little cost.

SparkFunKit

The basic problem we have to solve is that the uC UART is a logic level device and RS232 is not. To send data over RS232 the voltages need to be about +/-10V while the output at the uC will be 0-5V or 0-3.3V. To see a zero signal the receiving RS232 device needs to see a negative voltage. We also need to invert the phase of our logic signal so that a 1 (5V) is converted to the negative voltage (-10).

Typically the threshold for 1 vs. 0 in the RS232 receiver is slightly above 0V we can get away with using less then +/- 10V. +/-5V should be sufficient for almost any devices. We usually have +5V available in our electronics projects but the negative voltage is a problem.

After doing a quick search on the net I found that many TTL to RS232 adaptors use a common two transistor circuit. I have recreated the schematic for this circuit and will explain briefly how it works below. This is the circuit used in the recommended SparkFun kit.

This is basically the same schematic provided by SparkFun with some re-arranging to make it easier to explain. Each major section is enclosed in a dotted line with a name for that region. Each of these regions is explained below.

PC RS232
This shows the DB9 connector which would connect to your PC. The PC has a male connector so you would need a female if you built this circuit with an integrated cable. I recommend a DB9 female connector so that a straight through serial cable could be used. While there are many other signals available on the serial port we are only concerned with Ground, RX, and TX. Ground is the signal reference against which all other signals are measured. RX is the serial data input to the PC. The voltage levels here should be switching between +/-10V. We will get away with -10 and +5 for this circuit.

Neg Supply
This is the tricky part of the adaptor. The major problem is getting a negative supply to feed back to the RX input. This circuit steals that negative voltage. The diode D1 is arranged so that the negative voltage output by the PC is used to charge the capacitor C1. Note that C1′s + input is connected to ground. C1 will store up the -10V output by the PC so we can use it to drive the RX input to a negative voltage. D1 is necessary because the TX output will not always be at negative voltage. It will transition to +10 as data is transmitted and this would quickly discharge C1 if the diode did not limit the direction of current flow. With D1 in place, only the negative voltages at the TX pin will be stored.

RS232 to TTL
This is a simple transistor switch which is turned on when the TX output goes positive. Fully explaining how a transistor works is beyond the scope of this short article but I am sure you can learn more on the net. I will say that the NPN transistor, Q2, used here turns on when it’s base pin (on flat symbol side to the left) is pulled up over it’s emitter pin (with the arrow pointing toward the bottom). When the transistor sees the +10V from the TX pin it turns on and pulls down it’s collector (top of the symbol). By pulling down (towards ground, the signal on the emitter), the voltage drop across the 10K resistor is increased so that the TTL RX signal is brought very near ground or 0V. This will be a valid 0 signal to our uC. When the PC RS232 TX voltage goes negative, Q2 will turn off and the 10K resistor R1 will pull the voltage up to VCC (+5V) which will be a valid signal to the uC. Notice that the +10 to -10V RS232 signal is inverted in phase and changed in level (0 to +5V) to the TTL voltages required by the uC. The voltage will not go all the way to 0V at the collector because the transistor will have some voltage drop between it’s collector and ground. But it should go low enough to satisfy the logic low level input requirements of our uC.

TTL to RS232
The second transistor is a PNP type and will turn on when it’s base is below it’s emitter in voltage. This means that when our uC outputs a logic 1 or 5V the transistor will turn off because it’s emitter is connected to VCC (+5). Since the base is not below the emitter (tied to +5) the transistor will turn off. Note the difference in how the transistor is turned on is because one is PNP an the other is NPN. You can tell the type by the direction the emitter arrow is facing. To help me remember I look at the symbol and to see if it’s P-in-P as “in” is the direction the arrow is facing.

Q1 turns on when the uC outputs a logic 0 (0V) on it’s TX pin, because it’s base is lower in voltage then it’s emitter. When the PNP transistor is on it pulls up it’s collector, toward the emitter which is tied to +5. This inverts the uC output and feeds +5V to the PC RS232 input. When the uC outputs a logic 1 (5V) the transistor turns off and the 10K resistor R3 pulls the signal down to the negative voltage built up in the negative supply across C1. The negative voltage signals the PC RS232 and satisfies the negative voltage requirement of the interface.

Status
This optional part of the circuit drives some LED indicators from the logic side of the adaptor. When the uC pins are at logic 0 the LED will light up. As serial data is transferred the LEDs will flash which is a nice debugging aid.TTL2RS232

Flaws in this description.
I have greatly simplified how a transistor works to a general form I use when quickly scanning a design. I am sure to have missed several points that some of the experts will no-doubt point out in the comments. I welcome these comments and hope that any flaws will be discovered. The most likely concern will be that the transistors can not pull the signals to 0V as there will be a required voltage drop between the collector and emitter. You should see the voltage drop at about 0.5V if your transistors are saturated with current from the base. If you have trouble with the interface you should check the low logic voltage levels at Q2. if it’s not 0.5V or less you may need to lower the value of R4 or find a better transistor. This will not be an issue if you use the recommend SparkFun kit.

Modern Device Company Arduino Compatible kit.
The Arduino Compatible kit from Modern Device Company does not have a standard serial port interface so connecting it to your development PC or other devices may require the adaptor described above. New PCs are not including the old RS232 interface and if your PC does not have this interface you will need to use USB. You could purchase a USB to RS232 serial device which would be a versatile solution that would allow you to interface any RS232 device to your PC or you could purchase a USB to TTL serial interface. The Modern Device Company Arduino Compatible kit has a header designed to mate with the USB to TTL adaptor available from their site or from Mouser Electronics for about $20. You will be able to use this adaptor on any of your future hobby projects so it is a good option to consider.

Scrounging
All the parts you need are probably sitting in electronics devices you could scrounge. You don’t have to have 2N3906 or 2N3904 transistors to make this circuit work. These transistor parts are very common so it’s possible that you will find exactly these devices. Look for the small black (T0-92) packages in electronics scrap and remove them. You will need a PNP and a NPN signal transistor. Many Digital Multi-Meters (DVM) have a built in transistor checker you can use. Try and find transistors that check out with a beta of at least 100. I hope to do an article about testing scrounged transistors soon. Maybe someone will do this article to receive a free Arduino kit.

The other parts such as a diode and LEDs should also be very easy to find. The resistors could be more difficult. You will no doubt find plenty of them but they may not have leeds long enough to work with. The best solution here my be to buy a resistor kit. I recomend a kit from All Electronics. If you know of a better kit please let us know in the comments.

If you find this article useful please comment. I would like to do many more articles like this one but do not know if the uC Hobby audience is interested. Also if you have some related information please let us know with a comment.

Posted in Development Tools, Discovering, Electronics Links, Hacks, Microcontroller, Parts, Projects, Scrounging Parts, Workshop Tools.


22 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Wim Van Gool says

    Very well explained, but I prefer to use the MAX232 or MAX3221, they’re easier to embed in a micro controller board.
    The MAX232 is a made in DIP casing ( which it just like a regular IC ) while the MAX3221 is a Surface Mount Device.
    Since most micro controllers now-a-days have a SMD footprint I prefer to use the MAX3221. All you need besides the MAXIM chip are 4 capacitors ranging between 100nF to 1µF ( I tend to use 100nF capacitors since I’ve got a bunch of them laying around ).
    And if you wondered whether or not we would like to see more of such articles : hell yeah!

  2. Nick Chernyy says

    Excellent article. I think it is great that you went over the actual transistor use. I would agree with Win Van Gool and suggest that a MAX3221 or MAX3222 is uses instead of a standard MAX232 (providing they are available). My reasoning is that you might as well make a dual level RS-232 to TTL converter that can be powered from and operate at any logic voltage from 3.0V to 5.0V. This way you have only one device to laying around to interface many devices.

  3. dfowler says

    Thank you Wim and Nick.

    I am glad you found the article informative and I will try to have more like this in the future.

    I agree that the MAX chips are the right way to go when developing. I choose the two transistor circuit only because it would be easy to build with scrounged parts and also because the low cost adaptors ($7) were using it. It seems likely that many hobbyist would chose this circuit for experiments because of the low cost and easy to get parts.

  4. Saron Marcociz says

    http://en.wikibooks.org/wiki/Programming:Serial_Data_Communications

    might be of interest to those who’d like some more information about RS232.

  5. dfowler says

    Saron,

    Very good link Saron. I really like the initative to promote an OSI type model for serial comunicaitons. I have done a great number of embedded projects that could have benifited from this reasoning in the early stages. I will have to read more from this wikibook.

  6. Rich says

    Nice! I generally use a MAX232(ish) for 2 way communication, but I needed a quick & dirty way to send RS232 data one-way from a micro using on hand transistors. Thanks.

  7. Carlos Pena says

    Hello,

    Presently I have built the circuit above but lack the transistors. However, in place of the PNP I used a 2N2909 and NPN a 2N2222 since I was not able to find the others. The circuit didn’t work, converting RS232 to USB. I would like to get this circuit to work if possible instead of using the FT232 IC from FTDI. Please help!!

    Regards,

    Carlos Pena

  8. Tjark says

    You can also buy an RS232 to TTL converter with a real level shifter (ICL3221) from http://www.tildesign.nl/rs232_ttl_converter-20107101P2N

  9. Krowney says

    Just trying to clarify something…so with this converter is it basically straightforward to just hook up Arduino pins 0 and 1 to the converter, and then you are speaking RS-232 out the other end? Seems too easy. Can I buy a clue please? :)

  10. dfowler says

    Krowney,

    Yes sortof. The converter steals it’s power and may not exactly match the RS232 specifications but it will work as in interface to your RS232 port from a uC.

  11. BrandonU says

    I just put together a quick USB to TTL how-to for the Arduino if anyone who wants to go that route.
    http://brandonselectronic.googlepages.com/usbtottl

  12. Charles says

    Did you flip the TX and RX pins on the TTL side?
    The Sparkfun schematic has the base of the 3906 connecting to a RX through a 10K resistor, whereas, you schematic connects it to TX? Am I missing something?

  13. dfowler says

    Charles,

    The TX pin on the TTL side is an output from the device which needs to be converted. The output should be tied to the base as shown.

    I think the problem stems from the use of TX and RX. When a pin is labeled “TX” is that where the transmiter ties to drive the output signal or is that the TX signal from the external device that should be tied to the receiving input?

    Does anyone know of a real standard that solves this problem. I have put arrows or included “Out” and “In” in the names to help make this clearer, IE “TX_Out” but even that could be confused.

    I always name the signal from the described devices standpoint. TX would be the TX output of the device drawn in the schematic. But it seems that in this case I failed to follow my own convention.

  14. WD5GNR says

    Also have a look at http://www.awce.com/rs1.htm if you want a ready to go solution with handshaking lines.

  15. Phil says

    Nice article. I have found this board – a TTL to RS232 module with buit in PSU available in UK
    from http://www.tronisoft.com/4201.php

  16. Peter says

    What is the maximum baoud rate that you can achieve using your converter?

  17. dfowler says

    Peter,

    I dont present a specifc converter here. The max limit would be dependent on the load and the length and type of cable used. I expect that any of these circuits would work fine for cases where the baud rate is not very high, say 115KBS.

  18. Tim_in_ATX says

    Thanks, for the circuit it was just what this noob needed.
    I think either the 3904 is backwards or I am.
    I first built this circuit with 4401 and 4403 transistors and it didnt work. Then I added a negative supply to the circuit and reversed the transistor and it works. I buit my neg supply with a 555 cap charging circuit and a zener diode. After all that fun it works perfect, although I still dont understand why the 4401 and 4403 didnt work. They did function @ slow speed when tested with a Vmeter and jumpers, but not on a rs232. The 4401 and 4403 should be operating saturated and the data sheets say they are good to 200 MHz.
    Thanks again for the circuit. : )

  19. t1000x says

    i saw a project from a website;www.weavefuture.com. I studied all the details, pictures, informations and already downloaded all the softwares needed from the site. I started to gather the materials to test the project, but its only a local parts I got. A PC, a coin selector HI-06cs, a timer circuit using ATMEL 89C51 which is really different from WEAVE FUTURE cos it doesnt have an RS232 connector terminal. I just assumed that pin 10 (RXD) and pin 11(TXD) of 89C51 were directly connected to pin2 and pin3 of RS232 terminal. So i got an old SERIAL MOUSE (RS232), cut its wire, and configure the color wirings according to its pin # connection. then i connect it to pin 10 and 11 of 89C51 in accordance to pin terminal of RS232. I followed the instruction in WEAVEFUTURE on how to install the software, but when i test my project, i was upset The software was not responding, but my timer counts. I assumed that my idea in this project was missing something like additional circuits or programs.
    And now, im asking all of you goodhearted people to share me some info or tips that would might be helpful for me in accomplishing this project.

  20. Manish Meshram says

    it is very nice , i generally used serial communication in my design , it is too difficult for pcb routing ,and it is not cost effective with 232 chip even it required 3-4 capacitor .

    thank you , for the design , i hope i will save silicon chips through this design from my next design !

  21. Jeff says

    I dont know how old this thread is but i am sure glad you put this together. I would just like to say that the circuit did not work as it is shown. After about 30 hours building and rebuilding i found what works for me. I looked over the max232a chip schematic and wounderd why they tied 4,6 and 8 togather low and behold, pin 2 did not need to be connected at all , rather tie pin 4 6 and 8 up to a single lead and insert on the collector of the pnp transistor. this fix on my p1110 dell 21 ” monitor i got out of the trash cost me zipp nothing. you can get the parts out of an old radio. again thank you very much for taking the time to build this site.

  22. Daniel says

    If you need a pre built RS232 to TTL device or can’t get the goods shown, then an alternative is available. See Tronisoft
    for more info. They do a few different versions of RS232 to TTL devices including one where you can power it via a 9V Battery!

    The only problem is that it does not show how much it costs for worldwide delivery but if your in the UK or Europe then your fine!

    I’ve copied the links from their website for you guys if it helps!

    The whole selection
    RS232 to TTL level converters

    Kit Version!
    RS232 to TTL (5V Signal) Converter Kit

    The one I was talking about! powered via a battery.
    RS232 to TTL Level Converter (5V Signal) with PSU

    Dan