Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:a2d3a9f771b8, 2014-04-04 (annotated)
- Committer:
- kunipm9
- Date:
- Fri Apr 04 14:01:24 2014 +0000
- Revision:
- 0:a2d3a9f771b8
1st
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |