Library to use my Photo MOS Relays Circuit having 16 or less channels.
Fork of PMRC4ch by
PMRC16ch.h@19:1112aeb5cddd, 2018-06-26 (annotated)
- Committer:
- aktk
- Date:
- Tue Jun 26 13:14:16 2018 +0000
- Revision:
- 19:1112aeb5cddd
- Parent:
- 18:049283936e3f
- Child:
- 20:26972de3cf90
modified the value of States CH? expressing them by binary
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aktk | 15:56703876e914 | 1 | #ifndef PMRC_16CHANNEL_H |
aktk | 15:56703876e914 | 2 | #define PMRC_16CHANNEL_H |
aktk | 15:56703876e914 | 3 | /** |
aktk | 15:56703876e914 | 4 | * PMRC16ch.h |
aktk | 15:56703876e914 | 5 | * ---------------------------------------- |
aktk | 15:56703876e914 | 6 | * - A Program with which to control |
aktk | 15:56703876e914 | 7 | * Photo MOS Relay Circuit |
aktk | 15:56703876e914 | 8 | * for 16 channels Electric Stimulation. |
aktk | 15:56703876e914 | 9 | * which ES circuit made by Ph.D. Kajimoto. |
aktk | 15:56703876e914 | 10 | * Photo Couplers are controlled by Shift- |
aktk | 15:56703876e914 | 11 | * Resisters. So this lib serves sift- |
aktk | 15:56703876e914 | 12 | * resister's utility. |
aktk | 15:56703876e914 | 13 | * ---------------------------------------- |
aktk | 15:56703876e914 | 14 | * 32 Photo MOS Relay IN |
aktk | 15:56703876e914 | 15 | * 16 channel OUT |
aktk | 15:56703876e914 | 16 | * +--i o----+----i o--+ |
aktk | 15:56703876e914 | 17 | * | [PMR01-1] | [PMR01-2] | |
aktk | 15:56703876e914 | 18 | * | (ch1(B)out) | |
aktk | 15:56703876e914 | 19 | * | | |
aktk | 15:56703876e914 | 20 | * +--i o----+----i o--+ |
aktk | 15:56703876e914 | 21 | * | [PMR02-1] | [PMR02-2] | |
aktk | 15:56703876e914 | 22 | * | (ch2(R)out) | |
aktk | 15:56703876e914 | 23 | * | | |
aktk | 15:56703876e914 | 24 | * . . . |
aktk | 15:56703876e914 | 25 | * . . . |
aktk | 15:56703876e914 | 26 | * . . . |
aktk | 15:56703876e914 | 27 | * Vpp GND |
aktk | 15:56703876e914 | 28 | * ---------------------------------------- |
aktk | 15:56703876e914 | 29 | * Shit-Resister |
aktk | 15:56703876e914 | 30 | * nOE is connected to GND |
aktk | 15:56703876e914 | 31 | * in |
aktk | 15:56703876e914 | 32 | * ->[PMR01-1]->[PMR01-2]->[PMR02-1]->[PMR02-2] |
aktk | 15:56703876e914 | 33 | * ->[PMR03-1]->[PMR03-2]->[PMR04-1]->[PMR04-2] |
aktk | 15:56703876e914 | 34 | * ->[PMR05-1]->[PMR05-2]->[PMR06-1]->[PMR06-2] |
aktk | 15:56703876e914 | 35 | * ->[PMR07-1]->[PMR07-2]->[PMR08-1]->[PMR08-2] |
aktk | 15:56703876e914 | 36 | * ->[PMR09-1]->[PMR09-2]->[PMR10-1]->[PMR10-2] |
aktk | 15:56703876e914 | 37 | * ->[PMR11-1]->[PMR11-2]->[PMR12-1]->[PMR12-2] |
aktk | 15:56703876e914 | 38 | * ->[PMR13-1]->[PMR13-2]->[PMR14-1]->[PMR14-2] |
aktk | 15:56703876e914 | 39 | * ->[PMR15-1]->[PMR15-2]->[PMR16-1]->[PMR16-2] |
aktk | 15:56703876e914 | 40 | * ->out |
aktk | 15:56703876e914 | 41 | * ---------------------------------------- |
aktk | 15:56703876e914 | 42 | * Log |
aktk | 15:56703876e914 | 43 | * ver.1 2016/dec/11- |
aktk | 15:56703876e914 | 44 | * ch.16 VER. |
aktk | 15:56703876e914 | 45 | * ver.16.1 2018/jun/01- |
aktk | 15:56703876e914 | 46 | */ |
aktk | 15:56703876e914 | 47 | #include "mbed.h" |
aktk | 15:56703876e914 | 48 | class PMRC16ch |
aktk | 15:56703876e914 | 49 | { |
aktk | 15:56703876e914 | 50 | public: |
aktk | 15:56703876e914 | 51 | // |
aktk | 15:56703876e914 | 52 | // Constructor |
aktk | 15:56703876e914 | 53 | // |
aktk | 15:56703876e914 | 54 | PMRC16ch(); |
aktk | 15:56703876e914 | 55 | PMRC16ch( |
aktk | 15:56703876e914 | 56 | uint8_t arg_num_ch, |
aktk | 15:56703876e914 | 57 | PinName arg_SCK, |
aktk | 15:56703876e914 | 58 | PinName arg_CLR, |
aktk | 15:56703876e914 | 59 | PinName arg_RCK, |
aktk | 15:56703876e914 | 60 | PinName arg_SER, |
aktk | 15:56703876e914 | 61 | PinName arg_OUT |
aktk | 19:1112aeb5cddd | 62 | ); |
aktk | 15:56703876e914 | 63 | |
aktk | 15:56703876e914 | 64 | // Const. |
aktk | 19:1112aeb5cddd | 65 | enum State { |
aktk | 19:1112aeb5cddd | 66 | ALLGROUND = 0, |
aktk | 19:1112aeb5cddd | 67 | CH1 = 0b/*1V*/1000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 68 | CH2 = 0b/*1V*/0010/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 69 | CH3 = 0b/*1V*/0000/**/1000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 70 | CH4 = 0b/*1V*/0000/**/0010/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 71 | CH5 = 0b/*1V*/0000/**/0000/**/1000/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 72 | CH6 = 0b/*1V*/0000/**/0000/**/0010/**/0000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 73 | CH7 = 0b/*1V*/0000/**/0000/**/0000/**/1000/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 74 | CH8 = 0b/*1V*/0000/**/0000/**/0000/**/0010/**/0000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 75 | CH9 = 0b/*1V*/0000/**/0000/**/0000/**/0000/**/1000/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 76 | CH10= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0010/**/0000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 77 | CH11= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/1000/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 78 | CH12= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0010/**/0000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 79 | CH13= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/1000/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 80 | CH14= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0010/**/0000/*16G*/, |
aktk | 19:1112aeb5cddd | 81 | CH15= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/1000/*16G*/, |
aktk | 19:1112aeb5cddd | 82 | CH16= 0b/*1V*/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0000/**/0010/*16G*/, |
aktk | 19:1112aeb5cddd | 83 | ALLHiZ = 9999 |
aktk | 19:1112aeb5cddd | 84 | }; |
aktk | 15:56703876e914 | 85 | enum Polarity {Anodic = 0, Cathodic = 1}; |
aktk | 15:56703876e914 | 86 | // |
aktk | 15:56703876e914 | 87 | // Function to set channel |
aktk | 15:56703876e914 | 88 | // |
aktk | 17:08a68860396b | 89 | char allGround(); |
aktk | 15:56703876e914 | 90 | char setCh(State ch, Polarity cp = Cathodic); |
aktk | 15:56703876e914 | 91 | char setCh(char ch, Polarity cp = Cathodic); |
aktk | 15:56703876e914 | 92 | void allHiZ(); |
aktk | 15:56703876e914 | 93 | void setBits(uint32_t bits, int num_of_bits, Polarity cp = Cathodic); |
aktk | 15:56703876e914 | 94 | // |
aktk | 15:56703876e914 | 95 | // Function to get prameter |
aktk | 15:56703876e914 | 96 | // |
aktk | 15:56703876e914 | 97 | char getState();//inline definition |
aktk | 15:56703876e914 | 98 | bool getPol(); //inline definition |
aktk | 15:56703876e914 | 99 | |
aktk | 15:56703876e914 | 100 | private: |
aktk | 15:56703876e914 | 101 | // |
aktk | 15:56703876e914 | 102 | // Sig var to controll PRM circuit |
aktk | 15:56703876e914 | 103 | // |
aktk | 19:1112aeb5cddd | 104 | uint8_t m_num_ch; // The number of channels to use |
aktk | 15:56703876e914 | 105 | DigitalOut m_SCK; // Shift-resister's clock |
aktk | 15:56703876e914 | 106 | DigitalOut m_CLR; // To use when you want to clear shift-resister |
aktk | 15:56703876e914 | 107 | DigitalOut m_RCK; // FF's clock |
aktk | 15:56703876e914 | 108 | DigitalOut m_SER; // Serial input to shift data in a shift-resister |
aktk | 15:56703876e914 | 109 | DigitalIn m_OUT; // Output data overflowed from shift-resister |
aktk | 15:56703876e914 | 110 | // Initialization |
aktk | 15:56703876e914 | 111 | void init(); |
aktk | 15:56703876e914 | 112 | // |
aktk | 15:56703876e914 | 113 | // Function to set channel |
aktk | 15:56703876e914 | 114 | // |
aktk | 15:56703876e914 | 115 | // shift the bits arbitary times |
aktk | 15:56703876e914 | 116 | void shiftby(int times); |
aktk | 15:56703876e914 | 117 | // this is the function with which to rapidly set it all-off |
aktk | 15:56703876e914 | 118 | void sweep(); |
aktk | 15:56703876e914 | 119 | // set the simulation bits of 01 |
aktk | 15:56703876e914 | 120 | void setStimbits(); |
aktk | 15:56703876e914 | 121 | //update the clock of shift-resister |
aktk | 15:56703876e914 | 122 | void update(); |
aktk | 15:56703876e914 | 123 | // output the data by uploading them to FF Resitors |
aktk | 15:56703876e914 | 124 | void upload(); |
aktk | 15:56703876e914 | 125 | // |
aktk | 15:56703876e914 | 126 | // Var for store state |
aktk | 15:56703876e914 | 127 | // |
aktk | 15:56703876e914 | 128 | State m_PMRC_state; |
aktk | 15:56703876e914 | 129 | Polarity m_PMRC_POL; |
aktk | 15:56703876e914 | 130 | }; |
aktk | 15:56703876e914 | 131 | inline char PMRC16ch::getState() |
aktk | 15:56703876e914 | 132 | { |
aktk | 15:56703876e914 | 133 | return static_cast<char>(m_PMRC_state); |
aktk | 15:56703876e914 | 134 | } |
aktk | 15:56703876e914 | 135 | inline bool PMRC16ch::getPol() |
aktk | 15:56703876e914 | 136 | { |
aktk | 15:56703876e914 | 137 | //return false if cathodic |
aktk | 15:56703876e914 | 138 | //return true if anodic |
aktk | 15:56703876e914 | 139 | return static_cast<bool>(m_PMRC_POL); |
aktk | 15:56703876e914 | 140 | } |
aktk | 15:56703876e914 | 141 | #endif |