下面潮湿是什么原因引起的| 19时是什么时辰| 罗曼蒂克什么意思| 第一个月怀孕有什么反应| 小肚子胀气是什么原因| 瓠子是什么| 喉咙有痰吃什么药| 女孩第一次来月经需要注意什么| 鸡同鸭讲是什么意思| 急性肠胃炎吃什么食物| 下肢动脉闭塞吃什么药| 别墅是什么意思| 杜甫号什么| 女人气虚吃什么补最快| 怀孕胎盘低有什么影响| 预约转账什么时候到账| 李嘉诚是什么国籍| 里急后重吃什么药| 爱而不得是什么感觉| 甲钴胺片治什么病| 态生两靥之愁中靥指什么| 下面老是痒是什么原因| 猎德有什么好玩的| 官员出狱后靠什么生活| 家里有蜈蚣是什么原因| 软开是什么| gp是什么意思| 女人小便带血是什么原因引起的| 倒挂对身体有什么好处| 关东八大碗都有什么| 水瓜有什么作用和功效| 三头六臂开过什么生肖| 痛风不能吃什么| 1号来月经什么时候是排卵期| 讲义是什么| 宝宝大便有泡沫是什么原因| pb是什么意思| karen是什么意思| 属鼠的守护神是什么菩萨| 过敏去医院挂什么科| 吃饼是什么意思| 什么牌子的氨糖好| 肾功能不全是指什么| baumwolle是什么面料| 爱是什么词| 三伏贴什么时候贴| 黄精能治什么病| 凝血五项是检查什么病| 本科是什么意思| 扶他是什么意思| 什锦是什么水果| 233是什么意思啊| 什么是辟谷| 梦见灵堂是什么预兆| 加拿大的国宝是什么动物| 月桂酸是什么| 吃醋是什么意思| 地藏王菩萨为什么不能拜| 白带发黄用什么药| 川字属于五行属什么| 嘢是什么意思| 平肝潜阳是什么意思| 心跳过快吃什么药| 手足癣用什么药最好| 下夜班是什么意思| 为什么新疆人不吃猪肉| 丈二和尚摸不着头脑是什么意思| sca是什么意思| 传染病八项挂什么科| 昀字五行属什么| 诱因是什么意思| jojo什么意思| 胃发炎吃什么药好得快| 燊读什么| 柠檬泡水喝有什么功效| 坐月子吃什么水果好| 复学需要什么手续| 小孩咳嗽吃什么药| 睡觉为什么会流口水| 失眠吃什么中成药效果最好| 儿童过敏性咳嗽吃什么药| 山竹是什么| 右膝关节退行性变是什么意思| 有缘无份什么意思| 什么鱼适合做酸菜鱼| 为什么呢| 菌血症是什么病| 视频脑电图能检查出什么| 急性青光眼是什么症状| 什么水果最好吃| 千米的字母是什么| 子宫肌瘤是什么病严重吗| 一什么就| 勿误是什么意思| 血沉是什么| 检查抑郁症挂什么科| 李逵代表什么生肖| 荔枝可以做什么| 斑驳是什么意思| 蝶变是什么意思| xl代表什么尺码| 突兀什么意思| 石光荣是什么军衔| 血红蛋白高是什么原因| 履是什么意思| 仲夏夜是什么时候| 痛风吃什么菜| 胃不消化吃什么药| 什么是根管治疗牙齿| 为什么会得乙肝| 吃什么减肥快| 减肥平台期什么意思| 独生子女证有什么用| 北京为什么叫四九城| 绛紫色是什么颜色| 履什么意思| 钧什么意思| 孕晚期脚肿是什么原因| 陌上人如玉是什么意思| 牛排用什么油煎好吃| 孩子咳嗽能吃什么水果| 肾阳虚有什么症状| 燕麦色是什么颜色| 不然呢是什么意思| 吃万艾可有什么副作用| 67什么意思| 人授和试管有什么区别| 半夏生是什么意思| 无住生心是什么意思| 2月18号什么星座| 芦笋是什么| 脱髓鞘病变是什么意思| 外阴皮肤痒是什么原因| 早孕试纸什么时候测最准| 肺炎吃什么药最有效| 圆周率是什么意思| 梦见种菜是什么意思| 羊属于什么科| 打嗝多是什么原因| 为什么会长智齿| 不是经期有少量出血是什么原因| 女性失眠吃什么药最好| 大便糊状什么原因| 职业年金什么时候领取| 血红蛋白高是什么原因| 敬请是什么意思| 门诊号是什么意思| 苏麻为什么不嫁给康熙| 家里来猫是什么征兆| 泌尿科主要看什么病| 1014是什么星座| 有点拉肚子吃什么药| 磨豆浆是什么意思| 碎银子是什么茶| 高血压看什么科| 腔梗灶是什么意思| 老巫婆是什么意思| 肛裂是什么样子的图片| 右眼皮一直跳是什么原因| 五月二十是什么星座| 积滞是什么意思| 老年人心慌是什么原因| 男人好难做人好难是什么歌| 九死一生什么意思| 什么宠物好养又干净| 肚脐眼中间疼是什么原因| 首发是什么意思| 处理是什么意思| 胃酸吃什么能缓解| 性取向是什么| 鸟加衣念什么| 射手是什么星座| 一什么话| 天疱疮是什么病| 梦见捡硬币是什么预兆| 同样的药为什么价格相差很多| 睾丸痛挂什么科| 抽筋缺什么| 什么降血糖| 叶黄素什么时间吃最好| 晚上尿多什么原因| 21属什么| 小孩用脚尖走路是什么原因| 喉咙痛吃什么药好得快| ;是什么号| 骨髓增生活跃是什么意思| 纯是什么意思| 手小的男人代表什么| 格格是什么身份| 座驾是什么意思| 三月七号是什么星座| 长期喝山楂水有什么好处和坏处| 桥本甲状腺炎挂什么科| 眼睛看东西模糊是什么原因| p0s是什么意思| 因加一笔是什么字| 阿司匹林和阿莫西林有什么区别| 麻油跟香油什么区别| 黛是什么颜色| 肾疼是因为什么| 陶白白是什么星座| 荷花是什么季节开放的| 什么是气胸有什么症状| 为什么男人吃石榴壮阳| 前期怀孕有什么症状| 6月24日什么星座| 为什么现在| 孕妇有狐臭擦什么最好| 脸发红是什么原因| 肠梗阻是什么意思| 喉咙痛流鼻涕吃什么药| 桃子跟什么不能一起吃| 郑和下西洋是什么朝代| 治未病科是看什么病的| 钧鉴是什么意思| 波字五行属什么| 肩宽适合穿什么样的衣服| 父亲节要送什么礼物好| 什么是等位基因| 一条条什么| 为什么打哈欠会传染| 双身什么意思| 蛇字五行属什么| ny是什么品牌| 漫山遍野是什么意思| zoey是什么意思| 阴道炎用什么栓剂| 吃大虾不能吃什么| 财神爷叫什么名字| 孕激素六项检查什么时候做| 泰五行属什么| 原来是什么意思| 查肝功能能查出什么病| 元字五行属什么| 血小板低吃什么| 川崎病是什么| 什么叫同理心| 别见怪是什么意思| 身体发冷是什么原因| 辣椒是什么生肖| 胰腺分泌什么| 3月18日什么星座| 鱼用什么游泳| 蛇吃什么东西| 枯木逢春是什么意思| 耳朵后面长痘痘是什么原因| 溶血症是什么症状| 大连靠近什么海| 国老是什么中药| lsp是什么| 梵是什么意思| 舌苔发白是什么情况| ACEI是什么药| 什么的茄子| 知柏地黄丸有什么功效| 火把节是什么节日| 什么叫碳水化合物| 世袭罔替是什么意思| 血栓吃什么药最好| 胃烧心吃什么能缓解| 4月23日是什么星座| 弘字五行属什么| 咳黄痰吃什么药| 四个一是什么字| 百度

