Add I2CSlave to ov580 master.

Dependencies:   MorseGenerator2

Committer:
claytonk
Date:
Fri Oct 19 16:45:09 2018 +0000
Revision:
2:afc300c4f8e4
Parent:
1:ffffa383ba7e
Child:
3:6b14862f5f51
gutted lights on and stack check to rebuild functionality

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 1:ffffa383ba7e 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 1:ffffa383ba7e 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 char lmInit[2] = {enable_reg,enable_ir};
claytonk 0:605fe136b7ea 91 char lmOff[2] = {enable_reg,disable_ir};
claytonk 0:605fe136b7ea 92 char lmSafety[2] = {configuration_reg,enable_flash_timeout};
claytonk 0:605fe136b7ea 93
claytonk 0:605fe136b7ea 94 char flashBrightness_dot[2] = {brightness_reg,level_dot_max};
claytonk 0:605fe136b7ea 95 char flashBrightness_flood[2] = {brightness_reg,level_flood_max};
claytonk 0:605fe136b7ea 96
claytonk 0:605fe136b7ea 97 //create interupts
claytonk 1:ffffa383ba7e 98 InterruptIn strobe_0(p23);
claytonk 1:ffffa383ba7e 99 InterruptIn strobe_1(p24);
claytonk 0:605fe136b7ea 100
claytonk 0:605fe136b7ea 101 // i2c declarations
claytonk 0:605fe136b7ea 102 I2C flood_I2C(flood_sda,flood_scl);
claytonk 0:605fe136b7ea 103 I2C dot_I2C(dot_sda,dot_scl);
claytonk 0:605fe136b7ea 104 I2CSlave ov_I2C(ov580_sda,ov580_scl);
claytonk 0:605fe136b7ea 105
claytonk 1:ffffa383ba7e 106 // functions
claytonk 1:ffffa383ba7e 107 void lightsOn()
claytonk 1:ffffa383ba7e 108 {
claytonk 2:afc300c4f8e4 109
claytonk 1:ffffa383ba7e 110 }
claytonk 1:ffffa383ba7e 111
claytonk 1:ffffa383ba7e 112 void stack_check()
claytonk 1:ffffa383ba7e 113 {
claytonk 1:ffffa383ba7e 114
claytonk 1:ffffa383ba7e 115 }
claytonk 1:ffffa383ba7e 116
claytonk 0:605fe136b7ea 117 // main() runs in its own thread in the OS
claytonk 1:ffffa383ba7e 118 int main()
claytonk 1:ffffa383ba7e 119 {
claytonk 1:ffffa383ba7e 120
claytonk 0:605fe136b7ea 121 // set I2C Frequency to 400kHz
claytonk 0:605fe136b7ea 122 flood_I2C.frequency(400000);
claytonk 0:605fe136b7ea 123 dot_I2C.frequency(400000);
claytonk 1:ffffa383ba7e 124
claytonk 0:605fe136b7ea 125 // write safety
claytonk 0:605fe136b7ea 126 flood_I2C.write(LM36011_addr,lmSafety,2,false);
claytonk 0:605fe136b7ea 127 dot_I2C.write(LM36011_addr,lmSafety,2,false);
claytonk 0:605fe136b7ea 128
claytonk 1:ffffa383ba7e 129 // write brightness
claytonk 1:ffffa383ba7e 130 flood_I2C.write(LM36011_addr,flashBrightness_flood,2,false);
claytonk 1:ffffa383ba7e 131 dot_I2C.write(LM36011_addr,flashBrightness_dot,2,false);
claytonk 1:ffffa383ba7e 132
claytonk 1:ffffa383ba7e 133 // set interrupts
claytonk 2:afc300c4f8e4 134 strobe_0.rise(stack_check);
claytonk 1:ffffa383ba7e 135 strobe_0.fall(lightsOn);
claytonk 2:afc300c4f8e4 136
claytonk 1:ffffa383ba7e 137
claytonk 0:605fe136b7ea 138 while (true) {
claytonk 1:ffffa383ba7e 139
claytonk 0:605fe136b7ea 140 green = !green;
claytonk 0:605fe136b7ea 141 wait(0.5);
claytonk 0:605fe136b7ea 142 }
claytonk 0:605fe136b7ea 143 }
claytonk 0:605fe136b7ea 144