Library to use my Photo MOS Relays Circuit having 16 or less channels.
Fork of PMRC4ch by
PMRC16ch.h@20:26972de3cf90, 2018-06-28 (annotated)
- Committer:
- aktk
- Date:
- Thu Jun 28 08:49:54 2018 +0000
- Revision:
- 20:26972de3cf90
- Parent:
- 19:1112aeb5cddd
- Child:
- 21:fa067e2a30f2
modified type of some methods: char -> void, type of getState(): char -> uint32_t
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 | 20:26972de3cf90 | 67 | CH1 = /*1V*/0b10000000/**/00000000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 68 | CH2 = /*1V*/0b00100000/**/00000000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 69 | CH3 = /*1V*/0b00001000/**/00000000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 70 | CH4 = /*1V*/0b00000010/**/00000000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 71 | CH5 = /*1V*/0b00000000/**/10000000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 72 | CH6 = /*1V*/0b00000000/**/00100000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 73 | CH7 = /*1V*/0b00000000/**/00001000/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 74 | CH8 = /*1V*/0b00000000/**/00000010/**/00000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 75 | CH9 = /*1V*/0b00000000/**/00000000/**/10000000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 76 | CH10= /*1V*/0b00000000/**/00000000/**/00100000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 77 | CH11= /*1V*/0b00000000/**/00000000/**/00001000/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 78 | CH12= /*1V*/0b00000000/**/00000000/**/00000010/**/00000000/*16G*/, |
aktk | 20:26972de3cf90 | 79 | CH13= /*1V*/0b00000000/**/00000000/**/00000000/**/10000000/*16G*/, |
aktk | 20:26972de3cf90 | 80 | CH14= /*1V*/0b00000000/**/00000000/**/00000000/**/00100000/*16G*/, |
aktk | 20:26972de3cf90 | 81 | CH15= /*1V*/0b00000000/**/00000000/**/00000000/**/00001000/*16G*/, |
aktk | 20:26972de3cf90 | 82 | CH16= /*1V*/0b00000000/**/00000000/**/00000000/**/00000010/*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 | 20:26972de3cf90 | 89 | void allGround(); |
aktk | 15:56703876e914 | 90 | void allHiZ(); |
aktk | 20:26972de3cf90 | 91 | void setCh(char ch, Polarity cp = Cathodic); |
aktk | 15:56703876e914 | 92 | void setBits(uint32_t bits, int num_of_bits, Polarity cp = Cathodic); |
aktk | 15:56703876e914 | 93 | // |
aktk | 15:56703876e914 | 94 | // Function to get prameter |
aktk | 15:56703876e914 | 95 | // |
aktk | 20:26972de3cf90 | 96 | uint32_t getState();//inline definition |
aktk | 15:56703876e914 | 97 | bool getPol(); //inline definition |
aktk | 15:56703876e914 | 98 | |
aktk | 15:56703876e914 | 99 | private: |
aktk | 15:56703876e914 | 100 | // |
aktk | 15:56703876e914 | 101 | // Sig var to controll PRM circuit |
aktk | 15:56703876e914 | 102 | // |
aktk | 19:1112aeb5cddd | 103 | uint8_t m_num_ch; // The number of channels to use |
aktk | 15:56703876e914 | 104 | DigitalOut m_SCK; // Shift-resister's clock |
aktk | 15:56703876e914 | 105 | DigitalOut m_CLR; // To use when you want to clear shift-resister |
aktk | 15:56703876e914 | 106 | DigitalOut m_RCK; // FF's clock |
aktk | 15:56703876e914 | 107 | DigitalOut m_SER; // Serial input to shift data in a shift-resister |
aktk | 15:56703876e914 | 108 | DigitalIn m_OUT; // Output data overflowed from shift-resister |
aktk | 15:56703876e914 | 109 | // Initialization |
aktk | 15:56703876e914 | 110 | void init(); |
aktk | 15:56703876e914 | 111 | // |
aktk | 15:56703876e914 | 112 | // Function to set channel |
aktk | 15:56703876e914 | 113 | // |
aktk | 15:56703876e914 | 114 | // shift the bits arbitary times |
aktk | 15:56703876e914 | 115 | void shiftby(int times); |
aktk | 15:56703876e914 | 116 | // this is the function with which to rapidly set it all-off |
aktk | 15:56703876e914 | 117 | void sweep(); |
aktk | 15:56703876e914 | 118 | // set the simulation bits of 01 |
aktk | 15:56703876e914 | 119 | void setStimbits(); |
aktk | 15:56703876e914 | 120 | //update the clock of shift-resister |
aktk | 15:56703876e914 | 121 | void update(); |
aktk | 15:56703876e914 | 122 | // output the data by uploading them to FF Resitors |
aktk | 15:56703876e914 | 123 | void upload(); |
aktk | 15:56703876e914 | 124 | // |
aktk | 15:56703876e914 | 125 | // Var for store state |
aktk | 15:56703876e914 | 126 | // |
aktk | 20:26972de3cf90 | 127 | uint32_t m_PMRC_state; |
aktk | 15:56703876e914 | 128 | Polarity m_PMRC_POL; |
aktk | 15:56703876e914 | 129 | }; |
aktk | 20:26972de3cf90 | 130 | inline uint32_t PMRC16ch::getState() |
aktk | 15:56703876e914 | 131 | { |
aktk | 20:26972de3cf90 | 132 | return static_cast<uint32_t>(m_PMRC_state); |
aktk | 15:56703876e914 | 133 | } |
aktk | 15:56703876e914 | 134 | inline bool PMRC16ch::getPol() |
aktk | 15:56703876e914 | 135 | { |
aktk | 15:56703876e914 | 136 | //return false if cathodic |
aktk | 15:56703876e914 | 137 | //return true if anodic |
aktk | 15:56703876e914 | 138 | return static_cast<bool>(m_PMRC_POL); |
aktk | 15:56703876e914 | 139 | } |
aktk | 15:56703876e914 | 140 | #endif |