Question: I am programming an ATSAMD21J18A using Atmel Studio 7. I am programming in C for ARM programming. I need to create an array that will
I am programming an ATSAMD21J18A using Atmel Studio 7. I am programming in C for ARM programming. I need to create an array that will store the data from the temperature sensor and then display it on the screen.The code below does produce a temperature when running debug. Can someone please help with this? If you know of any books or websites with help on this please share.
Code below:
#include "samd21.h" #include #include #include
unsigned char* ARRAY_PORT_PINCFG0 = (unsigned char*) _PORT_PINCFG0; unsigned char* ARRAY_PORT_PMUX0 = (unsigned char*) _PORT_PMUX0;
#define SLAVE_ADDR 0x4F /* 1001 111. AT30TSE758*/ //#define T_LOW_Limit_Register_Address 0x12 /* Pointer Register Value*/ //#define T_HIGH_Limit_Register_Address 0x13 /* Pointer Register Value*/ #define T_HIGH_Limit_Register_Address 0x00 /* Pointer Register Value*/ #define T_LOW_Limit_Register_Address 0x00 #define Temperature_Register_Address 0x00
void I2C2_init (void); int I2C2_Byte_Read (unsigned char saddr, unsigned char Pointer_Register_Value, unsigned char* data); int I2C2_Byte_Write (unsigned char saddr, unsigned char Pointer_Register_Value, unsigned char* data);
int main (void) {
unsigned char data; unsigned char current_temp[0];
I2C2_init();
I2C2_Byte_Read (SLAVE_ADDR, T_HIGH_Limit_Register_Address, &data); current_temp[0] = REG_SERCOM0_I2CM_DATA;//high limit }
void I2C2_init (void) { REG_PM_APBCMASK |= 0x00000004; /* SERCOM0 bus clock */ GCLK->CLKCTRL.reg = 0x4014; /* SERCOM0 core clock */
ARRAY_PORT_PINCFG0[8] |= 1; /* Allow pmux to set PA08 pin configuration */ ARRAY_PORT_PINCFG0[9] |= 1; /* Allow pmux to set PA08 pin configuration */ ARRAY_PORT_PMUX0[4] = 0x22; /* PA08 = TWI_SDA , PA09 = TWI_SCL */
REG_SERCOM0_I2CM_CTRLA = 1; /* Reset SERCOM0 */
while (REG_SERCOM0_I2CM_CTRLA & 1) {} /* Wait for reset to complete */
REG_SERCOM0_I2CM_CTRLA = 0x14; /* Master mode */ REG_SERCOM0_I2CM_BAUD = 0; /* 1 MHz main clock -> ~100KHz */ REG_SERCOM0_I2CM_CTRLA |= 2; /* Enable SERCOM0 */ REG_SERCOM0_I2CM_STATUS = 0x10; /* Force idle */ }
/* * * Read the Nonvolatile T_LOW Limit Register and the Nonvolatile T_HIGH Limit * Register of the AT30TSE758. * */ int I2C2_Byte_Read (unsigned char saddr, unsigned char Pointer_Register_Value, unsigned char* data) { while ( (REG_SERCOM0_I2CM_STATUS & 0x30) != 0x10); /* Wait until idle */
REG_SERCOM0_I2CM_ADDR = SLAVE_ADDR
while ( (REG_SERCOM0_I2CM_INTFLAG & 1) == 0); /* Wait until SLAVE_ADDR sent */
REG_SERCOM0_I2CM_DATA = Pointer_Register_Value; /* Send Pointer Register Value */
while ( (REG_SERCOM0_I2CM_INTFLAG & 1) == 0); /* Wait until Pointer Register Value sent */
REG_SERCOM0_I2CM_ADDR = (saddr
while ( (REG_SERCOM0_I2CM_INTFLAG & 2) == 0); /* Wait until data received */
*data = REG_SERCOM0_I2CM_DATA; /* Read data */
REG_SERCOM0_I2CM_CTRLB |= 0x40000; /* Generate NACK */
REG_SERCOM0_I2CM_CTRLB |= 0x30000; /* issue a stop */
return 0; }
/* millisecond delay based on 1 MHz system clock */ void delayMs (int n) { int i;
for (; n > 0; n--) for (i = 0; i
Here is the code and output that I have in debug. I am getting 29 degrees from sensor. I want to store this data into an array of size 10, then display the array with the 10 temperatures.

How to ma 1Am Progr Get Homew Advanced Mode Temperature_Sensor_NEW (Debugging) - AtmelStudio File Edit View VAssistX ASF Project Build Debug Tools Window Help uint16 t Debug Browser PI Debug T SWD on EDBG MSD (ATML21 ATSAMD21J18A main.c startup_samd21.c Watch 1 int main (void) Value main Name 29 data O temperature unsigned char data; unsigned char current_temp; 29 12C2 init(): 12C2_Byte Read (SLAVE_ADDR, T_HIGH_Limit_Register_Address, &data); current temp int temperature- data; Autos Locals Watch 1 Watch 2 - REG_SERCOMO_12CM_DATA;//high limit Afede et Sec Bvoid 12C2 init (yaid) How to ma 1Am Progr Get Homew Advanced Mode Temperature_Sensor_NEW (Debugging) - AtmelStudio File Edit View VAssistX ASF Project Build Debug Tools Window Help uint16 t Debug Browser PI Debug T SWD on EDBG MSD (ATML21 ATSAMD21J18A main.c startup_samd21.c Watch 1 int main (void) Value main Name 29 data O temperature unsigned char data; unsigned char current_temp; 29 12C2 init(): 12C2_Byte Read (SLAVE_ADDR, T_HIGH_Limit_Register_Address, &data); current temp int temperature- data; Autos Locals Watch 1 Watch 2 - REG_SERCOMO_12CM_DATA;//high limit Afede et Sec Bvoid 12C2 init (yaid)
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
