Digital Communications by Hank Volpe A Modem Primer -- Part 3 Note: This material is copyrighted 1990 by Hank Volpe. Reprints of this article have appeared in more than 50 newsletters around the country. For more information or comments, please write to; Hank Volpe P.O. Box 43214 Baltimore MD 21236 When last we recessed, we had just finished our sophomore level view of modems, serial ports and computers. Just like college, parts 1 and 2 are now required reading for the rest of this look at modems, so if you missed those two and need points of reference I'd suggest taking a look at what we had discussed earlier. Modem 301 - Advanced Initialization Strings ------------------------------------------- In order for something to be useful, it must be flexible. Without flexibility, a computer, a modem, or a person can become crystallized in time. Time marches on, and leaves the crystallized device or person in the past. A modem can become locked into an older technology overnight simply by the introduction of a new standard. This is an acceptable situation though, because an advancement will always have a drawback. What is not acceptable is to have a modem that is completely compatible with current standards, but is not flexible enough to be used with rolodex programs, BBS programs, and communication programs of any kind. There was a time when only certain programs would work with certain modems. There was also a time when speeds about 1200 bps were thought to be out of the reach of a casual user of modems because of the foreseen restrictive cost factor. Now that high speed communication is both reliable and relatively inexpensive, there is more of a demand than ever to make modems that will stay flexible enough so that a user can get several years of satisfactory service from them. Modem flexibility is primarily seen by the number of user defined parameters that can be selected. These parameters are accessed by the user of initialization strings and S- registers, with initialization strings being the more powerful of the two. Initialization strings conceptually are nothing more than a series of commands that the modem understands. These can be sent at any time that the modem is in the command state ( any time it is not on-line to another modem), however these commands are usually sent "initially" when you load a communication program. Depending on your modem, you can have anywhere from 10 to 100 different commands that you can send. Why so many commands? Answer, to be flexible! Where would you use all of these commands? Answer, who knows! In other words, it depends on the application, the type of modem, the type of computer, and the type of work you are trying to do. For the most part, the command set of your modem can be divided into two categories; connection commands and handshaking commands. Connection commands control the dialing, answering, connecting and disconnecting your modem. Handshaking commands control the flow of data to and from the computer via the Uart. Most modems followed Hayes in their implementation of the basic connection and handshaking commands, however each manufacturer can freely add to this list and extend more features to both the programmer and the user of the modem. These extended command sets vary from modem to modem, which is one of the reason why it can be difficult to write a software package that is guaranteed to work on all brands of modems. The initialization string approach allows a user with a little technical background to guarantee that his modem will work with the software package he purchased. The key words here are a "little technical background". It does not require a lot to pick the correct commands to send to the modem to customize it, once you have a working knowledge of what you are trying to do. The important thing here to grasp is this; an initialization string is a vehicle used in communication programs to guarantee that the program can work with any brand of modem as long as the user installs the correct sequence of commands in the initialization string. There are some commands that are definitely important when it comes to a properly working communication program. The most essential, and also the one that in my opinion is incorrectly implemented in Hayes and compatible modems is the Carrier detect handling. We discussed these in great detail last month. The trap in my opinion is the fact that Hayes and compatible modems ignore the state of the Carrier detect line (which means that your communication program has no way of knowing if it is connected to a remote modem or not. This would give you a permanent ON-LINE indication if you were using Procomm or Qmodem. If you are having that sort of problem, you can send a command (AT &C1) and that problem will go away just like that! Another complaint I have with the Hayes instruction set (and this is more a pet peeve than anything else) is the way call progression is handled. Call progression is a status feature. What it does is send English words to the communication program like RINGING, BUSY, NO CARRIER, VOICE. A communication program can then use these to control how dialing is handled. For example, if your modem detects a busy signal and returns the word BUSY, then your communication program can recycle the call and dial again instead of wasting time monitoring a busy signal. Nice and simple isn't it? So then why isn't this implemented as a standard feature. Instead, you must program your modem to return this very helpful and time-saving information to you. To do this, send the command AT X4 to the modem. Another useful idea to play with involves regulating the volume of your speaker. Isn't it amazing that a $5 radio has a volume control for the speaker but most $300 modems do not? I can understand why internal modems do not have a control, but externals? I'd go so far as to say that an external modem without a volume control should be a punishable crime in most states (of course, that's because I have small children who wake up to the sound of loud carriers). However you can do several things in your initialization string to handle this. AT M controls the way the speaker is used. The default is AT M1 which keeps the speaker on until a connection is made. AT M0 turns off the speaker at all times and AT M3 turns on the speaker at all times. To regulate the volume, you use AT L with AT L1 selecting the lowest level and AT L3 the highest (some manufacturers go up to AT L9, so you might want to experiment). Finally, there are several commands that control the way data flows between the modem and the Uart. There are several handshaking signals that can be used by your modem and your computer. The DTR/DSR pair and the RTS/CTS pair are essential for correct high speed communications. You can program your modem to use these signals in several ways. Hayes modems can be programmed to reset the modem every time the DTR signal is dropped by your computer. Why would you want to use such a feature? Well, there are some poorly written computer programs that quite frankly leave your modem in a mess! They do not clean up properly after you use them, and then when you go to use another communication program, you find out your modem isn't responding properly. For external modem users, turning the modem on and off clears the problem, but what about internal users? AT &D can be used to perform this task. AT &D0 is the default, and the modem does nothing. AT &D1 and AT &D2 will disconnect a call that is in progress if the DTR signal drops (in other words, if you turn off the computer or disconnect the cable while still connected to a BBS, the modem will disconnect on its own. I personally know of one fellow who would have saved a 40 hour long distance phone call if he had used this feature. Seems he was connected to a long distance BBS, and exited his communication program. Since this was an office machine and never turned off, the modem was still connected to the remote BBS. Furthermore, the remote service did not have a "dead-key" feature and kept its connection to the modem up for an entire weekend. When the bill arrived next month, I was summoned to reprogram his modem to use this feature. Granted this does not happen every day, but if it just happens once to you, you will regret not taking a simple precaution. Finally AT &D3 disconnects and resets the modem back to its stored parameters. If you are having problems with intermittent lock-ups of your modem after use by certain programs, you might want to set your modem to use AT &D3, otherwise you have to look for either a program to do this for you, or you have to turn off the modem to clear it. There are many more commands to experiment with, however before you do, make sure you check your user's manual. All of the commands above work on Hayes 2400 compatible modems, (but as you should remember, not all modems are 100% Hayes compatible). Select the most useful one's and place these in your initialization string that you use with your communication program. Modem 302 - Memorization ------------------------- A problem to ponder. What if you wish to set your modem up to work a certain way, however the program you are using does not accept or use initialization strings? There are programs such as Fasthst and Comset that will do the work for you each time you boot your computer up. However, it would make more sense and add a great degree of flexibility if your modem just remembered by itself how you wished it to work. Then all you would need to do is reset it with an ATZ or turn it on and the modem would load up all the parameters you wish to use. Well again, depending on your modem, it might already have that feature installed. This is called non-volatile memory. It's a cross between RAM and ROM. RAM memory is memory that can be changed but is erased whenever you turn off or reboot your computer. ROM is memory that is permanent and stored on a chip and cannot easily be changed. Non-volatile memory is memory that can be changed, but remembers what was placed in it between periods of loss of power. This memory can be held on by a battery or by a charge on a capacitor (an electronic device that stores charges) or it can be an EEROM (a rom that can be reprogrammed by a user under certain conditions). If your modem has this feature, you will be able to send commands to it and store these commands permanently in its memory to be used over and over again. To store these commands, you have to load a communication program and place the modem in the command state (in other words, it is not on-line to another modem). Then you type the commands from the keyboard; ie AT L3 M1 X4 &C1 &D3. When you have entered these commands, you can either add one more command &W or type AT &W from a new line. In any case, the &W command saves this setup, plus the current contents of your S-registers to the modem's memory. You can still change these commands at anytime, however whenever you reset the modem, you will reload these settings you placed in the modem instead of the factory defaults. Some modems have multiple areas of setups for you to use. In this case, you would use AT &W0 or AT &W1 etc to make multiple setups available. The last used setup is the one that is recalled when the modem is reset. What if you goof up? Well, you can always get back to square-one by type AT &F, which reloads the factory default settings. You can then save those for use by typing AT &W. Non-volatile memory is a nice feature, but not all modems have it. If yours does not, you can download several programs that can reset and send initialization strings to your modem at boot-time. Or, you could use any communication program and its initialization string to perform the same task. In any case, check out your modem to see if it has non-volatile memory. It is much easier to store these features in your modem for use by all programs than to use initialization strings. Modem 303 - Less filling or Tastes Great? ----------------------------------------- Every field of human endeavor has its controversy. With modems, the question comes down to internal modems vs. external modems. Which is better? Well, as much as I always say "it depends on the application", in this case I do feel there is a clear cut winner, and that is the external modem. Internal modems are nice because you don't need a serial port or a cable in order to use them. You just find an empty slot in your PC, plug it in, and away you go. External modems require external power supplies, a cable and a serial port in order to work. External modems take up space (some like mine at home are nearly 10 inches deep and 6 inches across). Also, external modems always cost more money than internals because you need a case, lights, switches, power supplies (and don't forget, volume controls). Performance wise, they work the same with no difference at all. So why do I recommend an external modem? For convenience of course! By now you are convinced that the author of this document has a problem, for he just told you all of the reasons why internals are better and then said externals have more convenience. Well, it is true. Externals have front-panel lights to monitor the condition of your modem. Externals can be used with any type of computer (past or future) and shared easily with an A/B switch between computers. Externals do not conflict with any built-in serial ports in your machine because they need to use a built-in serial port in order to work in the first place. Finally, externals are better because there appearance can really impress your non-computer friends and make them believe that your hobby is just short of "star-trek". Recess time ----------- That's about it for this month. Next month, we'll be ready to graduate. Did you realize the similarities between data exchange and making love? Well next time we'll explore the fascinating world of handshaking and transfer protocols and try to tie up any loose ends in our discussion of Modems.