Library to use my Photo MOS Relays Circuit having 16 or less channels.
Fork of PMRC4ch by
PMRC16ch.h
- Committer:
- aktk
- Date:
- 2018-06-26
- Revision:
- 19:1112aeb5cddd
- Parent:
- 18:049283936e3f
- Child:
- 20:26972de3cf90
File content as of revision 19:1112aeb5cddd:
#ifndef PMRC_16CHANNEL_H #define PMRC_16CHANNEL_H /** * PMRC16ch.h * ---------------------------------------- * - A Program with which to control * Photo MOS Relay Circuit * for 16 channels Electric Stimulation. * which ES circuit made by Ph.D. Kajimoto. * Photo Couplers are controlled by Shift- * Resisters. So this lib serves sift- * resister's utility. * ---------------------------------------- * 32 Photo MOS Relay IN * 16 channel OUT * +--i o----+----i o--+ * | [PMR01-1] | [PMR01-2] | * | (ch1(B)out) | * | | * +--i o----+----i o--+ * | [PMR02-1] | [PMR02-2] | * | (ch2(R)out) | * | | * . . . * . . . * . . . * Vpp GND * ---------------------------------------- * Shit-Resister * nOE is connected to GND * in * ->[PMR01-1]->[PMR01-2]->[PMR02-1]->[PMR02-2] * ->[PMR03-1]->[PMR03-2]->[PMR04-1]->[PMR04-2] * ->[PMR05-1]->[PMR05-2]->[PMR06-1]->[PMR06-2] * ->[PMR07-1]->[PMR07-2]->[PMR08-1]->[PMR08-2] * ->[PMR09-1]->[PMR09-2]->[PMR10-1]->[PMR10-2] * ->[PMR11-1]->[PMR11-2]->[PMR12-1]->[PMR12-2] * ->[PMR13-1]->[PMR13-2]->[PMR14-1]->[PMR14-2] * ->[PMR15-1]->[PMR15-2]->[PMR16-1]->[PMR16-2] * ->out * ---------------------------------------- * Log * ver.1 2016/dec/11- * ch.16 VER. * ver.16.1 2018/jun/01- */ #include "mbed.h" class PMRC16ch { public: // // Constructor // PMRC16ch(); PMRC16ch( uint8_t arg_num_ch, PinName arg_SCK, PinName arg_CLR, PinName arg_RCK, PinName arg_SER, PinName arg_OUT ); // Const. enum State { ALLGROUND = 0, CH1 = 0b/*1V*/1000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH2 = 0b/*1V*/0010/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH3 = 0b/*1V*/0000/**/1000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH4 = 0b/*1V*/0000/**/0010/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH5 = 0b/*1V*/0000/**/0000/**/1000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH6 = 0b/*1V*/0000/**/0000/**/0010/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH7 = 0b/*1V*/0000/**/0000/**/0000/**/1000/**/0000/**/0000/**/0000/**/0000/*16G*/, CH8 = 0b/*1V*/0000/**/0000/**/0000/**/0010/**/0000/**/0000/**/0000/**/0000/*16G*/, CH9 = 0b/*1V*/0000/**/0000/**/0000/**/0000/**/1000/**/0000/**/0000/**/0000/*16G*/, CH10= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0010/**/0000/**/0000/**/0000/*16G*/, CH11= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/1000/**/0000/**/0000/*16G*/, CH12= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0010/**/0000/**/0000/*16G*/, CH13= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/1000/**/0000/*16G*/, CH14= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0010/**/0000/*16G*/, CH15= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/1000/*16G*/, CH16= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0010/*16G*/, ALLHiZ = 9999 }; enum Polarity {Anodic = 0, Cathodic = 1}; // // Function to set channel // char allGround(); char setCh(State ch, Polarity cp = Cathodic); char setCh(char ch, Polarity cp = Cathodic); void allHiZ(); void setBits(uint32_t bits, int num_of_bits, Polarity cp = Cathodic); // // Function to get prameter // char getState();//inline definition bool getPol(); //inline definition private: // // Sig var to controll PRM circuit // uint8_t m_num_ch; // The number of channels to use DigitalOut m_SCK; // Shift-resister's clock DigitalOut m_CLR; // To use when you want to clear shift-resister DigitalOut m_RCK; // FF's clock DigitalOut m_SER; // Serial input to shift data in a shift-resister DigitalIn m_OUT; // Output data overflowed from shift-resister // Initialization void init(); // // Function to set channel // // shift the bits arbitary times void shiftby(int times); // this is the function with which to rapidly set it all-off void sweep(); // set the simulation bits of 01 void setStimbits(); //update the clock of shift-resister void update(); // output the data by uploading them to FF Resitors void upload(); // // Var for store state // State m_PMRC_state; Polarity m_PMRC_POL; }; inline char PMRC16ch::getState() { return static_cast<char>(m_PMRC_state); } inline bool PMRC16ch::getPol() { //return false if cathodic //return true if anodic return static_cast<bool>(m_PMRC_POL); } #endif