什么是色盲

microcontroller
Microcontrollers are dedicated computers in electronics. Ernesto r. Ageitos / Getty Images

Microcontrollers are hidden inside a surprising number of products these days. If your microwave oven has an LED or LCD screen and a keypad, it contains a microcontroller. All modern automobiles contain at least one microcontroller, and can have as many as six or seven: The engine is controlled by a microcontroller, as are the anti-lock brakes, the cruise control and so on. Any device that has a remote control almost certainly contains a microcontroller: TVs, VCRs and high-end stereo systems all fall into this category. Nice SLR and digital cameras, cell phones, camcorders, answering machines, laser printers, telephones (the ones with caller ID, 20-number memory, etc.), pagers, and feature-laden refrigerators, dishwashers, washers and dryers (the ones with displays and keypads)... You get the idea. Basically, any product or device that interacts with its user has a microcontroller buried inside.

In this article, we will look at microcontrollers so that you can understand what they are and how they work. Then we will go one step further and discuss how you can start working with microcontrollers yourself -- we will create a digital clock with a microcontroller! We will also build a digital thermometer. In the process, you will learn an awful lot about how microcontrollers are used in commercial products.

Advertisement

What is a Microcontroller?

A microcontroller is a computer. All computers -- whether we are talking about a personal desktop computer or a large mainframe computer or a microcontroller -- have several things in common:

  • All computers have a CPU (central processing unit) that executes programs. If you are sitting at a desktop computer right now reading this article, the CPU in that machine is executing a program that implements the Web browser that is displaying this page.
  • The CPU loads the program from somewhere. On your desktop machine, the browser program is loaded from the hard disk.
  • The computer has some RAM (random-access memory) where it can store "variables."
  • And the computer has some input and output devices so it can talk to people. On your desktop machine, the keyboard and mouse are input devices and the monitor and printer are output devices. A hard disk is an I/O device -- it handles both input and output.

