This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

data logging



Hello,

          I want to read the internal temperature of the stellaris and store the data into the sd card in a .csv format.

I am successfully create the file and also append the data. I am using chan-fat fs library.I getting the data from the internal sensor every second so that i had used timer for the timer interupt.but after the five second i had stop the timer but after the stopping the timer it was not appending the data of the sensor.i send you my code.i don't understand the this type of confusion. 

int
main(void)
{
    count=0;

   	SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
   	SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS);
   	ADCSequenceDisable(ADC0_BASE, 1);

   	ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0);
   	ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS);
   	ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS);
   	ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS);
   	ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
   	ADCSequenceEnable(ADC0_BASE, 1);


    // Enable lazy stacking for interrupt handlers.  This allows floating-point
    // instructions to be used within interrupt handlers, but at the expense of
    // extra stack usage.
    //
    ROM_FPULazyStackingEnable();

    // Set the system clock to run at 50MHz from the PLL.
    //
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

    // Enable the peripherals used by this example.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_2|GPIO_PIN_3);
    GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);

    //
    // Configure SysTick for a 100Hz interrupt.  The FatFs driver wants a 10 ms tick.
    //
    /*ROM_SysTickPeriodSet(ROM_SysCtlClockGet() / 100);
    ROM_SysTickEnable();
    ROM_SysTickIntEnable();*/

    /*for the user requirment
            * here it's generats interupt at every X second.

           	ulPeriod = SysCtlClockGet()*X;
           	TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod);
           */


  	                fr = f_mount(0, &FatFs);
          		    if(fr != FR_OK)
           	        {
           	         GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_3);
        	        //
         	        // Delay for a bit
          	        //
          	        SysCtlDelay(50000);
       		        return(1);
          		    }
   	        		//fr = f_mkdir("sub1");
        		     //if (fr) die(fr);

  	        		if (f_open(&Fil, "DEMO1.csv", FA_WRITE | FA_OPEN_ALWAYS ) == FR_OK) 	// Create a file
       		        {
       		         		size = (&Fil)->fsize;
       		    	 		fr= f_lseek(&Fil,size);
      		    	 		fr= f_write(&Fil,"Time,internel_celsius,intenel_fahrenheit\n",39,&bw);
      		    	 		fr= f_write(&Fil,"\n",1,&bw);
       		    	 		//fr= f_write(&Fil,"Time\r\n",6,&bw);
       		    	  	  // f_printf(&Fil, "%u", count);            /* "1234" */
   		    	 	 }
      		    	 	fr=f_close(&Fil);

    //count1="0";
      		    	 	indata16 = 0x0000;
      		    	 	GPIOPinWrite(GPIO_PORTB_BASE,CLK, 2);
      		    	 	SysCtlDelay(1000000);


      		    	 	        TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet());
      		    	 	    	IntEnable(INT_TIMER0A);
      		    	 	    	TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
      		    	 	    	IntMasterEnable();
      		    	 	    	TimerEnable(TIMER0_BASE, TIMER_A);
      		    	 	    //
      		    	 	    // Enable Interrupts
      		    	 	    //
    	    ROM_IntMasterEnable();
        while(1)
    	{
					if(count>=5)
					{
								//IntDisable(INT_TIMER0A);
								TimerIntDisable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
								//IntMasterDisable();
								//TimerDisable(TIMER0_BASE, TIMER_A);
								goto my_data;
					}
					ADCIntClear(ADC0_BASE, 1);
					ADCProcessorTrigger(ADC0_BASE, 1);

					while(!ADCIntStatus(ADC0_BASE, 1, false))
					{
					}


					ADCSequenceDataGet(ADC0_BASE, 1, ulADC0Value);

    	}

        my_data:

  	  	  for(datacount=1;datacount<=5;datacount++)
  	  	  {
  	  		mydatac1=datacount;
  	  					    	itoa(mydatac1,result,10);            //this function convert integer to string
  	  					    	itoa(bufferulTempValueC[mydatac1],ulTempValueC1,10);            //this function convert integer to string
  	  					    	itoa(bufferulTempValueF[mydatac1],ulTempValueF1,10);            //this function convert integer to string

  	  					    										if (f_open(&Fil, "DEMO1.csv", FA_WRITE | FA_OPEN_ALWAYS ) == FR_OK) 	// Create a file
  	  					    	          	        		        {
  	  					    	          	        		         		size = (&Fil)->fsize;
  	  					    	          	        		    	 		fr= f_lseek(&Fil,size);
  	  					     		       	        		    	 	    fr = f_write(&Fil,result,2, &bw);
  	  					     		       	        		    	 	    fr= f_write(&Fil,",",1,&bw);

  	  					     		       	        		    	 	    fr = f_write(&Fil,ulTempValueC1,2, &bw);
  	  					     		       	        		    	 		fr= f_write(&Fil,",",1,&bw);

  	  					     		       	        		    	 	    fr = f_write(&Fil,ulTempValueF1,2, &bw);
  	  					     		       	        		    	 	    //fr= f_write(&Fil,",",1,&bw);

  	  					     		       	        		    	 	    //fr = f_write(&Fil,Hum1,2, &bw);
  	  					     		       	        		    	 		//fr= f_write(&Fil,",",1,&bw);

  	  					     		       	        		    	 		//fr = f_write(&Fil,Temp1,2, &bw);
  	  					     		       	        		    	 	    fr= f_write(&Fil,"\n",1,&bw);
  	  					     		       	        		    	 	    //f_printf(&Fil, "%u", 1234);            /* "1234" */

  	  					    	          	        		    	 		//fr= f_write(&Fil,"Time\r\n",6,&bw);
  	  					    	       	        		    	 	 }
  	  					    	          	        		    	 	fr=f_close(&Fil);

  	  		  //mysdcard(datacount);
  	  	  }


}
void Timer0IntHandler(void)
{
	counter=counter+1;
	// Clear the timer interrupt
	count=count+1;
	TimerIntClear (TIMER0_BASE, TIMER_TIMA_TIMEOUT);
		if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_2))
	{
		GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
	}
	else
	{
		GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
	}

		ulTempAvg = (ulADC0Value[0] + ulADC0Value[1] + ulADC0Value[2] + ulADC0Value[3] + 2)/4;
		ulTempValueC = (1475 - ((2475 * ulTempAvg)) / 4096)/10;
		ulTempValueF = ((ulTempValueC * 9) + 160) / 5;
		bufferulTempValueC[count]=ulTempValueC;
		bufferulTempValueF[count]=ulTempValueF;

		/*indata=temp_hum();
		Hum= indata >>8; //Separate Humidity reading into variable
		bufferHum[count]=Hum;
		Temp= indata & 0x00FF; //Separate Temperature reading into variable
		bufferTemp[count]=Temp;*/



}
first image if before enable the time and i store  data successfull.second image show the same file could not open after disable the timer.

 and after