Driver to control a peripheral circuit being controlled by the operation of a FET. Inbetween the mbed and FET is a single D type latch, used to latch a signal to the driver.
Latch_FET_Driver.cpp@6:073ee2fd1245, 2016-03-04 (annotated)
- Committer:
- sk398
- Date:
- Fri Mar 04 17:53:29 2016 +0000
- Revision:
- 6:073ee2fd1245
- Parent:
- 5:7d1b124490ed
added method to change state based on given input; outputLow and High shifted to private members
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sk398 | 0:87f2d094bea3 | 1 | #include "mbed.h" |
sk398 | 0:87f2d094bea3 | 2 | #include "Latch_FET_Driver.h" |
sk398 | 0:87f2d094bea3 | 3 | |
sk398 | 5:7d1b124490ed | 4 | |
sk398 | 5:7d1b124490ed | 5 | /* ============================================================= |
sk398 | 5:7d1b124490ed | 6 | Latch_FET_Driver constructor |
sk398 | 5:7d1b124490ed | 7 | |
sk398 | 5:7d1b124490ed | 8 | Inputs |
sk398 | 5:7d1b124490ed | 9 | ------ |
sk398 | 5:7d1b124490ed | 10 | PinName D: Pin to create D input to D Latch |
sk398 | 5:7d1b124490ed | 11 | PinName CLK: Pin to create CLK input to D Latch |
sk398 | 5:7d1b124490ed | 12 | |
sk398 | 5:7d1b124490ed | 13 | Description |
sk398 | 5:7d1b124490ed | 14 | ----------- |
sk398 | 5:7d1b124490ed | 15 | |
sk398 | 5:7d1b124490ed | 16 | Once the new DigitalOut types are assigned, the D Latch at |
sk398 | 5:7d1b124490ed | 17 | the given Pins is initialised to an outputLow state, ensuring |
sk398 | 5:7d1b124490ed | 18 | that uopn setup, a known state is entered quickly. |
sk398 | 5:7d1b124490ed | 19 | |
sk398 | 5:7d1b124490ed | 20 | ============================================================= */ |
sk398 | 5:7d1b124490ed | 21 | Latch_FET_Driver::Latch_FET_Driver(PinName D,PinName CLK) |
sk398 | 0:87f2d094bea3 | 22 | { |
sk398 | 5:7d1b124490ed | 23 | // Assign passed in Pin Names as new DigitalOut data types |
sk398 | 5:7d1b124490ed | 24 | _D = new DigitalOut(D); |
sk398 | 5:7d1b124490ed | 25 | _CLK = new DigitalOut(CLK); |
sk398 | 5:7d1b124490ed | 26 | |
sk398 | 5:7d1b124490ed | 27 | // Ensure that D latch does not enter unknown state |
sk398 | 5:7d1b124490ed | 28 | // Initialise is the same as the outputLow method |
sk398 | 5:7d1b124490ed | 29 | Latch_FET_Driver::outputLow(); |
sk398 | 0:87f2d094bea3 | 30 | } |
sk398 | 0:87f2d094bea3 | 31 | |
sk398 | 6:073ee2fd1245 | 32 | void Latch_FET_Driver::changeOutputState(bool stateChange) |
sk398 | 6:073ee2fd1245 | 33 | { |
sk398 | 6:073ee2fd1245 | 34 | if(stateChange == HIGH) |
sk398 | 6:073ee2fd1245 | 35 | { |
sk398 | 6:073ee2fd1245 | 36 | Latch_FET_Driver::outputHigh(); |
sk398 | 6:073ee2fd1245 | 37 | } |
sk398 | 6:073ee2fd1245 | 38 | else |
sk398 | 6:073ee2fd1245 | 39 | { |
sk398 | 6:073ee2fd1245 | 40 | Latch_FET_Driver::outputLow(); |
sk398 | 6:073ee2fd1245 | 41 | } |
sk398 | 6:073ee2fd1245 | 42 | } |
sk398 | 6:073ee2fd1245 | 43 | |
sk398 | 5:7d1b124490ed | 44 | /* ================================================================ |
sk398 | 5:7d1b124490ed | 45 | outputHigh is a public method to set a HIGH output on the given |
sk398 | 5:7d1b124490ed | 46 | D Latch. |
sk398 | 5:7d1b124490ed | 47 | |
sk398 | 5:7d1b124490ed | 48 | The procedure to set Q into a HIGH condition is as follows; |
sk398 | 5:7d1b124490ed | 49 | |
sk398 | 5:7d1b124490ed | 50 | 1. Ensure CLK is low |
sk398 | 5:7d1b124490ed | 51 | 2. Set D high |
sk398 | 5:7d1b124490ed | 52 | 3. wait STATE_DELAY us |
sk398 | 5:7d1b124490ed | 53 | 4. Set CLK high |
sk398 | 5:7d1b124490ed | 54 | 5. wait 10*STATE_DELAY us |
sk398 | 5:7d1b124490ed | 55 | 6. Set CLK low |
sk398 | 5:7d1b124490ed | 56 | 7. wait STATE_DELAY us |
sk398 | 5:7d1b124490ed | 57 | 8. set D low |
sk398 | 5:7d1b124490ed | 58 | 9. return void |
sk398 | 5:7d1b124490ed | 59 | ================================================================ */ |
sk398 | 5:7d1b124490ed | 60 | void Latch_FET_Driver::outputHigh() |
sk398 | 0:87f2d094bea3 | 61 | { |
sk398 | 5:7d1b124490ed | 62 | _CLK -> write(LOW); |
sk398 | 5:7d1b124490ed | 63 | _D -> write(HIGH); |
sk398 | 5:7d1b124490ed | 64 | wait_us(STATE_DELAY); |
sk398 | 5:7d1b124490ed | 65 | _CLK -> write(HIGH); |
sk398 | 5:7d1b124490ed | 66 | wait_us(10*STATE_DELAY); |
sk398 | 5:7d1b124490ed | 67 | _CLK -> write(LOW); |
sk398 | 5:7d1b124490ed | 68 | wait_us(STATE_DELAY); |
sk398 | 5:7d1b124490ed | 69 | _D -> write(LOW); |
sk398 | 0:87f2d094bea3 | 70 | } |
sk398 | 0:87f2d094bea3 | 71 | |
sk398 | 5:7d1b124490ed | 72 | /* ================================================================ |
sk398 | 5:7d1b124490ed | 73 | outputLow is a public method to set a HIGH output on the given |
sk398 | 5:7d1b124490ed | 74 | D Latch. |
sk398 | 5:7d1b124490ed | 75 | |
sk398 | 5:7d1b124490ed | 76 | The procedure to set Q into a LOW condition is as follows; |
sk398 | 5:7d1b124490ed | 77 | |
sk398 | 5:7d1b124490ed | 78 | 1. Ensure CLK is low |
sk398 | 5:7d1b124490ed | 79 | 2. Set D low |
sk398 | 5:7d1b124490ed | 80 | 3. wait STATE_DELAY us |
sk398 | 5:7d1b124490ed | 81 | 4. Set CLK high |
sk398 | 5:7d1b124490ed | 82 | 5. wait 10*STATE_DELAY us |
sk398 | 5:7d1b124490ed | 83 | 6. Set CLK low |
sk398 | 5:7d1b124490ed | 84 | 7. wait STATE_DELAY us |
sk398 | 5:7d1b124490ed | 85 | 8. return void |
sk398 | 5:7d1b124490ed | 86 | ================================================================ */ |
sk398 | 5:7d1b124490ed | 87 | void Latch_FET_Driver::outputLow() |
sk398 | 5:7d1b124490ed | 88 | { |
sk398 | 5:7d1b124490ed | 89 | _CLK -> write(LOW); |
sk398 | 5:7d1b124490ed | 90 | _D -> write(LOW); |
sk398 | 5:7d1b124490ed | 91 | wait_us(STATE_DELAY); |
sk398 | 5:7d1b124490ed | 92 | _CLK -> write(HIGH); |
sk398 | 5:7d1b124490ed | 93 | wait_us(10*STATE_DELAY); |
sk398 | 5:7d1b124490ed | 94 | _CLK -> write(LOW); |
sk398 | 5:7d1b124490ed | 95 | wait_us(STATE_DELAY); |
sk398 | 5:7d1b124490ed | 96 | } |
sk398 | 2:9059b675917e | 97 | |
sk398 | 5:7d1b124490ed | 98 |