The desktop computer you are using is a "general purpose computer" that can run any of thousands of programs. Microcontrollers are "special purpose computers." Microcontrollers do one thing well. There are a number of other common characteristics that define microcontrollers. If a computer matches a majority of these characteristics, then you can call it a "microcontroller":

Advertisement

  • Microcontrollers are "embedded" inside some other device (often a consumer product) so that they can control the features or actions of the product. Another name for a microcontroller, therefore, is "embedded controller."
  • Microcontrollers are dedicated to one task and run one specific program. The program is stored in ROM (read-only memory) and generally does not change.
  • Microcontrollers are often low-power devices. A desktop computer is almost always plugged into a wall socket and might consume 50 watts of electricity. A battery-operated microcontroller might consume 50 milliwatts.
  • A microcontroller has a dedicated input device and often (but not always) has a small LED or LCD display for output. A microcontroller also takes input from the device it is controlling and controls the device by sending signals to different components in the device. For example, the microcontroller inside a TV takes input from the remote control and displays output on the TV screen. The controller controls the channel selector, the speaker system and certain adjustments on the picture tube electronics such as tint and brightness. The engine controller in a car takes input from sensors such as the oxygen and knock sensors and controls things like fuel mix and spark plug timing. A microwave oven controller takes input from a keypad, displays output on an LCD display and controls a relay that turns the microwave generator on and off.
  • A microcontroller is often small and low cost. The components are chosen to minimize size and to be as inexpensive as possible.
  • A microcontroller is often, but not always, ruggedized in some way. The microcontroller controlling a car's engine, for example, has to work in temperature extremes that a normal computer generally cannot handle. A car's microcontroller in Alaska has to work fine in -30 degree F (-34 C) weather, while the same microcontroller in Nevada might be operating at 120 degrees F (49 C). When you add the heat naturally generated by the engine, the temperature can go as high as 150 or 180 degrees F (65-80 C) in the engine compartment. On the other hand, a microcontroller embedded inside a VCR hasn't been ruggedized at all.

The actual processor used to implement a microcontroller can vary widely. For example, the cell phone shown on Inside a Digital Cell Phone contains a Z-80 processor. The Z-80 is an 8-bit microprocessor developed in the 1970s and originally used in home computers of the time. The Garmin GPS shown in How GPS Receivers Work contains a low-power version of the Intel 80386, I am told. The 80386 was originally used in desktop computers.

In many products, such as microwave ovens, the demand on the CPU is fairly low and price is an important consideration. In these cases, manufacturers turn to dedicated microcontroller chips -- chips that were originally designed to be low-cost, small, low-power, embedded CPUs. The Motorola 6811 and Intel 8051 are both good examples of such chips. There is also a line of popular controllers called "PIC microcontrollers" created by a company called Microchip. By today's standards, these CPUs are incredibly minimalistic; but they are extremely inexpensive when purchased in large quantities and can often meet the needs of a device's designer with just one chip.

A typical low-end microcontroller chip might have 1,000 bytes of ROM and 20 bytes of RAM on the chip, along with eight I/0 pins. In large quantities, the cost of these chips can sometimes be just pennies. You certainly are never going to run Microsoft Word on such a chip -- Microsoft Word requires perhaps 30 megabytes of RAM and a processor that can run millions of instructions per second. But then, you don't need Microsoft Word to control a microwave oven, either. With a microcontroller, you have one specific task you are trying to accomplish, and low-cost, low-power performance is what is important.

Advertisement

Using Microcontrollers

A BASIC Stamp is a PIC microcontroller that has been customized to understand the BASIC programming language.

In How Electronic Gates Work, you learned about 7400-series TTL devices, as well as where to buy them and how to assemble them. What you found is that it can often take many gates to implement simple devices. For example, in the digital clock article, the clock we designed might contain 15 or 20 chips. One of the big advantages of a microcontroller is that software -- a small program you write and execute on the controller -- can take the place of many gates. In this article, therefore, we will use a microcontroller to create a digital clock. This is going to be a rather expensive digital clock (almost $200!), but in the process you will accumulate everything you need to play with microcontrollers for years to come. Even if you don't actually create this digital clock, you will learn a great deal by reading about it.

