Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of PMRC4ch by
Revision 15:56703876e914, committed 2018-06-26
- Comitter:
- aktk
- Date:
- Tue Jun 26 12:19:09 2018 +0000
- Parent:
- 14:d855fefe3451
- Child:
- 16:e81a30a098dd
- Commit message:
- Exchange the values: Anodic := 0 and Cathodic := 1.
Changed in this revision
--- a/PCC8ch.cpp Fri Mar 31 17:27:19 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-#include "PCC8ch.h"
-// A constractor whose arguments have all default value
-// is a default constractor.
-PCC8ch::PCC8ch():
- m_nOE(DigitalOut(p10)),
- m_SCK(DigitalOut(p11)),
- m_POL(DigitalOut(p12)),
- m_RCK(DigitalOut(p13)),
- m_SER(DigitalOut(p14)),
- m_OUT(DigitalIn(p21)),
- m_nSRCLR(DigitalOut(p26))
-{
- m_nOE = 1;//Output be disabled
- allOff();
- m_PCC_POL = Cathodic;
- m_nOE = 0;//Output be enabled
-}
-
-PCC8ch::PCC8ch(
- PinName arg_nOE,
- PinName arg_SCK,
- PinName arg_POL,
- PinName arg_RCK,
- PinName arg_SER,
- PinName arg_OUT,
- PinName arg_nSRCLR
-):
- m_nOE(DigitalOut(arg_nOE)),
- m_SCK(DigitalOut(arg_SCK)),
- m_POL(DigitalOut(arg_POL)),
- m_RCK(DigitalOut(arg_RCK)),
- m_SER(DigitalOut(arg_SER)),
- m_OUT(DigitalIn(arg_OUT)),
- m_nSRCLR(DigitalOut(arg_nSRCLR))
-{
- m_nOE = 1;//Output be disabled
- allOff();
- m_PCC_POL = Cathodic;
- m_nOE = 0;//Output be enabled
-}
-
-char PCC8ch::allOff()
-{
- if (m_PCC_state == ALLOFF) return 1;
- m_nSRCLR = 0; //reset shiftresister
- m_RCK = 1;
- m_RCK = 1;
- m_RCK = 0;
- m_RCK = 0;
- m_nSRCLR = 1; //enable insertion data to SR
- for(int i = 0; i < 8; i++) {
- // insert 1
- m_SER = 1;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- // insert 0
- m_SER = 0;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- }
- //FF Clock Update
- m_RCK = 1;
- m_RCK = 1;
- m_RCK = 0;
- m_RCK = 0;
- m_PCC_state = ALLOFF;
- return static_cast<char>(m_PCC_state);
-}
-
-void PCC8ch::sweep()
-{
- int num_of_shift = 9 - static_cast<int>(m_PCC_state);
-
- shift(num_of_shift);
- m_PCC_state = ALLOFF;
-}
-
-void PCC8ch::shift(int arg_num)
-{
- for(int i = 0; i < arg_num; i++) {
- // insert 1
- m_SER = 1;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- // insert 0
- m_SER = 0;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- }
- //FF Clock Update
- m_RCK = 1;
- m_RCK = 1;
- m_RCK = 0;
- m_RCK = 0;
- m_PCC_state = static_cast<State>((static_cast<int>(m_PCC_state) + arg_num) % 9);
-}
-
-void PCC8ch::setStimbits()
-{
- // insert 0
- m_SER = 0;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- // insert 1
- m_SER = 1;
- m_SCK = 1;
- m_SCK = 1;
- m_SCK = 0;
- m_SCK = 0;
- //FF Clock Update
- m_RCK = 1;
- m_RCK = 1;
- m_RCK = 0;
- m_RCK = 0;
- m_PCC_state = CH1;
-}
-char PCC8ch::setCh(State arg_state, Polarity arg_POL)
-{
- int num_of_shift = static_cast<int>(arg_state) - static_cast<int>(m_PCC_state);
-
- if( num_of_shift < 0 ) {
- sweep();
- num_of_shift = static_cast<int>(arg_state - 1);
- }
-
- if( m_PCC_state == ALLOFF ) setStimbits();
- if( num_of_shift != 0 ) shift(num_of_shift);
-
- m_POL = (bool)(m_PCC_POL = arg_POL);
- return static_cast<char>(m_PCC_state);
-}
\ No newline at end of file
--- a/PCC8ch.h Fri Mar 31 17:27:19 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-#ifndef PCC_8CHANNEL_H
-#define PCC_8CHANNEL_H
-/**
- * PCC8ch.h
- * ----------------------------------------
- * - A Program for Photo Coupler Circuit
- * for 8 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.
- * ----------------------------------------
- * 16 Photo Coupler IN
- * 8 channel OUT
- * +--i o----+----i o--+
- * | [PhC_11] | [PhC_12] |
- * | (ch1(B)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_21] | [PhC_22] |
- * | (ch2(R)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_31] | [PhC_32] |
- * | (ch3(B)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_41] | [PhC_42] |
- * | (ch4(R)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_51] | [PhC_52] |
- * | (ch5(B)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_61] | [PhC_62] |
- * | (ch6(R)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_71] | [PhC_72] |
- * | (ch7(B)out) |
- * | |
- * +--i o----+----i o--+
- * | [PhC_81] | [PhC_82] |
- * | (ch8(R)out) |
- * | |
- * Vpp GND
- * ----------------------------------------
- * Shit-Resister
- * in
- * ->[PhC11]->[PhC12]->[PhC21]->[PhC22]
- * ->[PhC31]->[PhC32]->[PhC41]->[PhC42]
- * ->[PhC51]->[PhC52]->[PhC61]->[PhC62]
- * ->[PhC71]->[PhC72]->[PhC81]->[PhC82]
- * ->out
- * ----------------------------------------
- * Log
- * ver.1 2016/dec/11-
- */
-#include "mbed.h"
-class PCC8ch
-{
-public:
- //
- // Constructor
- //
- PCC8ch();
- PCC8ch(
- PinName nOE,
- PinName SCK,
- PinName POL,
- PinName RCK,
- PinName SER,
- PinName OUT,
- PinName nSRCLR);
-
- // Const.
- enum State {ALLOFF, CH1, CH2, CH3, CH4, CH5, CH6, CH7, CH8};
- enum Polarity {Cathodic = 0, Anodic = 1};
- //
- // Function to set channel
- //
- char allOff();
- char setCh(State ch, Polarity cp = Cathodic);
- //
- // Function to get prameter
- //
- char getState();//inline definition
- bool getPol(); //inline definition
-
-private:
- //
- // Sig var for PMR on/off //(default pin)
- //
- DigitalOut m_nOE; // not Output Enable <=> Output Disenable
- DigitalOut m_SCK; // Shift-resister's clock
- DigitalOut m_POL; // To switch Stimulation Poloarity. H: Anodic, L: Cathodic
- 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
- DigitalOut m_nSRCLR;// not Shift-resister clear. L: Clear the data, H: do nothing.
- //
- // Function to set channel
- //
- void sweep();
- void shift(int times);
- void setStimbits();
- //
- // Var for store state
- //
- State m_PCC_state;
- Polarity m_PCC_POL;
-};
-inline char PCC8ch::getState()
-{
- return static_cast<char>(m_PCC_state);
-}
-inline bool PCC8ch::getPol()
-{
- return static_cast<bool>(m_PCC_POL);
-}
-#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PMRC16ch.cpp Tue Jun 26 12:19:09 2018 +0000
@@ -0,0 +1,166 @@
+#include "PMRC16ch.h"
+// A constractor whose arguments have all default value
+// is a default constractor.
+PMRC16ch::PMRC16ch():
+ m_num_ch(16),
+ m_SCK(DigitalOut(p11)),
+ m_CLR(DigitalOut(p12)),
+ m_RCK(DigitalOut(p13)),
+ m_SER(DigitalOut(p14)),
+ m_OUT(DigitalIn(p10))
+{
+ init();
+}
+
+PMRC16ch::PMRC16ch(
+ uint8_t arg_num_ch,
+ PinName arg_SCK,
+ PinName arg_CLR,
+ PinName arg_RCK,
+ PinName arg_SER,
+ PinName arg_OUT
+):
+ m_num_ch(arg_num_ch),
+ m_SCK(DigitalOut(arg_SCK)),
+ m_CLR(DigitalOut(arg_CLR)),
+ m_RCK(DigitalOut(arg_RCK)),
+ m_SER(DigitalOut(arg_SER)),
+ m_OUT(DigitalIn(arg_OUT))
+{
+ init();
+}
+
+void PMRC16ch::init()
+{
+ m_CLR = 1;
+ m_SCK = m_RCK = 0;
+ m_PMRC_state = NaN;
+ allOff();
+ m_PMRC_POL = Cathodic;
+}
+
+char PMRC16ch::allOff()
+{
+ if (m_PMRC_state == ALLOFF) return 1;
+ /*
+ //reset shiftresister
+ m_CLR = 0;
+ update();
+ //enable insertion data to SR
+ m_CLR = 1;
+ */
+ //set all channel gnd
+ //shiftby(16);
+ sweep();
+ upload();
+ return static_cast<char>(m_PMRC_state = ALLOFF);
+}
+
+char PMRC16ch::setCh(State arg_state, Polarity arg_POL)
+{
+ int num_of_shift = static_cast<int>(arg_state) - static_cast<int>(m_PMRC_state);
+
+ if( num_of_shift < 0 )
+ sweep();
+
+ if( m_PMRC_state == ALLOFF ) {
+ setStimbits();
+ num_of_shift = static_cast<char>(arg_state - 1);
+ }
+ shiftby(num_of_shift);
+ upload();
+
+ m_PMRC_POL = arg_POL;
+ return static_cast<char>(m_PMRC_state = arg_state);
+}
+char PMRC16ch::setCh(char arg_state, Polarity arg_POL)
+{
+ int8_t num_of_shift = arg_state - static_cast<int8_t>(m_PMRC_state);
+
+ if( num_of_shift < 0 )
+ sweep();
+
+ if( m_PMRC_state == ALLOFF ) {
+ setStimbits();
+ num_of_shift = static_cast<char>(arg_state - 1);
+ }
+ shiftby(num_of_shift);
+ upload();
+
+ m_PMRC_POL = arg_POL;
+ return static_cast<char>(m_PMRC_state = static_cast<State>(arg_state));
+}
+
+void PMRC16ch::allHiZ()
+{
+ //reset shiftresister
+ m_CLR = 0;
+ update();
+ //enable insertion data to SR
+ m_CLR = 1;
+ upload();
+}
+
+void PMRC16ch::setBits(const uint32_t bits, int num_of_bits, Polarity arg_POL)
+{
+ //reset shiftresister
+ m_CLR = 0;
+ update();
+ //enable insertion data to SR
+ m_CLR = 1;
+ for(int i = 0; i < num_of_bits; i++){
+ m_SER = ((bits >> i) & 0b0001);
+ update();
+ }
+ upload();
+
+ m_PMRC_POL = arg_POL;
+}
+
+void PMRC16ch::sweep()
+{
+ int num_of_shift = (16 + 1) - static_cast<int>(m_PMRC_state);
+
+ shiftby(num_of_shift);
+ m_PMRC_state = ALLOFF;
+}
+
+void PMRC16ch::shiftby(int arg_num)
+{
+ for(int i = 0; i < arg_num; i++) {
+ // insert 1
+ m_SER = 1;
+ update();
+ // insert 0
+ m_SER = 0;
+ update();
+ }
+ m_PMRC_state = static_cast<State>((static_cast<int>(m_PMRC_state) + arg_num) % (16 + 1));
+}
+
+void PMRC16ch::setStimbits()
+{
+ // insert 0
+ m_SER = 0;
+ update();
+ // insert 1
+ m_SER = 1;
+ update();
+ m_PMRC_state = CH1;
+}
+void PMRC16ch::update()
+{
+ //Shift-resister Clock update
+ m_SCK = 1;
+ m_SCK = 1;
+ m_SCK = 0;
+ m_SCK = 0;
+}
+void PMRC16ch::upload()
+{
+ //FF Clock Update
+ m_RCK = 1;
+ m_RCK = 1;
+ m_RCK = 0;
+ m_RCK = 0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PMRC16ch.h Tue Jun 26 12:19:09 2018 +0000
@@ -0,0 +1,123 @@
+#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 {ALLOFF = 0, CH1 = 1, CH2, CH3, CH4, CH5, CH6, CH7, CH8,
+ CH9, CH10, CH11, CH12, CH13, CH14, CH15, CH16, NaN = 9999};
+ enum Polarity {Anodic = 0, Cathodic = 1};
+ //
+ // Function to set channel
+ //
+ char allOff();
+ 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
\ No newline at end of file
