Child pages
  • Panasonic Grid Eye Library for Atmel Software Framework
Skip to end of metadata
Go to start of metadata

This Panasonic Grid Eye library is a C code library that allows Atmel boards using the Atmel Software Framework (ASF) to communicate with single or multiple Grid Eye modules. With the inclusion of this library, the working project will be able to access raw Grid Eye data including pixel data, temperature, interrupts and frame rate, alongside secondary functions to visualize the data.

 

To utilize this library, download grideye_library.zip. Include the library into your AtmelStudio 6 project and include GridEye.h. The Grid Eye must be connected to the microcontroller via an I2C bus.

 

This article assumes you have a basic working knowledge of AtmelStudio 6 and ASF.

Table of Contents

Library Overview

Direct Access

These functions send and read data from the Grid Eye.

uint8_t	ge_init      			(GridEye *ge, Twim *twim, uint8_t grideye_address);
bool  	ge_setFPS     			(GridEye *ge, bool fps_set_10);
bool  	ge_readAverage 	 		(GridEye *ge);
bool  	ge_initialReset    		(GridEye *ge);
bool  	ge_setInterrupt    		(GridEye *ge, bool absolute, uint16_t upper, uint16_t lower, uint16_t hysteresis);
bool  	ge_readInterruptFlag	(GridEye *ge, bool clearFlag);
bool  	ge_clearInterruptFlag	(GridEye *ge);
uint8_t ge_readFPS     			(GridEye *ge);
bool  	ge_readTemp     		(GridEye *ge);

 

Image Manipulation

These functions provide basic image operations.

void  geimage_copy    			(GridEyeImage *from, GridEyeImage *to);
void  geimage_sum     			(GridEyeImage *from, GridEyeImage *to);
void  geimage_subtract   		(GridEyeImage *source, GridEyeImage *minus);
void  geimage_abs     			(GridEyeImage *image);

Example Usage

Connection

Choose a Two-Wire Interface Master bus for your board. In this article, I chose TWIM3. After checking the datasheet for my Atmel SAM4L Xplained Pro board, I found the pins that TWIM3 uses.

Using the following wiring scheme, connect the Grid Eye to the bus on your board. You may change AD_SELECT from ground to VDD with a 10k Ω pull-up resistor to change the device's address.

 

 

Includes

  • Import both "grideye.h" and "grideye.c" into your working project.

  • Include "grideye.h" into your main operating file.

  • Using ASF Wizard, include the following modules into your project:
    • TWI - Two-Wire Interface
    • TWI - Two-Wire Master Interface
    • System Clock Control
    • Sleep Manager
    • Power Management
    • IOPORT - General purpose I/O service
    • FLASHCALW Controller Software Driver

 

Setup I2C

The following will setup both the I2C data and clock to be used on the extension pins. The defines are for a Atmel SAM4L Xplained Pro board. You will have to change the defines according to your board.

To find the pins you need to setup, you need to know the Two-Wire Interface Master bus name for your board. In my example, I use TWIM3 which correlates to EXT2_PIN_TWI_SCL and EXT2_PIN_TWI_SDA.

 

ioport_set_pin_mode(EXT2_PIN_TWI_SCL, EXT2_TWI_SCL_MUX);
ioport_disable_pin(EXT2_PIN_TWI_SCL);
ioport_set_pin_mode(EXT2_PIN_TWI_SDA, EXT2_TWI_SDA_MUX);
ioport_disable_pin(EXT2_PIN_TWI_SDA);

Initialize the Grid Eye

Now that the I2C pins are setup, the Grid Eye can be initialized using the library.

//Allocate memory to the Grid Eye structure
GridEye ge_inst;

//initialize the Grid Eye
ge_init(&ge_inst, TWIM3, 0);

 

Select Grid Eye Options

Using the library, we can change options in the Grid Eye registers. Here we set the Grid Eye to operate at 10 FPS and we setup interrupts.

//set FPS to 10
ge_setFPS(&ge_inst, true);

//Setup Grid Eye interrupt
ge_setInterrupt(&ge_inst, true, 115, 0, 5);

 

After setting up the Grid Eye interrupts, the INT pin on the Grid Eye will be pulled low whenever an interrupt occur along with the interrupt flag being set in the register.

 

Read Data

Finally, the Grid Eye is setup for operation. We can start to read the raw data values.

//Read the thermistor temperature
ge_readTemp(&ge_inst);

//Read in all 64 pixels of data
ge_readData(&ge_inst);

 

After executing ge_readData(), the Grid Eye buffer in the library has been filled with data. To print the most recent frame use the following:

//Loop through each pixel and print it to the console
for(i = 0; i < 64; i++)
	printf("%d ", ge_inst.image[ge_inst.imagepointer].data[i]);

 

By default, the library holds the previous five frames read in. This allows for old frame comparison. To print out the previous frame, subtract one from ge_inst.imagepointer in the above code.

 

Basic Manipulation

Through extensive testing, I have found the most effective method of filtering noise from the background was to subtract the thermistor temperature from each pixel. This will cancel out a good amount of noise from the background and allow heat sources to stick out better.

