fl@c@ Johnson
/
imagingBoard_masterClockDrivenTest3
test
Diff: main.cpp
- Revision:
- 0:ba5ba1fe2798
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Oct 20 20:41:37 2014 +0000 @@ -0,0 +1,236 @@ +#include "mbed.h" +#include "FastPWM.h" + +//PwmOut masterClock(PB_4); +FastPWM masterClock(PB_4,1); +DigitalOut shiftGate(PB_8); +//FastPWM shiftGate(PB_8,1); +//InterruptIn shiftGate_int(PC_6); +InterruptIn masterClock_int(PB_14); +//DigitalOut masterClock(PB_4); +//DigitalOut shiftGate(PB_8); +//InterruptIn shiftGate_int(PC_6); +DigitalOut ICG(PB_3); +AnalogIn imageIn(A0); +DigitalOut LED(LED1); +DigitalOut illuminator(PA_8); +DigitalOut blueLED(PB_5); +DigitalOut redLED(PB_10); +Serial raspi(USBTX, USBRX); + +DigitalOut readOutIndicator(PC_3); +DigitalOut leadingDummyIndicator(PC_2); +DigitalOut trailingDummyIndicator(PH_1); + +Ticker masterClock_HB; +Ticker dumpState; +bool masterClock_bool; +bool masterClock_engaged; +int masterClock_count; + +// Calculate the corresponding acquisition measure for a given value in mV +#define MV(x) ((0xFFF*x)/3300) + +float firmwareVersion = 0.2; + +float masterClock_period = 86; //microseconds +float masterClock_width = 43; //microseconds +//float masterFreq_period = 20; //microseconds +//int masterFreq_width = 10; //microseconds +int shiftGate_period = 6; //microseconds +int shiftGate_width = 3; //microseconds + +double imageData; +const int integrationTime = 147000; +//const int pixelTotal = 3694; +//const int leadingDummyElements = 16; +//const int leadShieldedElements = 13; +//const int headerElements = 3; +//const int totalLeadingDummy = 32; +const int signalElements = 3648; +//const int trailingDummyElements = 14; +int pixelCount; +int readOutTrigger; +int dumpTrigger; +bool imageTrigger; +int state; +int readFlag; +double pixelValue[signalElements] = { 0 }; + +#define readOut_startUp 10 +#define readOut_Begin 1 +#define readOut_ACTIVE 2 +#define readOut_LeadingDummy 3 +#define readOut_LeadingShielded 4 +#define readOut_headerElements 5 +#define readOut_signalElements 6 +#define readOut_trailingDummy 7 +#define readOut_integrationTime 8 +#define readOut_IDLE 9 +#define readOut_Finish 0 + +void dumpImage(){ + if (dumpTrigger == 1){ + for (int pixelNumber=0; pixelNumber<signalElements; pixelNumber++) { + raspi.printf("%i\t%4.12f\r\n", pixelNumber, 5 - ((pixelValue[pixelNumber - 1] / 5) / 4096.0)); + } + dumpTrigger = 0; + } +} +int shiftPulse; +void readOut(){ + blueLED = 1; + pixelCount++; + shiftPulse++; +// if (shiftPulse == 10){ + shiftGate = !shiftGate; +// shiftPulse = 0; +// } + pixelValue[pixelCount] = imageIn.read_u16(); +// blueLED = 0; +} + +void init(){ + imageTrigger = false; + shiftPulse = 0; + dumpTrigger = 0; + redLED = 1; + readOutIndicator = 0; + leadingDummyIndicator = 0; + trailingDummyIndicator = 0; + readFlag = 0; + shiftGate = 0; + ICG = 1; +// masterClock_HB.attach_us(&masterClock_tick, masterFreq_period); + pixelCount = 0; + readOutTrigger = 0; + state = readOut_startUp; + pixelCount = 0; + masterClock_count = 0; + illuminator = 0; +} + +void masterClock_tick(){ + if (masterClock_engaged == true){ + blueLED = 0; +// masterClock = masterClock_bool; + masterClock_bool = !masterClock_bool; + switch (masterClock_count) { + case 0: + redLED = 1; + shiftGate = 1; + ICG = 0; + break; + case 100: + shiftGate = 0; + break; + case 200: + ICG = 1; + leadingDummyIndicator = 1; + break; + case 232: + leadingDummyIndicator = 0; + readOutIndicator = 1; + readFlag = 1; + break; + case 3880: + trailingDummyIndicator = 1; + readOutIndicator = 0; + readFlag = 0; + break; + case 3894: + trailingDummyIndicator = 0; + shiftGate = 0; + ICG = 0; + break; + case 3994: + shiftGate = 0; + break; + case 4194: + ICG = 1; + shiftGate = 1; + break; + case 4294: + redLED = 0; + break; + case 5000: + init(); +// masterClock_engaged = false; +// dumpTrigger = 1; + shiftGate = 0; + masterClock_count = -1; + redLED = 0; + return; + default: + break; + } + if (readFlag == 1){ + readOut(); + } + masterClock_count++; + } +} + +void printInfo(){ + raspi.printf("meridianScientific\r\n"); + raspi.printf("ramanPi - The DIY 3D Printable RaspberryPi Raman Spectrometer\r\n"); + raspi.printf("Spectrometer imagingBoard\r\n"); + raspi.printf("-------------------------------------------------------------\r\n"); + raspi.printf("Firmware Version: %f\r\n",firmwareVersion); + raspi.printf("Current Sensitivity: %d\r\n", integrationTime); +} + +int main(){ + init(); + wait(2); + redLED = 0; + + dumpState.attach_us(&dumpImage, 50); +// masterClock.period_us(masterFreq_period); +// masterClock.pulsewidth_us(masterFreq_width); + + masterClock.prescaler(1); + masterClock.period_ticks (masterClock_period); + masterClock.pulsewidth_ticks(masterClock_width); + masterClock_int.rise(masterClock_tick); + + masterClock_engaged = true; + raspi.baud(921600); + blueLED = 1; + while(1) { + char c = raspi.getc(); + switch (c) { + case 'r': + illuminator = 1; +// masterClock_HB.attach_us(&masterClock_tick, masterFreq_period); + masterClock_engaged = true; + wait_us(100); + imageTrigger = true; + blueLED=1; + break; + case 'l': +// sensitivity = low; + break; + case 'v': +// sensitivity = veryLow; + break; + case 'n': +// sensitivity = mediumLow; + break; + case 'm': +// sensitivity = medium; + break; + case 'h': +// sensitivity = high; + break; + case 'c': +// sensitivity = veryHigh; + break; + case 'i': + printInfo(); + break; + default: + break; + } + } +} \ No newline at end of file