			     Vermont Peripherals 

	     "Peripherals and software for product development"

	       PO Box 2063 | Colchester | Vermont | 05446-2063

			  Compuserve ID# 5063
			 Type GO SWREG to Order 


COMPANY SUMMARY,

Vermont Peripherals product list principally stay in the broad area of data
acquisition and control systems for the PC. The form our software takes are
VBX/OCX I/O control and application software. We may be reached in a number
of ways:

              Compuserve: 74514,2615
              Internet  : 74514.2615@compuserve.com
              WWW Page  : http://users.aol.com/VerPer/vp1.htm
              Phone     : 1-617-289-8326

	      REGISTER TODAY ON COMPUSERVE - TYPE "GO SWREG" 

SHAREWARE,

This product is distributed as shareware. This product is not free. You will 
have a chance to try our software before buying it. If you continue to use 
this product you are required to purchase a licensed version. The licensed 
version will not contain the registration screen. We will e-mail, or  
snail-mail a licensed copy to you generally within 24 hrs from the date of 
registration.

Copyright laws apply both to shareware and retail software, the copyright  
holder retains all rights. Shareware differs only in the distribution method, 
and is not a type of software. 
See ORDER.FRM 

EVALUATION SOFTWARE LICENSE AGREEMENT, 

Read this agreement before installing or using our software. Installation or 
distribution of our software indicates your acceptance of these terms.

We grant the right to copy and distribute our software subject to the 
following conditions.

     1) All files are maintained intact, without any changes or
	modification of any kind, and complete with all documentation and 
	associated files. In short, you may distribute this software 
	in the same form as released by us.           
	
     2) You may NOT sublicense or sell our software without written 
	permission of Vermont Peripherals. 

LIMITED WARRANTY AND DISCLAIMER,

ALL FILES, SOFTWARE AND DOCUMENTATION, ARE PROVIDED "AS IS" WITHOUT WARRANTY 
OF ANY KIND. VERMONT PERIPHERALS (VP) AND THOSE AFFILIATED WITH VP DO NOT 
WARRANT, GUARANTEE, OR MAKE ANY REPRESENTATIONS REGARDING THE USE, OR THE  
RESULTS OF USE, OF THE SOFTWARE OR WRITTEN MATERIALS IN TERMS OF RELIABILITY 
OR CORRECTNESS. ALL RISK AS TO THE RESULTS OF THE SOFTWARE AND DOCUMENTATION  
IS ASSUMED BY YOU. YOU MUST ALSO ASSUME ALL COST, RISK, AND PROVIDE FINAL  
JUDGMENTs AS TO THE SUITABILITY FOR A PARTICULAR APPLICATION. ANY SUGGESTION 
VP MAKES AS TO USE OF THIS PRODUCT ARE FOR ILLUSTRATION ONLY AND IS SUBJECT  
TO YOUR JUDGMENT. VP WILL NOT BE HELD ACCOUNTABLE FOR ANY DAMAGES RESULTING  
FROM THE USE OR MISUSE OF THIS PRODUCT.

THIS PRODUCT CONTROLS HARDWARE. VP WILL NOT ASSUME THE COST OR BE HELD  
ACCOUNTABLE FOR DAMAGE TO ANY HARDWARE, PC OR OTHERWISE, RESULTING FROM THE  
USE AND EVALUATION OF THIS PRODUCT. IT IS UP TO YOU AS TO THE METHOD OF  
EVALUATION THAT POSES THE LEAST RISK TO YOUR EQUIPMENT AND FUNDS. WE WILL NOT 
BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES  
OR FOR LOSS OF BUSINESS PROFITS OR INTERRUPTION OF BUSINESS, LOSS OF BUSINESS
INFORMATION, AND SIMILAR CIRCUMSTANCES ARISING OUT OF USE OR MISUSE OF OUR
PRODUCTS. EVEN IN THE EVENT THAT VP HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

ACKNOWLEDGMENT,

BY USING AND/OR EVALUATING THIS PRODUCT YOU ACKNOWLEDGE THAT YOU HAVE READ 
THE LIMITED WARRANTY, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS' TERMS AND  
CONDITIONS. YOU ALSO AGREE THAT THE LIMITED WARRANTY SUPERSEDEAS ORAL OR  
WRITTEN COMMUNICATIONS BETWEEN THE PARTIES RELATING TO THE SUBJECT MATTER OF  
THE LIMITED WARRANTY.

PRODUCT SUMMARY,

