Telescope Control Library

Dependents:   PushToGo-F429

Committer:
caoyu@caoyuan9642-desktop.MIT.EDU
Date:
Mon Sep 24 19:36:48 2018 -0400
Revision:
19:fd854309cb4c
Parent:
0:6cb2eaf8b133
Fix bug in nudging with small speeds mentioned in the last commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyuan9642 0:6cb2eaf8b133 1 /*
caoyuan9642 0:6cb2eaf8b133 2 * SerialDigitalInput.h
caoyuan9642 0:6cb2eaf8b133 3 *
caoyuan9642 0:6cb2eaf8b133 4 * Created on: 2018Äê2ÔÂ10ÈÕ
caoyuan9642 0:6cb2eaf8b133 5 * Author: caoyuan9642
caoyuan9642 0:6cb2eaf8b133 6 */
caoyuan9642 0:6cb2eaf8b133 7
caoyuan9642 0:6cb2eaf8b133 8 #ifndef TELESCOPE_SERIALDIGITALINPUT_H_
caoyuan9642 0:6cb2eaf8b133 9 #define TELESCOPE_SERIALDIGITALINPUT_H_
caoyuan9642 0:6cb2eaf8b133 10
caoyuan9642 0:6cb2eaf8b133 11 #include "mbed.h"
caoyuan9642 0:6cb2eaf8b133 12
caoyuan9642 0:6cb2eaf8b133 13 /**
caoyuan9642 0:6cb2eaf8b133 14 * A serial interfaced digital input
caoyuan9642 0:6cb2eaf8b133 15 * Example application is to read a parallel input (8~32 bits) using cascaded 74xx165.
caoyuan9642 0:6cb2eaf8b133 16 */
caoyuan9642 0:6cb2eaf8b133 17 template<uint8_t N>
caoyuan9642 0:6cb2eaf8b133 18 class SerialDigitalInput
caoyuan9642 0:6cb2eaf8b133 19 {
caoyuan9642 0:6cb2eaf8b133 20 public:
caoyuan9642 0:6cb2eaf8b133 21 SerialDigitalInput(PinName c, PinName l, PinName d) :
caoyuan9642 0:6cb2eaf8b133 22 clk(DigitalOut(c)), load(DigitalOut(l)), data(DigitalIn(d))
caoyuan9642 0:6cb2eaf8b133 23 {
caoyuan9642 0:6cb2eaf8b133 24 if (clk == NC || load == NC || data == NC)
caoyuan9642 0:6cb2eaf8b133 25 {
caoyuan9642 0:6cb2eaf8b133 26 fprintf(stderr, "ERROR in SerialDigitalInput: PIN(s) undefined");
caoyuan9642 0:6cb2eaf8b133 27 return;
caoyuan9642 0:6cb2eaf8b133 28 }
caoyuan9642 0:6cb2eaf8b133 29
caoyuan9642 0:6cb2eaf8b133 30 /*Prepare for next reading*/
caoyuan9642 0:6cb2eaf8b133 31 clk = 0;
caoyuan9642 0:6cb2eaf8b133 32 load = 1;
caoyuan9642 0:6cb2eaf8b133 33 }
caoyuan9642 0:6cb2eaf8b133 34 virtual ~SerialDigitalInput()
caoyuan9642 0:6cb2eaf8b133 35 {
caoyuan9642 0:6cb2eaf8b133 36 }
caoyuan9642 0:6cb2eaf8b133 37
caoyuan9642 0:6cb2eaf8b133 38 uint8_t getBits() const
caoyuan9642 0:6cb2eaf8b133 39 {
caoyuan9642 0:6cb2eaf8b133 40 return N;
caoyuan9642 0:6cb2eaf8b133 41 }
caoyuan9642 0:6cb2eaf8b133 42
caoyuan9642 0:6cb2eaf8b133 43 uint32_t read()
caoyuan9642 0:6cb2eaf8b133 44 {
caoyuan9642 0:6cb2eaf8b133 45 uint32_t value = 0;
caoyuan9642 0:6cb2eaf8b133 46 /*Load the shift register*/
caoyuan9642 0:6cb2eaf8b133 47 clk = 0;
caoyuan9642 0:6cb2eaf8b133 48 load = 0;
caoyuan9642 0:6cb2eaf8b133 49
caoyuan9642 0:6cb2eaf8b133 50 delay();
caoyuan9642 0:6cb2eaf8b133 51
caoyuan9642 0:6cb2eaf8b133 52 /*Lock the shift register*/
caoyuan9642 0:6cb2eaf8b133 53 load = 1;
caoyuan9642 0:6cb2eaf8b133 54 for (int i = 0; i < N; i++)
caoyuan9642 0:6cb2eaf8b133 55 {
caoyuan9642 0:6cb2eaf8b133 56 /*Read value*/
caoyuan9642 0:6cb2eaf8b133 57 value = (value << 1) + (data != 0);
caoyuan9642 0:6cb2eaf8b133 58 /*Clock. Now the next bit will be loaded*/
caoyuan9642 0:6cb2eaf8b133 59 clk = 1;
caoyuan9642 0:6cb2eaf8b133 60 /*Delay*/
caoyuan9642 0:6cb2eaf8b133 61 delay();
caoyuan9642 0:6cb2eaf8b133 62 /*Reset clock*/
caoyuan9642 0:6cb2eaf8b133 63 clk = 0;
caoyuan9642 0:6cb2eaf8b133 64 /*Delay*/
caoyuan9642 0:6cb2eaf8b133 65 delay();
caoyuan9642 0:6cb2eaf8b133 66 }
caoyuan9642 0:6cb2eaf8b133 67 return value;
caoyuan9642 0:6cb2eaf8b133 68 }
caoyuan9642 0:6cb2eaf8b133 69
caoyuan9642 0:6cb2eaf8b133 70
caoyuan9642 0:6cb2eaf8b133 71 private:
caoyuan9642 0:6cb2eaf8b133 72 DigitalOut clk;
caoyuan9642 0:6cb2eaf8b133 73 DigitalOut load;
caoyuan9642 0:6cb2eaf8b133 74 DigitalIn data;
caoyuan9642 0:6cb2eaf8b133 75
caoyuan9642 0:6cb2eaf8b133 76 void delay(){
caoyuan9642 0:6cb2eaf8b133 77 uint16_t i=100;
caoyuan9642 0:6cb2eaf8b133 78 while(i--);
caoyuan9642 0:6cb2eaf8b133 79 }
caoyuan9642 0:6cb2eaf8b133 80 };
caoyuan9642 0:6cb2eaf8b133 81
caoyuan9642 0:6cb2eaf8b133 82 #endif /* TELESCOPE_SERIALDIGITALINPUT_H_ */
caoyuan9642 0:6cb2eaf8b133 83
caoyuan9642 0:6cb2eaf8b133 84