Hardware IO control: mirrors, lock in
hardwareIO.cpp@0:c19dc1d8b225, 2011-10-17 (annotated)
- Committer:
- mbedalvaro
- Date:
- Mon Oct 17 13:23:06 2011 +0000
- Revision:
- 0:c19dc1d8b225
I wonder if perhaps it would be better to avoid a hardwareIO object, and instead have a set of global hardware functions... I think I will do this in the next revisions of this library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedalvaro | 0:c19dc1d8b225 | 1 | #include "hardwareIO.h" |
mbedalvaro | 0:c19dc1d8b225 | 2 | |
mbedalvaro | 0:c19dc1d8b225 | 3 | HardwareIO IO; // preintantiation of cross-file global object IO |
mbedalvaro | 0:c19dc1d8b225 | 4 | |
mbedalvaro | 0:c19dc1d8b225 | 5 | // -------------------------------------- (0) SETUP ALL IO (call this in the setup() function in main program) |
mbedalvaro | 0:c19dc1d8b225 | 6 | |
mbedalvaro | 0:c19dc1d8b225 | 7 | Serial pc(USBTX, USBRX); // tx, rx |
mbedalvaro | 0:c19dc1d8b225 | 8 | |
mbedalvaro | 0:c19dc1d8b225 | 9 | SPI spiDAC(MOSI_PIN, MISO_PIN, SCK_PIN); // mosi, miso, sclk |
mbedalvaro | 0:c19dc1d8b225 | 10 | DigitalOut csDAC(CS_DAC_MIRRORS); |
mbedalvaro | 0:c19dc1d8b225 | 11 | |
mbedalvaro | 0:c19dc1d8b225 | 12 | DigitalOut Laser_Red(LASER_RED_PIN); |
mbedalvaro | 0:c19dc1d8b225 | 13 | DigitalOut Laser_Green(LASER_GREEN_PIN); |
mbedalvaro | 0:c19dc1d8b225 | 14 | DigitalOut Laser_Blue(LASER_BLUE_PIN); |
mbedalvaro | 0:c19dc1d8b225 | 15 | |
mbedalvaro | 0:c19dc1d8b225 | 16 | void HardwareIO::init(void) { |
mbedalvaro | 0:c19dc1d8b225 | 17 | Laser_Red = 1; |
mbedalvaro | 0:c19dc1d8b225 | 18 | Laser_Green = 0; |
mbedalvaro | 0:c19dc1d8b225 | 19 | Laser_Blue = 0; |
mbedalvaro | 0:c19dc1d8b225 | 20 | |
mbedalvaro | 0:c19dc1d8b225 | 21 | //Serial Communication setup: |
mbedalvaro | 0:c19dc1d8b225 | 22 | pc.baud(115200);//921600); |
mbedalvaro | 0:c19dc1d8b225 | 23 | |
mbedalvaro | 0:c19dc1d8b225 | 24 | // Setup for lock-in amplifier and pwm references: |
mbedalvaro | 0:c19dc1d8b225 | 25 | lockin.init(); |
mbedalvaro | 0:c19dc1d8b225 | 26 | |
mbedalvaro | 0:c19dc1d8b225 | 27 | // Setup the spi for 8 bit data, high steady state clock, |
mbedalvaro | 0:c19dc1d8b225 | 28 | // second edge capture, with a 10MHz clock rate |
mbedalvaro | 0:c19dc1d8b225 | 29 | csDAC = 1; |
mbedalvaro | 0:c19dc1d8b225 | 30 | spiDAC.format(16,0); |
mbedalvaro | 0:c19dc1d8b225 | 31 | spiDAC.frequency(16000000); |
mbedalvaro | 0:c19dc1d8b225 | 32 | |
mbedalvaro | 0:c19dc1d8b225 | 33 | // default initial mirror position: |
mbedalvaro | 0:c19dc1d8b225 | 34 | writeOutX(CENTER_AD_MIRROR_X); |
mbedalvaro | 0:c19dc1d8b225 | 35 | writeOutY(CENTER_AD_MIRROR_Y); |
mbedalvaro | 0:c19dc1d8b225 | 36 | } |
mbedalvaro | 0:c19dc1d8b225 | 37 | |
mbedalvaro | 0:c19dc1d8b225 | 38 | //write on the first DAC, output A (mirror X) |
mbedalvaro | 0:c19dc1d8b225 | 39 | void HardwareIO::writeOutX(int value){ |
mbedalvaro | 0:c19dc1d8b225 | 40 | if(value > MAX_AD_MIRRORS) value = MAX_AD_MIRRORS; |
mbedalvaro | 0:c19dc1d8b225 | 41 | if(value < MIN_AD_MIRRORS) value = MIN_AD_MIRRORS; |
mbedalvaro | 0:c19dc1d8b225 | 42 | |
mbedalvaro | 0:c19dc1d8b225 | 43 | value |= 0x7000; |
mbedalvaro | 0:c19dc1d8b225 | 44 | value &= 0x7FFF; |
mbedalvaro | 0:c19dc1d8b225 | 45 | |
mbedalvaro | 0:c19dc1d8b225 | 46 | csDAC = 0; |
mbedalvaro | 0:c19dc1d8b225 | 47 | spiDAC.write(value); |
mbedalvaro | 0:c19dc1d8b225 | 48 | csDAC = 1; |
mbedalvaro | 0:c19dc1d8b225 | 49 | } |
mbedalvaro | 0:c19dc1d8b225 | 50 | |
mbedalvaro | 0:c19dc1d8b225 | 51 | //write on the first DAC, output B (mirror Y) |
mbedalvaro | 0:c19dc1d8b225 | 52 | void HardwareIO::writeOutY(int value){ |
mbedalvaro | 0:c19dc1d8b225 | 53 | if(value > MAX_AD_MIRRORS) value = MAX_AD_MIRRORS; |
mbedalvaro | 0:c19dc1d8b225 | 54 | if(value < MIN_AD_MIRRORS) value = MIN_AD_MIRRORS; |
mbedalvaro | 0:c19dc1d8b225 | 55 | |
mbedalvaro | 0:c19dc1d8b225 | 56 | value |= 0xF000; |
mbedalvaro | 0:c19dc1d8b225 | 57 | value &= 0xFFFF; |
mbedalvaro | 0:c19dc1d8b225 | 58 | |
mbedalvaro | 0:c19dc1d8b225 | 59 | csDAC = 0; |
mbedalvaro | 0:c19dc1d8b225 | 60 | spiDAC.write(value); |
mbedalvaro | 0:c19dc1d8b225 | 61 | csDAC = 1; |
mbedalvaro | 0:c19dc1d8b225 | 62 | } |
mbedalvaro | 0:c19dc1d8b225 | 63 | |
mbedalvaro | 0:c19dc1d8b225 | 64 | void HardwareIO::setRedPower(int powerValue){ |
mbedalvaro | 0:c19dc1d8b225 | 65 | if(powerValue > 0){ |
mbedalvaro | 0:c19dc1d8b225 | 66 | lockin.setLaserPower(true); |
mbedalvaro | 0:c19dc1d8b225 | 67 | } |
mbedalvaro | 0:c19dc1d8b225 | 68 | else{ |
mbedalvaro | 0:c19dc1d8b225 | 69 | lockin.setLaserPower(false); |
mbedalvaro | 0:c19dc1d8b225 | 70 | } |
mbedalvaro | 0:c19dc1d8b225 | 71 | } |
mbedalvaro | 0:c19dc1d8b225 | 72 | void HardwareIO::setGreenPower(int powerValue){ |
mbedalvaro | 0:c19dc1d8b225 | 73 | if(powerValue > 0){ |
mbedalvaro | 0:c19dc1d8b225 | 74 | Laser_Green = 1; |
mbedalvaro | 0:c19dc1d8b225 | 75 | } |
mbedalvaro | 0:c19dc1d8b225 | 76 | else{ |
mbedalvaro | 0:c19dc1d8b225 | 77 | Laser_Green = 0; |
mbedalvaro | 0:c19dc1d8b225 | 78 | } |
mbedalvaro | 0:c19dc1d8b225 | 79 | } |
mbedalvaro | 0:c19dc1d8b225 | 80 | void HardwareIO::setBluePower(int powerValue){ |
mbedalvaro | 0:c19dc1d8b225 | 81 | if(powerValue > 0){ |
mbedalvaro | 0:c19dc1d8b225 | 82 | Laser_Blue = 1; |
mbedalvaro | 0:c19dc1d8b225 | 83 | } |
mbedalvaro | 0:c19dc1d8b225 | 84 | else{ |
mbedalvaro | 0:c19dc1d8b225 | 85 | Laser_Blue = 0; |
mbedalvaro | 0:c19dc1d8b225 | 86 | } |
mbedalvaro | 0:c19dc1d8b225 | 87 | } |