You have obtained EVIO1.VBX, a VBX for hardware control. Pop this VBX into a 
Visual Basic (tm) application you're developing and be ready to design 
anything from a stage lighting system to an industrial control application  
(SEE LIMITED WARRANTY). I've had some fun with this VBX and I think you will  
as well. Of course, hobbyists would find this VBX useful. For example, 
perhaps developing a model train control application for railroad related  
hardware, or an electronics project requiring an effective interface. I'm  
sure more than a few applications would benefit by utilizing this VBX. 

To be more specific, EVIO1.VBX was prepared to facilitate project development  
involving PC related hardware designs (primarily control and data acquisition)  
requiring a windows front end. A requirement virtually mandatory these days  
for any design project involving the PC. As such, we chose the VBX format  
because it essentially hides all low level activity and provides an incredibly  
straight forward interface for those individuals using Visual BASIC (tm)  

An engineer or hobbyist may not take the time to learn all aspects of windows  
programming, but most would easily construct a C or BASIC program for test  
purposes (this has been my experience anyway), and would find VB very easy 
to use. This VBX is compiled in VC++ and provide extremely good execution 
speeds. Finally, you need not be an engineer to use and appreciate the ease  
of use and flexibility EVIO1 affords.

PRODUCT FEATURES,

Polled byte wide I/O            This is standard polled I/O. Our VBX provides
                                this as a foundation.

Polled Bitwise I/O              Allows Selection of a port and masks bits
                                from that port. A single check will
				provide the status of that individual bit. 

                                (When combined with bitwise output you end up
                                with a bitwise control loop in a very few
                                lines of VB code).

Event-driven byte wide I/O      The moment any activity is detected at the 
				port an event is fired and loads the complete 
                                byte into a buffer. (very similar to hardware 
                                interrupts).  

Event-driven bitwise I/O        Each instance of the VBX provides eight 
				predefined functions that individually fire 
                                when any external bit is found high.

INTRODUCTION,

Our VBX works with Visual Basic (TM) for Windows 3.1. Two assumptions made in
this document are that you program in Visual Basic and have a fair
understanding of how I/O works in the PC. Most hobbyist, engineers and
application programmers should find this document very straight forward.    

INSTALLATION (version 3.0 of VB),

First, copy EVIO1.VBX to your "\windows\system" directory. Most likely you've  
installed a VBX already, if not, then don't worry, as your most of the way  
home. Select the "Add File" choice from the "file" option on the menu bar  
and you'll see the standard directory options presented, choose EVIO1.VBX  
from the \windows\system directory and you will see the VBX include itself on 
the VB control bar.

Double click on the EVIO1 icon; form1.frm should be loaded with a copy  
of the VBX. EVIO1.VBX can be used with I/O ports on the PC for the control
of hardware devices. 

     *** EVIO1 defaults to your PC's LPT1 status and data ports ***
                       *** (NOT AS A PRINTER) ***

EVENT FUNCTIONS,

Double clicking on EVIO1 located on form1.frm will immediately show the  
subroutine;

			Sub EVIO1_BitIn1 ()

			End Sub

In fact, EVIO1 has eight such events, all bitwise of course, called 
EVIO1_BitIn1 through EVIO1_BitIn8. These subroutines are automatically "fired" 
when a particular bit from a user selected input port is set to logic one. 
Each routine will keep firing as long as the input bit is held to logic one 
or the user (application) takes some course of action to disable the event or 
cause a logic zero at the input bit. In short, EVIO1 is set up for bitwise 
operation by default. 

EVIO PROPERTIES AND ALTERING DEFAULT OPERATION,

Hardware may be designed with positive or negative logic, maskable I/O,  
polled or event driven operation. EVIO1 can be modified using its property  
list to account for a variety of conditions. Not all the properties will be  
explained in detail, most are self explanatory, some require a "bit" more  
verbiage. Here is the list of the most important properties:


Enabled         Used to activate the VBX, defaults "true" on load.
                (THIS MUST BE USED FOR HREVIO WHEN ADJUSTING RESOLUTION)

Resolution      How often the specified input port is scanned for new data, 
                defaults to 55 mS. (HREVIO WORKS TO 5 mS)

PortIn          The user selectable input port, defaults to the PC's lpt1 
		printer status port.

PortOut         The user selectable output port, defaults to the PC's lpt1 
		printer data port.

InvertIn        User selectable logic, defaults to false, positive logic 
		assumed at the input.

