SRS Home | Front Page | Monthly Issue | Index
 Search WWW Search seattlerobotics.org

# Using the A/D converter on the BOT2 board.

Following is information helpful in using the Analog-to-digital converters on the M68HC811 E2 microcontroller chip on the BOT2 board. I spent some time struggling with the program but as usual all seems to make sense now. At the end of this paper is the software in SBasic which programs the BOT2 board enabling four separate channels of analog to digital conversions. The software after being compiled, then assembled and finally downloaded to the BOT2 will continuously resample and display the digital outputs to a terminal and readout the voltages in milli volts. The accuracy is about 100 mv on my board. This ability built into the M68HC811 E2 and others like it is very powerful and simple to use.

Several people have asked how to display this information to a terminal. I will try to explain using three methods.

*****************************

Method #1 - Just after downloading the program to the BOT2 board using PCBUG11 the terminal displays the ">>" prompt. Just type in "term" and enter and a large box appears on the terminal. In this box will appear all data sent by using the "print" statement of SBasic. After the box appears move the A and B switches on the BOT2 board to OFF and then hit the reset push-button. From that point within the box all data will appear. In my case one row of data appeared as -

--- Jims A/D in mv 0 = 2760 1 = 1960 2 = 1460 3 = 1200 Do Loop 33 ---

Here the A/D channel 0 = 2760 means there is 2.760 volts on the outer pin of the AD0 plug on the BOT2 board. I really have 2.72 volts there as I have the outer pin of the AD0 plug jumpered to my backup battery voltage though a 5 k ohm resistor. Channel 1 & 2 and 3 are all floating at this point. I can move the jumper to the other channels and they will read the 2720 mv +\- 100 mv. When I jumbered the inputs (AD0, AD1, AD2 & AD3) to ground through the 5k resistor each channel read 0 mv while jumbered. 1 = 1960 as indicated in the example above indicates that channel 1 was reading 1.960 volts. In reality that channel had no input and was just floating. The same is true for channel 2 and 3. The Do Loop 33 just means we have looped 33 times in the running program.

I have noticed my terminal sometimes can run 9 seconds or so behind as it tries to keep up.

*****************************

Method #2 - Use the windows 3.11 Terminal program. The Terminal program is in my Accessory folder. Connect a cable from the BOT2 board DB9F connector to a COM port on the IBM. In the Terminal program select Settings and then select Communications and enter the following.

Baud Rate = 9600

Data Bits = 8

Stop Bits = 1

Parity = none

Flow Control = Xon/Xoff

Connector = Com2: (or the port you use, I use com4:)

Then go to File and then File Save As and save the settings as BOT2.trm or something. When you start the Terminal you can go to File then Open and then double click on BOT2.trm (or something) and the data should appear on the screen.

*****************************

Method #3 - With the below program loaded into the BOT2 board.

1. Set the BOT2 board A and B switches to ON.

2. Turn on the BOT2 and hit the reset.

3. Start the PCBUG11 using a working macro file.

4. At the >> prompt enter "TERM".

5. Move the BOT2 boards A & B switches to OFF.

6. Hit the BOT2 boards reset switch.

7. Observe the data rapidly displaying in the box of the PCBUG11 program.

*****************************

Hope all this is helpful! My thanks goes to those who have helped me. Including Tom Dickens, Kevin Ross, Karl Lunt, Marvin Green , and of coarse Motorola.

Jim Anunson

My working SBasic program below.

____________________________________________________________________________________

`REM  Modified by Jim Anunson   Sep 28, 1998`
`REM  Saved to a file called  analog.bas`
```REM  This program demonstrates use of the analog to digital converter
using the BOT2 board.```
`REM  With a M68HC811E2 chip.`
`REM  Put inputs to ad0, ad1, ad2 or/and ad3 of the BOT2 board. `
`REM  Do not exceed the 5 volt power supply voltage.`
```REM  Began with hercules.bas
```
```include  "regs11.lib"
```
```Const k = 20                            REM Scales output to mvolts.
5v/256 = .020 or 20 mv.```
`declare  wait`
`declare  n`
```declare  ad0                             REM ad0 = identification of
analog channel 0 on BOT2 board```
```declare  ad1                             REM ad1 = identification of
analog channel 1 on BOT2 board```
```declare  ad2                             REM ad2 = identification of
analog channel 2 on BOT2 board```
```declare  ad3                             REM ad3 = identification of
analog channel 3 on BOT2 board```
```declare zero
```
`main:`
`  n=0`
`  zero=0`
`  pokeb spcr, \$07                            REM  SPI OFF`
```  pokeb ddrd, \$3F                               REM  Set port D for
outputs.
```
`  pokeb baud,\$30                       REM  Configure SCI output.`
```  pokeb sccr2,\$0C                            REM  Configure SCI
output.
```
`  pokeb option, %10000000                REM  Powers A/D using E clock.`
`  pokeb  tflg2, %01000000                  REM  Timer Interrupt`
```  pokeb  tmsk2, %01000000                REM  Interrupt request enabled
```
`       do`
`         gosub  sense`
`         n=n+1`
`         print "     Do loop ";`
`         print n`
`      loop`
```end
```
`sense:`
`   wait = 0`
`   pokeb adctl, \$10 REM  multi-chnl, 1-4`
`   waituntil adctl, \$80 REM  loop until conversion complete`
`   ad0 = peekb(adr1) REM  get analog to digital results  `
`   ad1 = peekb(adr2) REM  get analog to digital results  `
`   ad2 = peekb(adr3) REM  get analog to digital results  `
`   ad3 = peekb(adr4) REM  get analog to digital results  `
`   Print "Jims A/D in mv  0 =";        REM  Print to SCI port`
```   Print ad0*k;          REM  Print A/D value times k to make reading in
mvolts.```
`   Print "  1 =";`
`   Print ad1*k;`
`   Print "  2 =";`
`   Print ad2*k;`
`   Print "  3 =";`
`   Print ad3*k;`
```return
```