//Loop through each pixel and print it to the console
for(i = 0; i < 64; i++)
	printf("%d ", ge_inst.image[ge_inst.imagepointer].data[i] - ge_inst.temperature);

 

Now, check for any pixels with a value above 10. These 'warm' pixels will give a good indication that there is a valid heat source located in that region.

Usable Functions

C Data Structure

This library requires the use of a structure to contain the library data. This setup allows for multiple Grid Eye instances operating at once.

To allocate memory to a structure use the following:

//Allocate memory to structure
GridEye ge_init;

You can operate as many Grid Eyes in the same program as long as you have the buses and memory to support it.

Only two Grid Eyes may operate on a single bus. This is due to the Grid Eye only having two selectable I2C addresses.

 

ge_init

This function will initialize the Grid Eye structure variables and setup the needed variables to connect to the Grid Eye using the I2C interface.

uint8_t ge_init (GridEye *ge, Twim *twim, uint8_t grideye_address);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
Twim *twim
ASF Two-Wire Interface Master addressTWIM3
uint8_t grideye_address

Selectable Address

(0 for AD_SELECT set to ground, else AD_SELECT at VDD)

0

 

ge_readData

Reads in all 64 pixels of raw data from the Grid Eye. This will fill the a single frame in the data buffer.

bool ge_readData (GridEye *ge);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
ReturnsResult
falseData read failed
trueData read successful

 

After executing this command, imagepointer will be incremented to reflect where the data was updated in the buffer.

To access the most recent frame after executing use the following example:

ge_readData(&ge_inst);

for(int i = 0; i < 64; i++)
	printf("%d ", ge_inst.image[ge_inst.imagepointer].data[i]);

 

When the buffer is full, imagepointer will be wrapped around to zero.

 

ge_setFPS

Sets the frame rate in the Grid Eye register.

bool  ge_setFPS (GridEye *ge, bool fps_set_10);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
bool fps_set_10
Sets FPS (true for 10 FPS, false for 1 FPS)true
ReturnsResult
falseData write failed
trueData write successful

ge_readData() will be able to read the data register as often as possible but the data will only be updated at the frame rate selected.

 

 

ge_readFPS

Read the current FPS value from the Grid Eye.

bool  ge_setFPS (GridEye *ge, bool fps_set_10);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
bool fps_set_10
Sets FPS (true for 10 FPS, false for 1 FPS)true
ReturnsResult
1FPS set at 1
10FPS set at 10
elseValue couldn't be read

 

 

ge_readTemp

Read the current thermistor temperature value from the Grid Eye. The result is stored under temperature in the data structure. This value is useful to subtract from the readData frame to filter out background noise.

 

bool ge_readTemp (GridEye *ge);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
ReturnsResult
falseValue couldn't be read
trueValue read

 

 

ge_readAverage

This function will fill the read buffer and average all the values. The default buffer is set to 5 which will take 500 ms to complete.

bool ge_readAverage (GridEye *ge);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
ReturnsResult
falseData write failed
true

Data write successful

 

 

ge_initialReset

Provides a quick way of resetting all setting registers on the Grid Eye. Essentially, this function performs a software reset.

bool ge_initialReset (GridEye *ge);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
ReturnsResult
falseFailed to reset
true

Reset sent successfully

 

 

ge_setInterrupt

Initializes the Grid Eye's built in interrupt system. The system will trigger an interrupt when the system's settings match current conditions. An interrupt appears on the INT pin by pulling it low and will also set the interrupt flag high in the register. In code, the easiest way to detect an interrupt is by using ge_readInterruptFlag.

 

bool ge_setInterrupt (GridEye *ge, bool absolute, uint16_t upper, uint16_t lower, uint16_t hysteresis);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
bool absolute
Select absolute or difference modetrue
uint16_t upper
Upper boundary to trigger an interrupt115
uint16_t lower
Lower boundary to trigger an interrupt0
uint16_t hysteresis
Hysteresis level0
ReturnsResult
falseData write failed
true

Data write successful

 

 

ge_readInterruptFlag

Returns the value of the interrupt flag in the Grid Eye's memory. Will clear the flag if given the argument.

 

bool ge_readInterruptFlag (GridEye *ge, bool clearFlag);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
bool clearFlag
Clear the flag after readtrue
ReturnsResult
falseFlag not set
true

Flag set

 

 

ge_clearInterruptFlag

Clears the interrupt flag in the Grid Eye's memory without reading the value.

 

bool ge_clearInterruptFlag (GridEye *ge);
ArgumentUseExample
GridEye *ge
Pass the address of the Grid Eye structure&ge_init
ReturnsResult
falseFlag could not be cleared
true

Flag cleared

 

 

Download

grideye_library.zip

 

 

Additional Information

Panasonic Grid Eye Breakout Board and GUI

Panasonic Grid Eye Memory Registers

 

Feedback for Our Sponsor

Please take a few seconds to help us justify the continued development and expansion of the eewiki.

Click on one of our Digi-Key links on your way to search for or purchase electronic components.

Is the eewiki helpful?  Comments, feedback, and questions can be sent to eewiki@digikey.com.