The microcontroller we will use here is a special-purpose device designed to make life as simple as possible. The device is called a "BASIC Stamp" and is created by a company called Parallax. A BASIC Stamp is a PIC microcontroller that has been customized to understand the BASIC programming language. The use of the BASIC language makes it extremely easy to create software for the controller. The microcontroller chip can be purchased on a small carrier board that accepts a 9-volt battery, and you can program it by plugging it into one of the ports on your desktop computer. It is unlikely that any manufacturer would use a BASIC Stamp in an actual production device -- Stamps are expensive and slow (relatively speaking). However, it is quite common to use Stamps for prototyping or for one-off demo products because they are so incredibly easy to set up and use.

Advertisement

They are called "Stamps," by the way, because they are about as big as a postage stamp.

The specific BASIC Stamp we will be using in this article is called the "BASIC Stamp Revision D".

The BASIC Stamp Revision D is a BS-1 mounted on carrier board with a 9-volt battery holder, a power regulator, a connection for a programming cable, header pins for the I/O lines and a small prototyping area. You could buy a BS-1 chip and wire the other components in on a breadboard. The Revision D simply makes life easier.

You can see from the previous table that you aren't going to be doing anything exotic with a BASIC stamp. The 75-line limit (the 256 bytes of EEPROM can hold a BASIC program about 75 lines long) for the BS-1 is fairly constraining. However, you can create some pretty neat stuff, and the fact that the Stamp is so small and battery operated means that it can go almost anywhere.

Advertisement

Programming the BASIC Stamp

You program a BASIC Stamp using the BASIC programming language. If you already know BASIC, then you will find that the BASIC used in a Stamp is straightforward but a little stripped-down. If you don't know BASIC, but you do know another language like C, Pascal or Java, then picking up BASIC will be trivial. If you have never programmed before, you probably want to go learn programming on a desktop machine first. Here is a quick rundown on the instructions available in Stamp BASIC. (For complete documentation, go to Parallax: BASIC Stamp Documentation.)

Standard BASIC instructions:

  • for...next - normal looping statement
  • gosub - go to a subroutine
  • goto - goto a label in the program (e.g. - "label:")
  • if...then - normal if/then decision
  • let - assignment (optional)
  • return - return from a subroutine
  • end - end the program and sleep

Instructions having to do with I/O pins:

  • button - read a button on an input pin, with debounce and auto-repeat
  • high - set an I/O pin high
  • input - set the direction of an I/O pin to input
  • low - set an I/O pin low
  • output - set the direction of an I/O pin to output
  • pot - read a potentiometer on an I/O pin
  • pulsin - read the duration of a pulse coming in on an input pin
  • pulsout - send a pulse of a specific duration out on an output pin
  • pwm - perform pulse width modulation on an output pin
  • reverse - reverse the direction of an I/O pin
  • serin - read serial data on an input pin
  • serout - write serial data on an output pin
  • sound - send a sound of a specific frequency to an output pin
  • toggle - toggle the bit on an output pin

Instructions specific to the BASIC Stamp:

  • branch - read a branching table
  • debug - send a debugging string to the console on the desktop computer
  • eeprom - download a program to EEPROM
  • lookdown - return the index of a value in a list
  • lookup - array lookup using an index
  • nap - sleep for a short time
  • pause - delay for the specified time
  • random - pick a random number
  • read - read a value from EEPROM
  • sleep - power down for the specified time
  • write - write data to EEPROM

Operations:

  • + - addition
  • - - subtraction
  • * - multiplication (low-word)
  • ** - multiplication (high-word)
  • / - division
  • // - mod
  • max - return maximum of 2 values
  • min - return minimum of 2 values
  • & - AND
  • | - OR
  • ^ - XOR
  • &/ - NAND
  • |/ - NOR
  • ^/ - XNOR

If statement logic:

=

Advertisement

<>

<

<=

>

>=

AND

OR

Variables

All variables in the BS-1 have pre-defined names (which you can substitute with names of your own). Remember that there are only 14 bytes of RAM available, so variables are precious. Here are the standard names:

  • w0, w1, w2...w6 - 16-bit word variables
  • b0, b1, b2...b13 - 8-bit byte variables
  • bit0, bit1, bit2...bit15 - 1-bit bit variables

Because there are only 14 bytes of memory, w0 and b0/b1 are the same locations in RAM, and w1 and b2/b3 are the same, and so on. Also, bit0 through bit15 reside in w0 (and therefore b0/b1 as well).

I/O pins

