Lepton sensor on the DISCO-F746NG board. Based on the rapberry_pi example code at https://github.com/groupgets/LeptonModule

Dependencies:   mbed-src BSP_DISCO_F746NG LCD_DISCO_F746NG

Committer:
Patrik Ryd
Date:
Wed Dec 09 13:49:21 2015 +0100
Revision:
4:15c97a3e1995
Parent:
3:3b3517e9fa11
Child:
5:998916f0f3ae
Some more code...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pryd 0:291e05a4e8e9 1 #include "mbed.h"
Patrik Ryd 4:15c97a3e1995 2 #include "palettes.h"
pryd 0:291e05a4e8e9 3
Patrik Ryd 4:15c97a3e1995 4 #define BYTES_PER_PACKET (164)
Patrik Ryd 4:15c97a3e1995 5 #define DATA_PER_PACKET (BYTES_PER_PACKET/2)
Patrik Ryd 4:15c97a3e1995 6 #define PACKETS_PER_FRAME (60)
pryd 0:291e05a4e8e9 7
pryd 0:291e05a4e8e9 8 Serial pc(USBTX, USBRX);
pryd 0:291e05a4e8e9 9 SPI lepton_spi(SPI_MOSI, SPI_MISO, SPI_SCK);
pryd 0:291e05a4e8e9 10 DigitalOut spi_cs(SPI_CS);
pryd 0:291e05a4e8e9 11
Patrik Ryd 4:15c97a3e1995 12 static uint8_t lepton_buffer[BYTES_PER_PACKET * PACKETS_PER_FRAME];
Patrik Ryd 4:15c97a3e1995 13 static uint32_t lepton_image[80][80];
pryd 0:291e05a4e8e9 14
Patrik Ryd 2:a0eb7bff9571 15 void setup(void)
Patrik Ryd 2:a0eb7bff9571 16 {
Patrik Ryd 2:a0eb7bff9571 17 lepton_spi.format(8,3);
Patrik Ryd 2:a0eb7bff9571 18 lepton_spi.frequency(20000000);
Patrik Ryd 2:a0eb7bff9571 19 spi_cs = 1;
Patrik Ryd 2:a0eb7bff9571 20 spi_cs = 0;
Patrik Ryd 2:a0eb7bff9571 21 spi_cs = 1;
Patrik Ryd 2:a0eb7bff9571 22 wait_ms(185);
Patrik Ryd 2:a0eb7bff9571 23 }
Patrik Ryd 2:a0eb7bff9571 24
Patrik Ryd 2:a0eb7bff9571 25 void get_frame(void)
Patrik Ryd 2:a0eb7bff9571 26 {
Patrik Ryd 4:15c97a3e1995 27 int p;
Patrik Ryd 4:15c97a3e1995 28 int i;
Patrik Ryd 4:15c97a3e1995 29 int packet_num;
Patrik Ryd 2:a0eb7bff9571 30
Patrik Ryd 2:a0eb7bff9571 31 spi_cs = 0;
Patrik Ryd 4:15c97a3e1995 32
Patrik Ryd 4:15c97a3e1995 33 // No error handling. Assume we don't loose any packets
Patrik Ryd 4:15c97a3e1995 34 for(p=0;p<PACKETS_PER_FRAME;p++){
Patrik Ryd 4:15c97a3e1995 35 for(i=0;i<LEPTON_FRAME_SIZE;i++){
Patrik Ryd 4:15c97a3e1995 36 lepton_buffer[p*PACKETS_PER_FRAME + i] = lepton_spi.write(0x00);
Patrik Ryd 4:15c97a3e1995 37 }
Patrik Ryd 4:15c97a3e1995 38 packet_num = lepton_buffer[p*PACKETS_PER_FRAME + 1];
Patrik Ryd 4:15c97a3e1995 39 if(packet_num != p){
Patrik Ryd 4:15c97a3e1995 40 pc.printf("Packet problem\n");
Patrik Ryd 4:15c97a3e1995 41 }
Patrik Ryd 4:15c97a3e1995 42 }
Patrik Ryd 4:15c97a3e1995 43
Patrik Ryd 2:a0eb7bff9571 44 spi_cs = 1;
Patrik Ryd 2:a0eb7bff9571 45 }
Patrik Ryd 2:a0eb7bff9571 46
Patrik Ryd 4:15c97a3e1995 47 void create_image(void)
Patrik Ryd 4:15c97a3e1995 48 {
Patrik Ryd 4:15c97a3e1995 49 uint16_t min_val = 65535;
Patrik Ryd 4:15c97a3e1995 50 uint16_t max_val = 0;
Patrik Ryd 4:15c97a3e1995 51 uint16_t value;
Patrik Ryd 4:15c97a3e1995 52 int column;
Patrik Ryd 4:15c97a3e1995 53 int row;
Patrik Ryd 4:15c97a3e1995 54 int i;
Patrik Ryd 4:15c97a3e1995 55
Patrik Ryd 4:15c97a3e1995 56 for(i=0;i<DATA_PER_PACKET;i++){
Patrik Ryd 4:15c97a3e1995 57 if(i % DATA_PER_PACKET < 2){
Patrik Ryd 4:15c97a3e1995 58 continue;
Patrik Ryd 4:15c97a3e1995 59 }
Patrik Ryd 4:15c97a3e1995 60 value = lepton_buffer[i*2] < 8 + lepton_buffer[i*2+1];
Patrik Ryd 4:15c97a3e1995 61 if(value > max_val) {
Patrik Ryd 4:15c97a3e1995 62 max_val = value;
Patrik Ryd 4:15c97a3e1995 63 }
Patrik Ryd 4:15c97a3e1995 64 if(value < min_val) {
Patrik Ryd 4:15c97a3e1995 65 min_val = value;
Patrik Ryd 4:15c97a3e1995 66 }
Patrik Ryd 4:15c97a3e1995 67 }
Patrik Ryd 4:15c97a3e1995 68
Patrik Ryd 4:15c97a3e1995 69 float diff = max_val - min_val;
Patrik Ryd 4:15c97a3e1995 70 float scale = 255/diff;
Patrik Ryd 4:15c97a3e1995 71 uint8_t r;
Patrik Ryd 4:15c97a3e1995 72 uint8_t g;
Patrik Ryd 4:15c97a3e1995 73 uint8_t b;
Patrik Ryd 4:15c97a3e1995 74
Patrik Ryd 4:15c97a3e1995 75 for(i=0;i<DATA_PER_PACKET;i++){
Patrik Ryd 4:15c97a3e1995 76 if(i % DATA_PER_PACKET < 2){
Patrik Ryd 4:15c97a3e1995 77 continue;
Patrik Ryd 4:15c97a3e1995 78 }
Patrik Ryd 4:15c97a3e1995 79 value = lepton_buffer[i*2] < 8 + lepton_buffer[i*2+1];
Patrik Ryd 4:15c97a3e1995 80 column = (i % DATA_PER_PACKET ) - 2;
Patrik Ryd 4:15c97a3e1995 81 row = i / DATA_PER_PACKET;
Patrik Ryd 4:15c97a3e1995 82
Patrik Ryd 4:15c97a3e1995 83 value = (value - min_val) / scale;
Patrik Ryd 4:15c97a3e1995 84 r = colormap_ironblack[3*value];
Patrik Ryd 4:15c97a3e1995 85 g = colormap_ironblack[3*value+1];
Patrik Ryd 4:15c97a3e1995 86 b = colormap_ironblack[3*value+2];
Patrik Ryd 4:15c97a3e1995 87 }
Patrik Ryd 4:15c97a3e1995 88 }
Patrik Ryd 4:15c97a3e1995 89
pryd 0:291e05a4e8e9 90 int main()
pryd 0:291e05a4e8e9 91 {
pryd 0:291e05a4e8e9 92 pc.printf("Alive\n");
pryd 0:291e05a4e8e9 93
pryd 0:291e05a4e8e9 94 }