Add I2CSlave to ov580 master.

Dependencies:   MorseGenerator2

Committer:
claytonk
Date:
Fri Oct 19 01:51:42 2018 +0000
Revision:
0:605fe136b7ea
Child:
1:ffffa383ba7e
working emitters, faults instantly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
claytonk 0:605fe136b7ea 1 #include "mbed.h"
claytonk 0:605fe136b7ea 2
claytonk 0:605fe136b7ea 3 /*
claytonk 0:605fe136b7ea 4 FEATURE REQUIREMENTS
claytonk 0:605fe136b7ea 5
claytonk 0:605fe136b7ea 6 - I2C write occurs on
claytonk 0:605fe136b7ea 7
claytonk 0:605fe136b7ea 8 -Reoccuring enable from app that will prevent the emitters from remaining
claytonk 0:605fe136b7ea 9 on if the app crashes and a turn off command isn't sent
claytonk 0:605fe136b7ea 10 - Can be a counter on the emitter enable > threshold
claytonk 0:605fe136b7ea 11
claytonk 0:605fe136b7ea 12 -Flood/Dot tagging indicated on GPIO3
claytonk 0:605fe136b7ea 13 - 0 Flood
claytonk 0:605fe136b7ea 14 - 1 DOT
claytonk 0:605fe136b7ea 15
claytonk 0:605fe136b7ea 16 -Fault indication on GPIO4 to indicate to app to reboot
claytonk 0:605fe136b7ea 17 - 0 OK
claytonk 0:605fe136b7ea 18 - 1 Fault/Reboot
claytonk 0:605fe136b7ea 19
claytonk 0:605fe136b7ea 20 I2C write commands
claytonk 0:605fe136b7ea 21 Reg: Information Condition
claytonk 0:605fe136b7ea 22 0x00 Emitter enable 0x00 Emitters off
claytonk 0:605fe136b7ea 23 0x01 Dot on
claytonk 0:605fe136b7ea 24 0x10 Flood on
claytonk 0:605fe136b7ea 25 0x11 Flood / Dot on
claytonk 0:605fe136b7ea 26
claytonk 0:605fe136b7ea 27 0x01 Dot fault Read from LM36011
claytonk 0:605fe136b7ea 28
claytonk 0:605fe136b7ea 29 0x02 Flood Fault Read from LM36011
claytonk 0:605fe136b7ea 30
claytonk 0:605fe136b7ea 31 0x03 Kill VCSEL Fault Define this
claytonk 0:605fe136b7ea 32
claytonk 0:605fe136b7ea 33 */
claytonk 0:605fe136b7ea 34
claytonk 0:605fe136b7ea 35 // define pins for I2C
claytonk 0:605fe136b7ea 36 #define dot_sda p2
claytonk 0:605fe136b7ea 37 #define dot_scl p4
claytonk 0:605fe136b7ea 38 #define flood_sda p28
claytonk 0:605fe136b7ea 39 #define flood_scl p3
claytonk 0:605fe136b7ea 40 #define ov580_sda p30
claytonk 0:605fe136b7ea 41 #define ov580_scl p31
claytonk 0:605fe136b7ea 42 #define strobe_dot p23
claytonk 0:605fe136b7ea 43 #define strobe_flood p24
claytonk 0:605fe136b7ea 44 #define pwm_1_pin p29
claytonk 0:605fe136b7ea 45 #define pwm_0_pin p5
claytonk 0:605fe136b7ea 46
claytonk 0:605fe136b7ea 47 // define LED pins
claytonk 0:605fe136b7ea 48 #define ledRed p12
claytonk 0:605fe136b7ea 49 #define ledGreen p17
claytonk 0:605fe136b7ea 50 #define ledBlue p13
claytonk 0:605fe136b7ea 51
claytonk 0:605fe136b7ea 52 // initialize LEDs
claytonk 0:605fe136b7ea 53 DigitalOut red(ledRed,1);
claytonk 0:605fe136b7ea 54 DigitalOut green(ledGreen,1);
claytonk 0:605fe136b7ea 55 DigitalOut blue(ledBlue,1);
claytonk 0:605fe136b7ea 56
claytonk 0:605fe136b7ea 57 // Initialize outputs
claytonk 0:605fe136b7ea 58 DigitalIn pwm_1(pwm_1_pin,PullNone);
claytonk 0:605fe136b7ea 59
claytonk 0:605fe136b7ea 60 // Initialize inputs
claytonk 0:605fe136b7ea 61 DigitalIn strobe0(p23,PullNone);
claytonk 0:605fe136b7ea 62 DigitalIn strobe1(p24,PullNone);
claytonk 0:605fe136b7ea 63 DigitalIn pwm_0(pwm_0_pin,PullNone);
claytonk 0:605fe136b7ea 64 DigitalIn vcselFault(p25,PullNone);
claytonk 0:605fe136b7ea 65 DigitalIn killVcsel(p26,PullNone);
claytonk 0:605fe136b7ea 66
claytonk 0:605fe136b7ea 67 static uint8_t LM36011_addr = 0x64 << 1; //0xC8
claytonk 0:605fe136b7ea 68
claytonk 0:605fe136b7ea 69 // register names
claytonk 0:605fe136b7ea 70 static uint8_t enable_reg = 0x01;
claytonk 0:605fe136b7ea 71 static uint8_t configuration_reg = 0x02;
claytonk 0:605fe136b7ea 72 static uint8_t brightness_reg = 0x03;
claytonk 0:605fe136b7ea 73 static uint8_t torch_reg = 0x04;
claytonk 0:605fe136b7ea 74 static uint8_t flags_reg = 0x05;
claytonk 0:605fe136b7ea 75 static uint8_t device_id_reset_reg = 0x06;
claytonk 0:605fe136b7ea 76
claytonk 0:605fe136b7ea 77 // register settings
claytonk 0:605fe136b7ea 78 static uint8_t enable_ir = 0x05;
claytonk 0:605fe136b7ea 79 static uint8_t disable_ir = 0x20;
claytonk 0:605fe136b7ea 80 static uint8_t enable_flash_timeout = 0x01;
claytonk 0:605fe136b7ea 81
claytonk 0:605fe136b7ea 82 // level settings
claytonk 0:605fe136b7ea 83 static uint8_t level_flood_max = 0x66; // = 1.2 A
claytonk 0:605fe136b7ea 84 //static uint8_t level_dot_max = 0x5F; // = 1.03 A
claytonk 0:605fe136b7ea 85 //static uint8_t level_dot_max = 0x3F; // = 0.75 A
claytonk 0:605fe136b7ea 86 //static uint8_t level_dot_max = 0x3C; // = 0.70 A
claytonk 0:605fe136b7ea 87 //static uint8_t level_dot_max = 0x15 //0.257 A
claytonk 0:605fe136b7ea 88 static uint8_t level_dot_max = 0x1F; // = 352mA
claytonk 0:605fe136b7ea 89
claytonk 0:605fe136b7ea 90 //size_t write_size 2;
claytonk 0:605fe136b7ea 91 bool err;
claytonk 0:605fe136b7ea 92 bool on = false;
claytonk 0:605fe136b7ea 93 bool stacked_error = false;
claytonk 0:605fe136b7ea 94 bool in_app = false;
claytonk 0:605fe136b7ea 95 uint64_t stacked_counter = 0;
claytonk 0:605fe136b7ea 96 bool flip = false;
claytonk 0:605fe136b7ea 97 bool dot_on = false;
claytonk 0:605fe136b7ea 98 bool flood_on = false;
claytonk 0:605fe136b7ea 99 bool pulsed = false;
claytonk 0:605fe136b7ea 100
claytonk 0:605fe136b7ea 101 char lmInit[2] = {enable_reg,enable_ir};
claytonk 0:605fe136b7ea 102 char lmOff[2] = {enable_reg,disable_ir};
claytonk 0:605fe136b7ea 103 char lmSafety[2] = {configuration_reg,enable_flash_timeout};
claytonk 0:605fe136b7ea 104
claytonk 0:605fe136b7ea 105 char flashBrightness_dot[2] = {brightness_reg,level_dot_max};
claytonk 0:605fe136b7ea 106 char flashBrightness_flood[2] = {brightness_reg,level_flood_max};
claytonk 0:605fe136b7ea 107
claytonk 0:605fe136b7ea 108 //create interupts
claytonk 0:605fe136b7ea 109 InterruptIn strobe_0(p23);
claytonk 0:605fe136b7ea 110 InterruptIn strobe_1(p24);
claytonk 0:605fe136b7ea 111
claytonk 0:605fe136b7ea 112 // i2c declarations
claytonk 0:605fe136b7ea 113 I2C flood_I2C(flood_sda,flood_scl);
claytonk 0:605fe136b7ea 114 I2C dot_I2C(dot_sda,dot_scl);
claytonk 0:605fe136b7ea 115 I2CSlave ov_I2C(ov580_sda,ov580_scl);
claytonk 0:605fe136b7ea 116
claytonk 0:605fe136b7ea 117 // main() runs in its own thread in the OS
claytonk 0:605fe136b7ea 118 int main() {
claytonk 0:605fe136b7ea 119
claytonk 0:605fe136b7ea 120 // set I2C Frequency to 400kHz
claytonk 0:605fe136b7ea 121 flood_I2C.frequency(400000);
claytonk 0:605fe136b7ea 122 dot_I2C.frequency(400000);
claytonk 0:605fe136b7ea 123
claytonk 0:605fe136b7ea 124 // write safety
claytonk 0:605fe136b7ea 125 flood_I2C.write(LM36011_addr,lmSafety,2,false);
claytonk 0:605fe136b7ea 126 dot_I2C.write(LM36011_addr,lmSafety,2,false);
claytonk 0:605fe136b7ea 127
claytonk 0:605fe136b7ea 128 // turn on emitters
claytonk 0:605fe136b7ea 129 flood_I2C.write(LM36011_addr,lmInit,2,false);
claytonk 0:605fe136b7ea 130 dot_I2C.write(LM36011_addr,lmInit,2,false);
claytonk 0:605fe136b7ea 131
claytonk 0:605fe136b7ea 132 while (true) {
claytonk 0:605fe136b7ea 133
claytonk 0:605fe136b7ea 134 green = !green;
claytonk 0:605fe136b7ea 135 wait(0.5);
claytonk 0:605fe136b7ea 136 }
claytonk 0:605fe136b7ea 137 }
claytonk 0:605fe136b7ea 138