This is a library to use HV507 boards as a switching circuitry which is a module used with an electrical stimulator made by kaji-lab.
Diff: KajiLabHV507B.h
- Revision:
- 0:26eea8042420
- Child:
- 1:f7d6fbcb3bca
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/KajiLabHV507B.h Tue Nov 27 21:25:41 2018 +0000 @@ -0,0 +1,103 @@ +/** + * \file "KajiLabHV507B.h" + * \Author Akifumi TAKAHASHI + * \breif Functions are divided from Associate Prof. Kajimoto's program, + * simple communication. + * \details This program is for using HV507(Shift Register Chip Circuit) for + * electric stimulation. The base Program had been written by Kajimoto Hiroyuki. + * \date 2015/Jul/16th Ver.1 + * \date 2018/Nov/27th Ver.2 Simplified as a pure channel switching program. + */ +#ifndef MBED_HV507DRIVER_H +#define MBED_HV507DRIVER_H + +#include "mbed.h" + +/* -------------------------------------------------------------------------------------------------------- + * HV507 Function table + * -------------------------------------------------------------------------------------------------------- + * Function Input Output + * Data CLK !LE !BL !POL DIR Shift Reg HV Out Data Out + * 1 2~64 1 2-64 + * ======================================================================================================== + * All on X X X L L X * *~* H H-H * + * + * All off X X X L H X * *~* L L-L * + * + * Invert mode X X L H L X * *~* !* !*~!* * + * -------------------------------------------------------------------------------------------------------- + * Load S/R H or L up L H H X H or L *~* * *~* * + * + * Store data X X down H H X * *~* * *~* * + * in latches X X down H L X * *~* !* !*~!* * + * + * Transparent L up H H H X L *~* L *~* * + * latch mode H up H H H X H *~* H *~* * + * -------------------------------------------------------------------------------------------------------- + * I/O Relation DIOA up X X X L Qn -> Qn+1 - DIOB + * DIOB up X X X H Qn -> Qn+1 - DOIA + */ + +class HV507 +{ +public: + /** Construction + * + * \Pram arg_num_of_board the number of Hv507 board. + */ + HV507(const int arg_num_board = 1); + + /** HV507 initialization + */ + void init(); + + void setHtoSR(); + void setLtoSR(); + + /** Function to shift data only index-incresing-direction + * + * \Pram arg_ch stimulation point + */ + void shiftSRBits_by(int arg_num_shifting); + + /** Fill all with zero (ground) + */ + void clearSR(); + + void setCh(const int arg_ch); + + void updateLatches(); + void DEBUG_ALLPIN_ON(); + void DEBUG_ALLPIN_OFF(); + +private: + // HV507 Logical Pins + // Logical Pins Array = (DIOB, CLK, LE, BL, POL) + DigitalOut m_DIOB; ///< Pin to transfer Data input to HV507 + DigitalOut m_BL; ///< Pin to transfer signal !BL(not-Blaker) + DigitalOut m_POL; ///< Pin to transfer signal !POL(not-Pole signal) + DigitalOut m_CLK; ///< Pin to transfer signal Clock + DigitalOut m_LE; ///< Pin to transfer signal !LE(not-Latch Enable) + + /** The number of all pins including in Hv507 boards. + * This is culculated in a constructor + */ + const int m_num_pins; + + /** The constant number that expresses the number of output pins in a HV507 + */ + //enum :int {HV507_NUM_PINS = 64}; + static const int HV507_NUM_PINS = 64; + /** The variable expressing the postion of stimulation point + * + * - 0 : No stimulationpoint + * - 1 ~ (HV507_PIN_NUM * m_num_of_board): a stimulation point; + * if the number of stim points are over than 1, this var means + * the last one. + */ + int m_pos_stim; + + + void putSRCLKahead(); +}; +#endif \ No newline at end of file