Kunimasa Noda / Mbed 2 deprecated lpc812_mlx90620

Dependencies:   MLX90620 mbed

Committer:
kunipm9
Date:
Fri Apr 04 14:01:24 2014 +0000
Revision:
0:a2d3a9f771b8
1st

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kunipm9 0:a2d3a9f771b8 1 #include "mbed.h"
kunipm9 0:a2d3a9f771b8 2 #include "MLX90620.h"
kunipm9 0:a2d3a9f771b8 3
kunipm9 0:a2d3a9f771b8 4 extern "C" {
kunipm9 0:a2d3a9f771b8 5 void xsprintf (char* buff, const char* fmt, ...);
kunipm9 0:a2d3a9f771b8 6 }
kunipm9 0:a2d3a9f771b8 7
kunipm9 0:a2d3a9f771b8 8 #define BS 0x08 //ascii backspace
kunipm9 0:a2d3a9f771b8 9 #define CR 0x0d //ascii CR
kunipm9 0:a2d3a9f771b8 10 #define LF 0x0a //ascii LF
kunipm9 0:a2d3a9f771b8 11 #define SP 0x20 //ascii space
kunipm9 0:a2d3a9f771b8 12 #define ESC 0x1b //ascii escape
kunipm9 0:a2d3a9f771b8 13 #define DP 0x2e //ascii decimal point / period
kunipm9 0:a2d3a9f771b8 14 #define ticC 0x03 //ascii control C
kunipm9 0:a2d3a9f771b8 15 #define ticX 0x18 //ascii control X
kunipm9 0:a2d3a9f771b8 16
kunipm9 0:a2d3a9f771b8 17 extern "C" void mbed_reset();
kunipm9 0:a2d3a9f771b8 18 int revision = 102;
kunipm9 0:a2d3a9f771b8 19 int gDebug = 2;
kunipm9 0:a2d3a9f771b8 20
kunipm9 0:a2d3a9f771b8 21 //RawSerial pc (USBTX, USBRX);
kunipm9 0:a2d3a9f771b8 22 Serial pc(USBTX, USBRX);
kunipm9 0:a2d3a9f771b8 23 //UART1 PIO0_0 PIO0_4
kunipm9 0:a2d3a9f771b8 24 //UART2 PIO0_1/USBRX PIO0_6/USBTX
kunipm9 0:a2d3a9f771b8 25
kunipm9 0:a2d3a9f771b8 26 //I2C i2c1(P0_10, P0_11);
kunipm9 0:a2d3a9f771b8 27 MLX90620 mlx(P0_10, P0_11, "mlx"); //MLX90620 register access
kunipm9 0:a2d3a9f771b8 28
kunipm9 0:a2d3a9f771b8 29 //RN-42 Reset
kunipm9 0:a2d3a9f771b8 30 DigitalOut p1(P0_8);
kunipm9 0:a2d3a9f771b8 31
kunipm9 0:a2d3a9f771b8 32 //MLX90620 buffers used by MLX90620.cpp
kunipm9 0:a2d3a9f771b8 33 char* EEbuf = new char[256];
kunipm9 0:a2d3a9f771b8 34 char* RamCmmd = new char[8]; //holds / sends MLX90620 RAM commands
kunipm9 0:a2d3a9f771b8 35 char* RamBuf = new char[128]; //0x3f words, values are 'unsigned short'
kunipm9 0:a2d3a9f771b8 36
kunipm9 0:a2d3a9f771b8 37 //For MLX90620
kunipm9 0:a2d3a9f771b8 38 unsigned short ConfigReg = 0; //MLX90620 configuration register
kunipm9 0:a2d3a9f771b8 39 float Ta = 0.0;
kunipm9 0:a2d3a9f771b8 40 double TempPxl = 0;
kunipm9 0:a2d3a9f771b8 41
kunipm9 0:a2d3a9f771b8 42 //Used for display of temperature and extreme values
kunipm9 0:a2d3a9f771b8 43 int pixX = 0; //display pixel X (0-15)
kunipm9 0:a2d3a9f771b8 44 int pixY = 0; //display pixel Y (0-3)
kunipm9 0:a2d3a9f771b8 45
kunipm9 0:a2d3a9f771b8 46 //Display Options
kunipm9 0:a2d3a9f771b8 47 int TempC = 'C'; //***USED BY .INI FILE display temperatures in degrees C or F
kunipm9 0:a2d3a9f771b8 48
kunipm9 0:a2d3a9f771b8 49 //--------------------------------------------------------------------------------------------------------------------------------------//
kunipm9 0:a2d3a9f771b8 50 //Detect I2C device chain
kunipm9 0:a2d3a9f771b8 51
kunipm9 0:a2d3a9f771b8 52 int i2cQty = 16; //number of bytes to get
kunipm9 0:a2d3a9f771b8 53 char i2cData[32]; //i2c buffer data
kunipm9 0:a2d3a9f771b8 54
kunipm9 0:a2d3a9f771b8 55 char buf[256];
kunipm9 0:a2d3a9f771b8 56
kunipm9 0:a2d3a9f771b8 57 //--------------------------------------------------------------------------------------------------------------------------------------//
kunipm9 0:a2d3a9f771b8 58 // Display on PC using VT100 escape codes
kunipm9 0:a2d3a9f771b8 59 int loop = 0;
kunipm9 0:a2d3a9f771b8 60 bool GotAmbient = false;
kunipm9 0:a2d3a9f771b8 61 bool ReFrame = false; //do a reframe if asked
kunipm9 0:a2d3a9f771b8 62
kunipm9 0:a2d3a9f771b8 63 int ShowTempsColor()
kunipm9 0:a2d3a9f771b8 64 {
kunipm9 0:a2d3a9f771b8 65 ConfigReg = mlx.GetConfigReg();
kunipm9 0:a2d3a9f771b8 66 if(GotAmbient == false) {
kunipm9 0:a2d3a9f771b8 67 if((ConfigReg & 0x0100) == 0) {
kunipm9 0:a2d3a9f771b8 68 Ta = mlx.GetDieTemp();
kunipm9 0:a2d3a9f771b8 69 GotAmbient = true;
kunipm9 0:a2d3a9f771b8 70 } else {
kunipm9 0:a2d3a9f771b8 71 return(ConfigReg & 0x0100);
kunipm9 0:a2d3a9f771b8 72 }
kunipm9 0:a2d3a9f771b8 73 }
kunipm9 0:a2d3a9f771b8 74 if((ConfigReg & 0x0200) == 0) {
kunipm9 0:a2d3a9f771b8 75 loop++;
kunipm9 0:a2d3a9f771b8 76 GotAmbient = false;
kunipm9 0:a2d3a9f771b8 77 if(ReFrame == true) {
kunipm9 0:a2d3a9f771b8 78 ReFrame = false;
kunipm9 0:a2d3a9f771b8 79 }
kunipm9 0:a2d3a9f771b8 80 mlx.LoadMLXRam();
kunipm9 0:a2d3a9f771b8 81 mlx.StartMeasurement();
kunipm9 0:a2d3a9f771b8 82 }
kunipm9 0:a2d3a9f771b8 83 return(0);
kunipm9 0:a2d3a9f771b8 84 }
kunipm9 0:a2d3a9f771b8 85
kunipm9 0:a2d3a9f771b8 86 void ShowTempsVT100()
kunipm9 0:a2d3a9f771b8 87 {
kunipm9 0:a2d3a9f771b8 88 double HoldTemp = TempPxl;
kunipm9 0:a2d3a9f771b8 89 pc.puts("st\r\n");
kunipm9 0:a2d3a9f771b8 90 for(pixY = 0; pixY <= 3; pixY++) {
kunipm9 0:a2d3a9f771b8 91 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
kunipm9 0:a2d3a9f771b8 92 TempPxl = mlx.CalcPixel(pixX + pixY);
kunipm9 0:a2d3a9f771b8 93 if ((TempC == 'c') || (TempC == 'C')) {
kunipm9 0:a2d3a9f771b8 94 HoldTemp = TempPxl;
kunipm9 0:a2d3a9f771b8 95 } else {
kunipm9 0:a2d3a9f771b8 96 HoldTemp = TempPxl * 9.0 / 5.0 + 32.0;
kunipm9 0:a2d3a9f771b8 97 }
kunipm9 0:a2d3a9f771b8 98
kunipm9 0:a2d3a9f771b8 99 // if(HoldTemp >= 100.0) {
kunipm9 0:a2d3a9f771b8 100 // pc.printf(" %.1f ", HoldTemp);
kunipm9 0:a2d3a9f771b8 101 // } else if((HoldTemp <= 10.0) && (HoldTemp >= 0.0)) {
kunipm9 0:a2d3a9f771b8 102 // pc.printf(" %.2f ", HoldTemp);
kunipm9 0:a2d3a9f771b8 103 // } else if((HoldTemp >= -10.0) && (HoldTemp < 0.0)) {
kunipm9 0:a2d3a9f771b8 104 // pc.printf(" %.2f ", HoldTemp);
kunipm9 0:a2d3a9f771b8 105 // } else if(HoldTemp < -10.0) {
kunipm9 0:a2d3a9f771b8 106 // pc.printf("%.2f ", HoldTemp);
kunipm9 0:a2d3a9f771b8 107 // } else {
kunipm9 0:a2d3a9f771b8 108 // pc.printf(" %.2f ", HoldTemp);
kunipm9 0:a2d3a9f771b8 109 // }
kunipm9 0:a2d3a9f771b8 110 int temp = HoldTemp * 100;
kunipm9 0:a2d3a9f771b8 111 xsprintf(buf, "%d\r\n", temp);
kunipm9 0:a2d3a9f771b8 112 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 113 xsprintf(buf, "info x:%d y:%d %d\r\n", pixX, pixY, temp);
kunipm9 0:a2d3a9f771b8 114 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 115 }
kunipm9 0:a2d3a9f771b8 116 // pc.printf("\r\n", ESC, pixY);
kunipm9 0:a2d3a9f771b8 117 }
kunipm9 0:a2d3a9f771b8 118 pc.puts("ex\r\n");
kunipm9 0:a2d3a9f771b8 119 }
kunipm9 0:a2d3a9f771b8 120
kunipm9 0:a2d3a9f771b8 121 //--------------------------------------------------------------------------------------------------------------------------------------//
kunipm9 0:a2d3a9f771b8 122 // Display Pixels in color
kunipm9 0:a2d3a9f771b8 123
kunipm9 0:a2d3a9f771b8 124 //--------------------------------------------------------------------------------------------------------------------------------------//
kunipm9 0:a2d3a9f771b8 125
kunipm9 0:a2d3a9f771b8 126 int main(void)
kunipm9 0:a2d3a9f771b8 127 {
kunipm9 0:a2d3a9f771b8 128 // RN-42
kunipm9 0:a2d3a9f771b8 129 p1 = 0;
kunipm9 0:a2d3a9f771b8 130 wait_ms(300);
kunipm9 0:a2d3a9f771b8 131
kunipm9 0:a2d3a9f771b8 132 LPC_SYSCON->BODCTRL |= 2;
kunipm9 0:a2d3a9f771b8 133 LPC_SYSCON->PDRUNCFG &= (0<<3);
kunipm9 0:a2d3a9f771b8 134
kunipm9 0:a2d3a9f771b8 135 p1 = 1;
kunipm9 0:a2d3a9f771b8 136 wait_ms(100);
kunipm9 0:a2d3a9f771b8 137 pc.baud(115200);
kunipm9 0:a2d3a9f771b8 138
kunipm9 0:a2d3a9f771b8 139 int initFail = 0;
kunipm9 0:a2d3a9f771b8 140 //load up eeprom into buffer
kunipm9 0:a2d3a9f771b8 141 if((mlx.LoadEEPROM())) {
kunipm9 0:a2d3a9f771b8 142 pc.puts("err e1\r\n");
kunipm9 0:a2d3a9f771b8 143 initFail++;
kunipm9 0:a2d3a9f771b8 144 }
kunipm9 0:a2d3a9f771b8 145
kunipm9 0:a2d3a9f771b8 146 for(pixY = 0; pixY <= 3; pixY++) {
kunipm9 0:a2d3a9f771b8 147 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
kunipm9 0:a2d3a9f771b8 148 int Pixel = pixY + pixX;
kunipm9 0:a2d3a9f771b8 149 if (EEbuf[Pixel + 0x80] < 100) {
kunipm9 0:a2d3a9f771b8 150 EEbuf[Pixel + 0x80] = 100;
kunipm9 0:a2d3a9f771b8 151 }
kunipm9 0:a2d3a9f771b8 152 }
kunipm9 0:a2d3a9f771b8 153 }
kunipm9 0:a2d3a9f771b8 154
kunipm9 0:a2d3a9f771b8 155 //Init MLX90620
kunipm9 0:a2d3a9f771b8 156 unsigned short x = 0;
kunipm9 0:a2d3a9f771b8 157 if((mlx.SetOscTrimReg())) {
kunipm9 0:a2d3a9f771b8 158 pc.puts("er e2\r\n");
kunipm9 0:a2d3a9f771b8 159 initFail++;
kunipm9 0:a2d3a9f771b8 160 } else {
kunipm9 0:a2d3a9f771b8 161 x = mlx.GetOscTrimReg();
kunipm9 0:a2d3a9f771b8 162 xsprintf(buf, "info Osc: 0x%04x\r\n", x);
kunipm9 0:a2d3a9f771b8 163 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 164 }
kunipm9 0:a2d3a9f771b8 165
kunipm9 0:a2d3a9f771b8 166 if((mlx.SetConfigReg())) {
kunipm9 0:a2d3a9f771b8 167 pc.puts("err e3\r\n");
kunipm9 0:a2d3a9f771b8 168 initFail++;
kunipm9 0:a2d3a9f771b8 169 } else {
kunipm9 0:a2d3a9f771b8 170 x = mlx.GetConfigReg();
kunipm9 0:a2d3a9f771b8 171 xsprintf(buf, "info Config: 0x%04x\r\n", x);
kunipm9 0:a2d3a9f771b8 172 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 173 x = mlx.GetPTATReg();
kunipm9 0:a2d3a9f771b8 174 xsprintf(buf, "info PTAT: 0x%04x\r\n", x);
kunipm9 0:a2d3a9f771b8 175 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 176 }
kunipm9 0:a2d3a9f771b8 177
kunipm9 0:a2d3a9f771b8 178 if((mlx.StartMeasurement())) {
kunipm9 0:a2d3a9f771b8 179 pc.puts("err e4\r\n");
kunipm9 0:a2d3a9f771b8 180 initFail++;
kunipm9 0:a2d3a9f771b8 181 }
kunipm9 0:a2d3a9f771b8 182 wait_ms(300);
kunipm9 0:a2d3a9f771b8 183
kunipm9 0:a2d3a9f771b8 184 if(initFail == 0) {
kunipm9 0:a2d3a9f771b8 185 mlx.CalcTa_To();
kunipm9 0:a2d3a9f771b8 186 Ta = mlx.GetDieTemp();
kunipm9 0:a2d3a9f771b8 187 xsprintf(buf, "info Ta = %f\n\n", Ta);
kunipm9 0:a2d3a9f771b8 188 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 189 } else {
kunipm9 0:a2d3a9f771b8 190 pc.puts("err e5\r\n");
kunipm9 0:a2d3a9f771b8 191 }
kunipm9 0:a2d3a9f771b8 192 ShowTempsColor();
kunipm9 0:a2d3a9f771b8 193
kunipm9 0:a2d3a9f771b8 194 while (true) {
kunipm9 0:a2d3a9f771b8 195 if(!(ShowTempsColor())) {
kunipm9 0:a2d3a9f771b8 196 do {
kunipm9 0:a2d3a9f771b8 197 wait_ms(1);
kunipm9 0:a2d3a9f771b8 198 } while(ShowTempsColor() != 0);
kunipm9 0:a2d3a9f771b8 199 }
kunipm9 0:a2d3a9f771b8 200
kunipm9 0:a2d3a9f771b8 201 for(pixY = 0; pixY <= 3; pixY++) {
kunipm9 0:a2d3a9f771b8 202 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
kunipm9 0:a2d3a9f771b8 203 int Pixel = pixY + pixX;
kunipm9 0:a2d3a9f771b8 204 short VirPixelX = (RamBuf[Pixel * 2 + 1] << 8) + RamBuf[Pixel * 2];
kunipm9 0:a2d3a9f771b8 205 xsprintf(buf, "info x:%d y:%d ea:%d eb:%d ed:%d ra:%d\r\n", pixX, pixY, EEbuf[Pixel], EEbuf[Pixel + 0x40], EEbuf[Pixel + 0x80], VirPixelX);
kunipm9 0:a2d3a9f771b8 206 pc.puts(buf);
kunipm9 0:a2d3a9f771b8 207 }
kunipm9 0:a2d3a9f771b8 208 }
kunipm9 0:a2d3a9f771b8 209
kunipm9 0:a2d3a9f771b8 210 ShowTempsVT100();
kunipm9 0:a2d3a9f771b8 211 wait_ms(300);
kunipm9 0:a2d3a9f771b8 212 }
kunipm9 0:a2d3a9f771b8 213 }