InvertOut       User selectable logic, defaults to false, positive logic 
		assumed at the output.

These last two properties can be a source of confusion. For example, if you  
find each bit event fires on every timer tick chances are that InvertIn  
should be changed from false to true. It really depends on what kind of 
hardware your working on. Keep things as simple as possible, I would suggest  
leaving InvertOut alone, and only altering InvertIn as required. This property 
was provided mostly to maintain symmetry in the system.


DataIn          This is the Byte retrieved from the last input scan, or in 
		the case of polled operation, contains the last byte read in 
		using the LatchIn property. See further in this document.

LatchIn         Use this property when in polled mode, Timer = False, to load 
		DataIn with a byte value from an input port. Defaults to 
		False.

Timer           Enables event-driven I/O, defaults to true on load. When using 
		polled operation its best to set this property to false. 
		
DataOut         This is the byte value sent to the port at any point in
		the program regardless of polled or event I/O operation.
		
PROPERTIES FOR BITWISE OPERATION,

EVIO1 allows bit level evaluation of the selected port. BitOut1 through 
BitOut8, These properties "fire" a single bit high or low at the specified 
port. This  is true at design time or runtime. The bits may be fired as a 
group or  individually. They may be used in polled operation or in event mode. 

BitIn1 through BitIn8,

These are not set by the user, but are used as flags while in polled operation 
to parse out the status of individual bits. Your application  simply reads the 
value.

MaskIn          Used to set which bits are to be evaluated eitherin polled 
		mode or event mode. Its interesting to note that EVIO1 will 
		act much like a maskable interrupts at the port level.

MaskOut         Provide for symmetry reasons, will perform that same action 
		as MaskIn for data begin sent out the port.

EXAMPLE USAGE,

The best example code would involve external port I/O, that is, I/O designed   
and used externally to the PC. Preferably, led indicators for output and TTL  
or similar input for testing events. As I have no way to determine your  
particular hardware configuration, the example code snippets will stay very 
generic. Currently EVIO1 defaults to the printer (lpt1) port, this port is an 
extremely versatile access point for performing control operations.  
Unfortunately, having a printer attached would pose certain problems as you 
might guess, of course, this might be the target hardware.

If interested, you might develop an example program using EVIO1 with internal  
PC ports. I would love to see some instructive examples. Go ahead and e-mail  
some example code to us if this sounds like an interesting challenge. If we  
include your code in the next manual I'll send you an additional VBX 
(or upgrade) developed by Vermont Peripherals at no additional charge. 
(plus give you due credit in our manual).

Note *** 

Keep in mind that Windows 3.1 is message driven and yields tasks, as such, 
other events going on in Windows 3.1 can and will inhibit operation.
So when designing your application keep this in mind.

EXAMPLE1, 

Performing I/O polled mode (or semi-event mode with the button),

Dim cnt%             

Sub Form_Load ()   
   EVIO1.MaskOut = 255  ' *** set mask for, "all active", byte operation   
   EVIO1.PortOut = 888  ' *** in decimal, default. You set this to your port   
   EVIO1.Timer = False  ' *** disable event mode    
   EVIO1.DataOut = 0    ' *** set output data to zero   
   Text1.Text = ""      ' *** set up indicator box 
End Sub

Sub Command1_Click ()   
   Text1.Text = Str$(cnt%)   
   EVIO1.DataOut = cnt% ' *** Send data to the port   
   cnt% = cnt% + 1      ' *** Increment data 
End Sub

EXAMPLE2,

This next example is for bitwise, event-driven I/O,

Dim cnt%

Sub Form_Load ()   
   EVIO1.MaskOut = 255    ' *** set mask for, "all active", byte operation   
   EVIO1.PortOut = 888    ' *** in decimal, default. You set this to your port   
   EVIO1.PortIn = 889     ' *** in decimal, default. You set this to your port  
   EVIO1.Resolution = 55  ' *** set scan to 55 mS   
   EVIO1.Timer = True     ' *** disable event mode   
   EVIO1.DataOut = 0      ' *** set output data to zero   
   EVIO1.InvertIn = True  ' *** Ground parallel port input bits, negative logic   
   text1.Text = ""        ' *** set up indicator box 
End Sub

Sub Command1_Click ()   
   text1.Text = Str$(cnt%)   
   EVIO1.DataOut = cnt%   
   cnt% = cnt% + 1 
End Sub

Sub EVIO1_BitIn5 ()   
   cnt% = cnt% + 1   
   text1.Text = Str$(cnt%)