You can see that 14 of the instructions in the BS-1 have to do with the I/O pins. The reason for this emphasis is the fact that the I/O pins are the only way for the BASIC Stamp to talk to the world. There are eight pins on the BS-1 (numbered 0 to 7) and 16 pins on the BS-2 (numbered 0 to 15).

The pins are bi-directional, meaning that you can read input values on them or send output values to them. The easiest way to send a value to a pin is to use the HIGH or LOW functions. The statement high 3 sends a 1 (+5 volts) out on pin 3. LOW sends a 0 (Ground). Pin 3 was chosen arbitrarily here -- you can send bits out on any pin from 0 to 7.

There are a number of interesting I/O pin instructions. For example, POT reads the setting on a potentiometer (variable resistor) if you wire it up with a capacitor as the POT instruction expects. The PWM instruction sends out pulse-width modulated signals. Instructions like these can make it a lot easier to attach controls and motors to the Stamp. See the documentation for the language for details. Also, a book like Scott Edward's Programming and Customizing the BASIC Stamp Computer can be extremely helpful because of the example projects it contains.

Advertisement

Playing with a BASIC Stamp

A screenshot of a typical BASIC program editor

If you would like to play with a BASIC Stamp, it's very easy to get started. What you need is a desktop computer and a BASIC Stamp starter kit. The starter kit includes the Stamp, a programming cable and an application that you run on your desktop computer to download BASIC programs into the Stamp.

You can get a starter kit either from Parallax (the manufacturer) or from a supplier like Jameco (who should be familiar to you from the electronic gates and digital clock articles). From Parallax, you can order the BASIC Stamp D Starter Kit (part number 27202), or from Jameco you can order part number 140089. You will receive the Stamp (pictured below), a programming cable, software and instructions. The kit is $79 from both suppliers. Occasionally, Parallax runs a special called "We've Bagged the Basics" that also includes Scott Edward's Programming and Customizing the BASIC Stamp Computer].

Advertisement

Hooking up the Stamp is easy. You connect it into the parallel port of your PC. Then you run a DOS application to edit your BASIC program and download it to the Stamp.

To run the program in this editor, you hit ALT-R. The editor application checks the BASIC program and then sends it down the wire to the EEPROM on the Stamp. The Stamp then executes the program. In this case, the program produces a square wave on I/O pin 3. If you hook up a logic probe or LED to pin 3 (see the electronic gates article for details), you will see the LED flash on and off twice per second (it changes state every 250 milliseconds because of the PAUSE commands). This program would run for several weeks off of a 9-volt battery. You could save power by shortening the time that the LED is on (perhaps it is on for 50 milliseconds and off for 450 milliseconds), and also by using the NAP instruction instead of PAUSE.

Advertisement

Creating a Really Expensive Digital Clock

Spending $79 to flash an LED may seem extravagant to you. What you would probably like to do is create something useful with your BASIC stamp. By spending about $100 more you can create a really nice digital clock! This may seem extremely extravagant, until you realize that the parts are reusable in a variety of other projects that you may want to build later.

Let's say that we would like to use the I/O pins on the BASIC Stamp to display numeric values. In the digital clock article, we saw how to interface to a 7-segment LED display using a 7447 chip. 7447s would work just as well with the BASIC Stamp. You could wire four of the I/O pins straight into a 7447 and easily display a number between 0 and 9. Since the BS-1 Stamp has eight I/O pins, it is easy to drive two 7447s directly like this.

Advertisement

For a clock, we need a minimum of four digits. To drive four 7447s with eight I/O pins, we have to be slightly more creative. The following diagram shows you one approach:

In this diagram, the eight I/O lines from the Stamp enter from the left. This approach uses four lines that run to all four 7447s. Then the other four lines from the Stamp activate the 7447s in sequence ("E" on the chips means "Enable" -- on a 7447, that would be the blanking input on pin 5). To make this arrangement work, the BASIC program in the Stamp would output the first digit on the four data lines and activate the first 7447 by toggling its E pin with the first control line. Then it would send out the value for the second digit and activate the second 7447, sequencing through all four of the 7447s like this repeatedly. By wiring things slightly differently, you could actually do this with only one 7447. By using a 74154 demultiplexer chip and some drivers, you could drive up to 16 digits using this approach.

This is, in fact, a standard way to control LED displays. For example, if you have an old LED calculator, turn it on and shake it while watching the display. You will actually be able to see that only one digit is ever illuminated at once. The approach is called multiplexing the display.

While this approach works fine for clocks and calculators, it has two important problems:

  • LEDs consume a lot of power.
  • 7-segment LEDs can only display numeric values.

