Link here

Power I/O C Demo


This demonstration program is included to provide an example of instrumentation using the Power I/O Wildcard. This C language demo show how simple it is to use the 8 opto-isolated current-sinking MOSFET outputs provided by the Power I/O Wildcard. The example program first initializes the DC solid state relays (SSR). Then a the outputs are individually turned on and off in sequence. The 4 inputs are then read and printed out to the serial terminal. This gives you a simple example of how to use this card.

Listing 1-1 C Code to control the Power I/O Module.

// *********************************************************************
// FILE NAME:   powerio.c
// ---------------------------------------------------------------------
// AUTHOR:      BEN MORSE
// DATE:        5/7/2009
// VERSION:     1.0
// ---------------------------------------------------------------------
// This is the driver code for the Power I/O Wildcard.
// This code:
//     -Turns each output on.
//     -Returns the state of the ouputs.
//     -Turns each output off.
//     -Returns the state of the inputs.
// ---------------------------------------------------------------------
// Important user words:
// SetOutput:             Turn the specified output ON
// ClearOutput:           Turn the specified output OFF
// ReadOutput:            Returns the state of all outputs.
// ReadInput:             Returns the state of all 4 inputs.
// WPWR_MODULE_NUM        this constant MUST match hardware jumper settings!
// ---------------------------------------------------------------------
//
// Disclaimer: THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
//             ANY WARRANTIES OR REPRESENTATIONS EXPRESS OR IMPLIED,
//             INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES
//             OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
//
// *********************************************************************
 
 
#include <mosaic\allqed.h>         // Include QED header files
 
#ifndef __GNUC__
#include "../../libraries/include/io_access.h"
#include "../../libraries/include/io_access.c"
#endif
 
// NOTE: YOU MUST MAKE SURE THAT THIS CONSTANT CORRESPONDS TO YOUR MODULE SELECT JUMPERS!
// For example, to access the Wildcard at address 4:
//    remove both module select jumper caps and mount the card on Wildcard Module Bus 1
#define WPWR_MODULE_NUM 4
// Note: if you are using a QScreen or Handheld, accessing a wildcard at module address 0
// is not allowed; this module address is reserved for the GUI on the QScreen and Handheld.
 
 
 
#define OUTPUT_OFFSET 0x00
#define INPUT_OFFSET  0x01
 
 
// module_num = the hardware jumper setting described in Table 1-2.
// valid module numbers are 0 to 7.
// bit = a bit mask with 1’s in the position of bits to be set.
void SetOutput( uchar bit, uchar module_num )
{
  IOSetBits(bit, OUTPUT_OFFSET, module_num);
}
 
// module_num = the hardware jumper setting described in Table 1-2.
// valid module numbers are 0 to 7.
// bit = a bit mask with 1’s in the position of bits to be cleared.
void ClearOutput( uchar bit, uchar module_num )
{
  IOClearBits(bit, OUTPUT_OFFSET, module_num);
}
 
// module_num = the hardware jumper setting described in Table 1-2.
// valid module numbers are 0 to 7.
uchar ReadOutput( uchar module_num )
{
  uchar output_status;
  output_status = IOFetchChar( OUTPUT_OFFSET, module_num );
  return( output_status );
}
 
// module_num = the hardware jumper setting described in Table 1-2.
// valid module numbers are 0 to 7.
uchar ReadInput( uchar module_num )
{
  uchar input_status;
  input_status = IOFetchChar( INPUT_OFFSET, module_num );
  return( input_status );
}
 
int main( void )
{
    uchar input;
    int i;
 
    printf("\npress enter to turn on the first output.\n");
    Key();
   SetOutput( 0x1, WPWR_MODULE_NUM );  // turn on 1st output
   printf("press enter to turn on the second output.\n");
    Key();
   SetOutput( 0x2, WPWR_MODULE_NUM );  // turn on 2nd output
   printf("press enter to turn on the third output.\n");
    Key();
   SetOutput( 0x4, WPWR_MODULE_NUM );  // turn on 3rd output
   printf("press enter to turn on the forth output.\n");
    Key();
   SetOutput( 0x8, WPWR_MODULE_NUM );  // turn on 4th output
 
    // since we have set the first four bits high, the result should be 0x0F
 
     printf("the outputs report a state of: 0x%02X (should be 0x0F)\n", ReadOutput(WPWR_MODULE_NUM) );
 
   printf("press enter to turn on the fifth output.\n");
    Key();
   SetOutput( 0x10, WPWR_MODULE_NUM );  // turn on 5th output
   printf("press enter to turn on the sixth output.\n");
    Key();
   SetOutput( 0x20, WPWR_MODULE_NUM );  // turn on 6th output
   printf("press enter to turn on the seventh output.\n");
    Key();
   SetOutput( 0x40, WPWR_MODULE_NUM );  // turn on 7th output
   printf("press enter to turn on the eighth output.\n");
    Key();
   SetOutput( 0x80, WPWR_MODULE_NUM );  // turn on 8th output
 
   // with all outputs on, the result should be 0xFF
   printf("the outputs report a state of: 0x%02X (should be 0xFF)\n", ReadOutput(WPWR_MODULE_NUM) );
 
    printf("press enter to turn off the first output.\n");
    Key();
   ClearOutput( 0x1, WPWR_MODULE_NUM );  // turn off 1st output
   printf("press enter to turn off the second output.\n");
    Key();
   ClearOutput( 0x2, WPWR_MODULE_NUM );  // turn off 2nd output
   printf("press enter to turn off the third output.\n");
    Key();
   ClearOutput( 0x4, WPWR_MODULE_NUM );  // turn off 3rd output
   printf("press enter to turn off the forth output.\n");
    Key();
   ClearOutput( 0x8, WPWR_MODULE_NUM );  // turn off 4th output
   printf("press enter to turn off the fifth output.\n");
    Key();
   ClearOutput( 0x10, WPWR_MODULE_NUM );  // turn off 5th output
   printf("press enter to turn off the sixth output.\n");
    Key();
   ClearOutput( 0x20, WPWR_MODULE_NUM );  // turn off 6th output
   printf("press enter to turn off the seventh output.\n");
    Key();
   ClearOutput( 0x40, WPWR_MODULE_NUM );  // turn off 7th output
   printf("press enter to turn off the eighth output.\n");
    Key();
   ClearOutput( 0x80, WPWR_MODULE_NUM );  // turn off 8th output
 
   // read digital inputs
   printf("------------------------------------------\n");
   printf("press enter to read all four inputs.\n");
    Key();
   input = ReadInput( WPWR_MODULE_NUM );  // read all inputs at once
 
   printf("Input:   State:\n");
 
   // loop 4 times, each time shifting input to the right
   // if the lsb is true, then that input was HIGH
   for( i = 1; i <= 4; i++ )
   {
        // print the number and some spaces
        printf(" %d        ", i);
 
        if( input & 0x1 )
            printf("HIGH\n");
        else
            printf("LOW\n");
 
        input = input >> 1;  //shift for next loop
    }
 
    return 0;
}



See more examples → Power I/O Forth Demo
Power I/O Wildcard User Guide

 
 
 
Navigation
 
Registration on or use of this site constitutes acceptance of our User Agreement and Privacy Policy. Purchase of Mosaic's products constitutes acceptance of the End User License Agreement, Sales Terms and Conditions, and Life Support policy. Mosaic’s products are not authorized for use as components in life support or medical devices. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Mosaic Industries, Inc. Mosaic and other product names are trademarked and should be capitalized when reproduced. You are encouraged to link to pages of this site.

© Mosaic Industries, Inc. All rights reserved.