End Sub

The next example allows the user to press a windows button, or press a button  
attached to bit five of  the selected port (lpt1)in order to increment the 
cnt% variable. In this case the port selected is bit5 (printer out of paper).  
Although, this of course could just as easily have been a signal for the  
computer to water the house plants using any port or bit defined.

EXAMPLE3,

Dim cnt%

Sub Form_Load ()   
  EVIO1.MaskOut = 255   ' *** set mask for, "all active", byte operation   
  EVIO1.PortOut = 888   ' *** in decimal, default. You set this to your port   
  EVIO1.PortIn = 889    ' *** in decimal, default. You set this to your port  
  EVIO1.Resolution = 55 ' *** set scan to 55 mS   
  EVIO1.Timer = True    ' *** disable event mode   (NOT FOR HREVIO)
  EVIO1.DataOut = 0     ' *** set output data to zero   
  EVIO1.InvertIn = True ' *** Ground parallel port input bits, negative logic   
  text1.Text = ""       ' *** set up indicator box 
End Sub

Sub Command1_Click ()   
   text1.Text = Str$(cnt%)   
   EVIO1.DataOut = cnt%   
   cnt% = cnt% + 1 
End Sub

Sub EVIO1_BitIn5 ()   
   cnt% = cnt% + 1   
   text1.Text = Str$(cnt%)
End Sub

OBTAINING BYTE/BIT STATUS,

I won't provide a full example, however, the following well placed commands  
will allow you to check the status and value of the input port on a bit and  
byte wide level.

EXAMPLE4,

Sub Command1_Click ()

' *** must LatchIn for polled operation   
   EVIO1.LatchIn = True      ' *** this is byte level in polled mode   
   cnt% = EVIO1.DataIn   
   text1.Text = Str$(cnt%)

' *** this next operation is on the bit level   If 
  EVIO1.BitIn5  Then     
    text2.Text = "TRUE"   
  Else     
    text2.Text = "FALSE"   
  End If

End Sub

This last partial example is fully event driven, bitwise operation,

EXAMPLE5

Dim cnt%

Sub Form_Load ()   
   EVIO1.MaskOut = 255    ' *** set mask for, "all active", byte operation   
   EVIO1.MaskIn=255       ' *** ditto   
   EVIO1.PortOut = 888    ' *** in decimal, default. You set this to your port   
   EVIO1.PortIn = 889     ' *** in decimal, default. You set this to your port  
   EVIO1.Resolution = 55  ' *** set scan to 55 mS  
   EVIO1.Timer = True     ' *** disable event mode  
   EVIO1.DataOut = 0      ' *** set output data to zero  
   EVIO1.InvertIn = True  ' *** Ground parallel port input bits, negative logic   
   text1.Text = ""        ' *** set up indicator box 
End Sub

' When the system detects a high at bit 4 of the input port it fires  
' bit 1 of the output port

Sub EVIO1_BitIn4 ()   
   bit4t% = bit4% + 1   
   EVIO1.BitOut1 = TRUE
End Sub

' When the system detects a high at bit 5 of the input port it fires  
' bit 2 of the output port

Sub EVIO1_BitIn5 ()   
   bit5% = bit5% + 1   
   EVIO1.BitOut2 = TRUE
End Sub

' When the system detects a high at bit 6 of the input port it fires  
' bit 3 of the output port

Sub EVIO1_BitIn6 ()   
   bit6% = bit6% + 1   
   EVIO1.BitOut3=TRUE 
End Sub

Because EVIO1 uses the window timer, a limit is imposed on the number of  
instances of EVIO1 that can be in the system while in event mode.
Windows 3.1 has a limit of 31 total timers. Keep this in mind when designing
your application. Plus my note above on task yielding. The mouse is another
potential source of interruption.

WHAT NEXT ?,

EVIO uses the windows timer (adjustable down to  55mS ) for parsing out bit
events. HREVIO uses a timer adjustable to 5 mS.

REGISTRATION,

Please see and use ORDER.FRM to obtain a release copy with no registration  
screen. Also, if you register directly on CompuServe you will be e-mailed
the release version with no registration message box generally within 24hrs. 

--> This version may be used for product development on one computer only <-- 

SEE HREVIO documentation for addtional information.

TRADEMARKS,

All brand names and product names used in this document are trademarks,  
registered trademarks, or trade names of their respective holders. 
Principally Microsoft Corporation.







































  

 