An alternative approach is to use an LCD screen. As it turns out, LCDs are widely available and can be easily hooked to a Stamp. For example, the two-line by 16-character alphanumeric display shown below is available from both Jameco (part number 150990) and Parallax (part number 27910). A typical display is shown here, mounted on a breadboard for easier interfacing:

This sort of LCD has several advantages:

  • The display can be driven by a single I/O pin. The display contains logic that lets a Stamp communicate with it serially, so only one I/O pin is needed. In addition, the SEROUT command in Stamp BASIC handles serial communication easily, so talking to the display is simple.
  • The LCD can display alphanumeric text: letters, numbers and even custom characters.
  • The LCD consumes very little power -- only 3 milliamps.

The only problem is that one of these displays costs $59. Obviously, you would not embed one of these in a toaster oven. If you were designing a toaster oven, however, you would likely prototype with one of these displays and then create custom chips and software to drive much cheaper LCDs in the final product.

To drive a display like this, you simply supply it with +5 volts and ground (the Stamp supplies both from the 9-volt battery) and then hook one of the I/O pins from the Stamp to the display's input line. The easiest way I have found to connect the Stamp's I/O pins to a device like an LCD is to use a wire-wrap tool (Jameco part number 34577) and 30-gauge wire wrap wire (Jameco part number 22541 is typical). That way, no soldering is involved and the connections are compact and reliable.

The following BASIC program will cause a BASIC Stamp to behave like a clock and output the time on the LCD (assuming the LCD is connected to I/O pin 0 on the Stamp):

pause 1000                 'wait for LCD display to boot
serout 0, n2400, (254, 1)  'clear the display
serout 0, n2400, ("time:") 'Paint "time:" on the display
                'preset before loading program
b0 = 0                     'seconds
b1 = 27                    'minutes
b2 = 6                     'hours

again:
b0 = b0 + 1                'increment seconds
if b0 < 60 then minutes
  b0 = 0                   'if seconds=60
  b1 = b1 + 1              ' then increment minutes
minutes:
if b1 < 60 then hours
  b1 = 0                   'if minutes=60
  b2 = b2 + 1              '  then increment hours
hours:
if b2 < 13 then show
  b2 = 1                   'if hours=13 reset to 1

show:
serout 0, n2400, (254, 135) 'position cursor on display,
                            'then display time
serout 0, n2400, (#b2, ":", #b1, ":", #b0, "    ")
pause 950                     'pause 950 milliseconds
goto again                    'repeat

In this program, the SEROUT commands send data to the LCD. The sequence (254, 1) clears the LCD (254 is the escape character and 1 is the command to clear the screen). The sequence (254, 135) positions the cursor. The other two SEROUT commands simply send text strings to the display.

This approach will create a reasonably accurate clock. By tweaking the PAUSE statement you can get the accuracy to within a few seconds a day. Obviously, in a real clock you would like to wire up a push-button or two to make setting it easier -- in this program, you preset the time before you download the program to the Stamp.

Pocket Watch B Module

While this approach is simple and works, it is not incredibly accurate. If you want better accuracy, one good approach would be to wire a real-time clock chip up to your Stamp. Then, every second or so, you can read the time from the chip and display it. A real-time clock chip uses a quartz crystal to give it excellent accuracy. Clock chips also usually contain date information and handle leap year correction automatically.

One easy way to interface a real-time clock to a stamp is to use a component called the Pocket Watch B.

The Pocket Watch B is available from both Jameco (part number 145630) and Parallax (part number 27962). This part is about as big as a quarter and contains the clock chip, crystal and a serial interface so that only one I/O pin is necessary to communicate with it. This component costs about $30 -- again, not something you want to embed in a toaster oven, but easy to play with when constructing prototypes.

Advertisement

Building a Digital Thermometer

Now that you understand a little bit about your Stamp and the LCD, we can add another component and create a digital thermometer. To create a thermometer, we will use a chip called the DS1620. This chip contains:

  • A temperature-sensing device
  • An analog-to-digital (A/D) converter for the temperature-sensing device
  • A shift register to read the data out of the A/D converter
  • A little EEPROM (electrically erasable programmable read-only memory) to remember settings

The DS1620 has two modes: In one mode, it acts as a stand-alone thermostat chip, and in the other mode you hook it up to a computer and use it as a thermometer. The EEPROM remembers the current mode as well as the set temperatures for the thermostat.

Advertisement

Hooking up the DS1620 to the Stamp is very easy. The DS1620 comes in an 8-pin chip. Supply +5 volts from the Stamp to pin 8 of the DS1620. Supply ground to pin 4 of the DS1620. You then use three I/O pins from the Stamp to drive three pins on the DS1620:

  • Pin 1 on the DS1620 is the data pin. You read and write data bits on this pin.
  • Pin 2 on the DS1620 is the clock pin. You clock data in and out of the shift register with this pin.
  • Pin 3 on the DS1620 is the reset/select pin. You set pin 3 high to select the chip and communicate with it.

For this example code, it is assumed that:

  • The data pin goes to I/O pin 2 on the Stamp.
  • The clock pin goes to I/O pin 1 on the Stamp.
  • The reset/select pin goes to I/O pin 0 on the Stamp.

The completed wiring looks like this:

You can get a DS1620 either from Jameco (part number 146456) or Parallax (part number 27917) in an "application kit" that includes the chip, the capacitor, some good documentation and sample code. Or you can buy the chip on its own from Jameco (part number 114382). I would suggest getting the application kit the first time you try using the DS1620 because the documentation is very useful.

You can assemble the DS1620 in the prototype area of the Stamp carrier board or on a separate breadboard. Once you have assembled it, hook your LCD display up to I/O pin 3 of the Stamp, and then load and run the following program:

symbol RST = 0 ' select/reset line on 1620
symbol CLK = 1 ' clock line for shift registers on 1620
symbol DQ = 2  ' data line on 1620
symbol DQ_PIN = pin2 ' pin representation for DQ
symbol LCD = 3 ' data line for LCD

begin:
low RST     ' deselect the 1620 unless talking to it
high CLK    ' clock pin on 1620 should default high
pause 1000  ' wait for the thermometer and LCD to boot

setup:
high RST        ' select the 1620
b0 = $0C        ' $0c is the 1620 command byte
                '   saying "Write Config"
gosub shift_out ' send it to the 1620
b0 = %10        ' %10 is the 1620 command byte
                '   to set thermometer mode
gosub shift_out ' send it to the 1620
low RST         ' deselect the 1620
pause 50        ' delay 50ms for EEPROM

start_convert:
b0 = $EE        ' $EE is the 1620 command byte
                '   to start conversions
high RST        ' select the 1620
gosub shift_out ' send it to the 1620
low RST         ' deselect the 1620

' This is the main loop
' - reads and displays temperature every second
main_loop:
  high RST        ' select the 1620
  b0 = $AA        ' $AA is the 1620 command byte
                  '   for reading temperature
  gosub shift_out ' send it to the 1620
  gosub shift_in  ' read the temperature
                  '   from the 1620
  low RST         ' deselect the DS1620.
  gosub display   ' display the temp in degrees C
  pause 1000      ' wait a second
goto main_loop

' The shift_out subroutine sends whatever is in
' the b0 byte to the 1620
shift_out:
output DQ           ' set the DQ pin to
                    '   output mode
for b2 = 1 to 8
  low CLK           ' prepare to clock the bit
                    '   into 1620
  DQ_PIN = bit0     ' Send the data bit
  high CLK          ' latch data bit into 1620
  b0 = b0/2         ' shift all bits right
                    '   toward bit 0
next
return

' The shift_in subroutine gets a 9-bit
' temperature from the 1620
shift_in:
input DQ            ' set the DQ pin to
                    '   input mode
w0 = 0              ' clear w0
for b5 = 1 to 9
  w0 = w0/2         ' shift input right.
  low CLK           ' ask 1620 for next bit
  bit8 = DQ_PIN     ' read the bit
  high CLK          ' toggle clock pin
next
return

' Displays the temperature in degrees C
display:
if bit8 = 0 then pos      ' if bit8=1
                          '   then temp is negative
  b0 = b0 &/ b0           ' invert b0 by NANDing it
                          '   with itself
  b0 = b0 + 1
pos:
serout LCD, n2400, (254, 1)    ' clear the LCD
serout LCD, n2400, ("Temp = ") ' display "Temp="
                               '   on the display
bit9 = bit0                    ' save the half degree
b0 = b0 / 2                    ' convert to degrees
if bit8 = 1 then neg           ' see if temp is negative
  serout LCD, n2400, (#b0)     ' display positive temp
  goto half
neg:
  serout LCD, n2400, ("-", #b0)' display negative temp
half:
  if bit9 = 0 then even
    serout LCD, n2400, (".5 C") ' display the half degree
    goto done
even:
    serout LCD, n2400, (".0 C") ' display the half degree
done:
return

If you run this program, you will find that it displays the centigrade temperature with an accuracy of one-half degree.

The DS1620 measures temperatures in centigrade half-degrees. It returns the temperature in a 9-bit 2s-complement number with a range of -110 to 250 F (-55 to 125 C). You divide the number you receive by 2 to get the actual temperature. 2s-complement binary numbers are a convenient way to represent negative values. The following list shows the values for a 4-bit 2s-complement number:

0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 : -1
1110 : -2
1101 : -3
1100 : -4
1011 : -5
1010 : -6
1001 : -7
1000 : -8

- You can see that instead of the 4 bits representing values from 0 to 15, the 4 bits in a 2s-complement number represent the values -8 to 7. You can look at the left-most bit to determine if the number is negative or positive. If the number is negative, you can invert the bits and add 1 to get the positive representation of the number.

Here's what goes on with the digital thermometer program shown here:

  1. It uses the symbol keyword to set up several constants that make the program slightly easier to read (and also make it easy for you to move the chip to different I/O pins on the Stamp).
  2. It sets the CLK and RST pins on the DS1620 to their expected values.
  3. It writes a command byte to the EEPROM on the DS1620 to tell the chip to operate in "thermometer mode." Because the mode is stored in EEPROM, you only have to do it once, so you could technically take this section of the code out of the program after you run the program once (to save program space).
  4. The program sends the command $EE ("$" means "hexadecimal number" -- $EE is 238 in decimal) to tell the thermometer to start up its conversion process.

The program then enters a loop. Every second, it sends a command to the DS1620 telling the DS1620 to return the current temperature, and then it reads the 9-bit value that the DS1620 returns into the w0 variable. The Stamp sends and receives data 1 bit at a time by toggling the CLK line on the DS1620. Remember that the w0 (16-bit) variable overlays the b0/b1 (8-bit) variables, which overlay the bit0/bit1/.../bit15 (1-bit) variables, so when you insert a bit from the DS1620 into bit 8 and divide w0 by 2, what you are doing is shifting each bit to the right to store the 9-bit temperature from the DS1620 into w0. Once the temperature has been saved in w0, the display subroutine determines whether the number is positive or negative and displays it appropriately on the LCD as a centigrade temperature. The conversion from degrees C to degrees F is:

dF = dC * 9/5 + 32

At this point, we have succeeded in creating an extremely expensive thermometer. What might you do with it? Here's one idea. Let's say you work for a drug company and you are shipping expensive drugs across the country that MUST remain at a certain temperature the entire way or the drugs will spoil. What you can do with a Stamp is create a data logging thermometer. Both Jameco (part number 143811) and Parallax (part number 27960) sell a device called the "RAM Pack module." It contains a low-power 8-kilobyte (or optionally 32-kilobyte) RAM chip with a serial interface. You could add this component (or something similar) to your Stamp and write code that saves temperature readings to the RAM every minute. You could then slip your Stamp into the drug shipment, and at the other end of the trip retrieve the Stamp. The RAM module would contain the temperature history of the entire trip and you would know whether or not the drugs ever thawed out.

There are all kinds of neat, useful devices like this that you can build with a Stamp now that you know how microcontrollers work!

For more information on microcontrollers and related topics, check out the links on the next page.

Advertisement

Advertisement

Loading...
孕妇口腔溃疡能用什么药 恋爱是什么 落花生为什么叫落花生 日加个立念什么 四叶草寓意是什么
六味地黄丸有什么副作用 胸推是什么 经常喝柠檬水有什么好处和坏处 哎是什么意思 草鱼吃什么草
a型血的人是什么性格 爱出油的人身体缺什么 粤语骑马过海什么意思 乐观是什么意思 经常性头疼是什么原因
脱敏是什么意思 智齿是什么意思 心五行属性是什么 孩子发烧按摩什么部位退烧 什么时候人流
为什么会起鸡皮疙瘩wzqsfys.com 手掌发红是什么病hcv9jop1ns6r.cn 嘴唇起白皮是什么原因hcv9jop5ns0r.cn 辰砂和朱砂有什么区别hcv8jop9ns1r.cn 正常的白带是什么样的0297y7.com
医联体是什么意思hcv9jop2ns9r.cn 甲亢属于什么科室hcv8jop4ns9r.cn 重度贫血是什么原因引起的hcv8jop8ns8r.cn 山药和什么搭配最好hcv9jop7ns5r.cn 四面楚歌什么意思aiwuzhiyu.com
淋巴在什么位置hcv9jop6ns6r.cn hct是什么hcv8jop1ns5r.cn 屁股长痘痘用什么药膏hcv8jop5ns6r.cn 焯水是什么意思hcv9jop8ns2r.cn 激动是什么意思hcv9jop1ns7r.cn
岬是什么意思hcv7jop6ns4r.cn nb什么意思hcv9jop3ns4r.cn 沙门是什么意思bjhyzcsm.com 屁多还臭是什么原因hcv7jop6ns8r.cn 检查盆腔炎做什么检查hcv9jop7ns2r.cn
百度