Piotr Sedrowski

LCD display fault detect circuit - LFD - kinetis KL46

Discussion created by Piotr Sedrowski on Oct 10, 2016
Latest reply on Oct 31, 2016 by Iva Dorazinova

Hello everybody!
I need your help. I've a little problem with my code which should  detect faults in a circuit in kinetis mkl46(RTOS, 12Mhz).


Here is my init code for LCD:

void sLCD_Init(void)
{
   uint8_t waveForm = 0;
   slcd_config_t config;
   slcd_clock_config_t clkConfig =
   {
      kSLCD_AlternateClk1,
      kSLCD_AltClkDivFactor1,
      kSLCD_ClkPrescaler01,
      false
   };
   LCD_InitPins_ALT0();
   SLCD_GetDefaultConfig(&config);

 

   /* Verify and Complete the configuration structure. */
   config.clkConfig = &clkConfig;
   config.powerSupply = kSLCD_InternalVll3UseChargePump;
   config.loadAdjust = kSLCD_LowLoadOrFastestClkSrc;
   config.dutyCycle = kSLCD_1Div4DutyCycle;
   config.slcdLowPinEnabled = 0xFFFFFF88U; /* 11111111 11111111 11111111 10001000 */ // 3,    7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
   config.slcdHighPinEnabled = 0x1F73U; /* 00000000 00000000 00011111 01110011 */ // 32,33, 36,37,38, 40,41,42,43,44
   config.backPlaneLowPin = 0xF000000U; /* 00001111 00000000 00000000 00000000 */
   config.backPlaneHighPin = 0x0U; /* 00000000 00000000 00000000 00000000 */
   config.faultConfig = NULL;

 

   /* SLCD Initialize. */
   SLCD_Init(LCD, &config);

   //waveForm = (kSLCD_PhaseAActivate | kSLCD_PhaseBActivate | kSLCD_PhaseCActivate |    kSLCD_PhaseDActivate);
   /* Set SLCD back plane phase. */
   SLCD_SetBackPlanePhase(LCD, 24, kSLCD_PhaseAActivate); /* SLCD COM1 --- LCD_P24. */
   SLCD_SetBackPlanePhase(LCD, 25, kSLCD_PhaseBActivate); /* SLCD COM2 --- LCD_P25. */
   SLCD_SetBackPlanePhase(LCD, 26, kSLCD_PhaseCActivate); /* SLCD COM3 --- LCD_P26. */
   SLCD_SetBackPlanePhase(LCD, 27, kSLCD_PhaseDActivate); /* SLCD COM4 --- LCD_P27. */


   /* Starts SLCD display. */
   SLCD_StartDisplay(LCD);

}

 

And here is my code to detect faults in a circuit:

LCD_InitPins_ALT7();
for(i=0; i<36; i++){
   LCD_FDCR = 0;
   LCD_FDCR |= LCD_FDCR_FDPINID(LCD_PINS[i]);
   if(i<4){
      LCD_FDCR |= LCD_FDCR_FDBPEN(1); // 1-BACK PLANE
      LCD_FDCR |= LCD_FDCR_FDPRS(5); // CLOCK: 5 - 1/32 bus clock
      LCD_FDCR |= LCD_FDCR_FDSWW(6); // SAMPLE WIDTH: 6 - 256 sample clock cycles
   }else{
      LCD_FDCR |= LCD_FDCR_FDBPEN(0); // 0-FRONT PLANE
      LCD_FDCR |= LCD_FDCR_FDPRS(5); // CLOCK: 4 - 1/32 bus clock
      LCD_FDCR |= LCD_FDCR_FDSWW(2); // SAMPLE WIDTH: 2 - 16 sample clock cycles
   }

   LCD_FDCR |= LCD_FDCR_FDEN(1); // ENABLE FAULT DETECTION;
   while(!(LCD_FDSR & LCD_FDSR_FDCF_MASK)){

   }
   //msDelay(100);
   //LFD_one_samples_cnt[i] = (uint8_t)(LCD_FDSR & LCD_FDSR_FDCNT_MASK);

   LFD_one_samples_cnt[i] = SLCD_GetFaultDetectCounter(LCD);
   LCD_FDSR = LCD_FDSR_FDCF(1); // CLEAR BIT
}
LCD_InitPins_ALT0();

 

And output data:

LFD_one_samples_cnt[0] = 0xc9;

LFD_one_samples_cnt[1] = 0xca;

LFD_one_samples_cnt[2] = 0xb3;

LFD_one_samples_cnt[3] = 0xab;

LFD_one_samples_cnt[4] = 0x0;

LFD_one_samples_cnt[5] = 0x0;

LFD_one_samples_cnt[6] = 0x0;

LFD_one_samples_cnt[7] = 0x0;

LFD_one_samples_cnt[8] = 0x0;

LFD_one_samples_cnt[9] = 0x10;

LFD_one_samples_cnt[10] = 0x0;

LFD_one_samples_cnt[11] = 0x10;

LFD_one_samples_cnt[12] = 0x0;

LFD_one_samples_cnt[13] = 0x10;

LFD_one_samples_cnt[14] = 0x0;

LFD_one_samples_cnt[15] = 0x10;

LFD_one_samples_cnt[16] = 0x0;

LFD_one_samples_cnt[17] = 0x10;

LFD_one_samples_cnt[18] = 0x10;

LFD_one_samples_cnt[19] = 0x0;

LFD_one_samples_cnt[20] = 0x10;

LFD_one_samples_cnt[21] = 0x0;

LFD_one_samples_cnt[22] = 0x10;

LFD_one_samples_cnt[23] = 0x0;

LFD_one_samples_cnt[24] = 0x10;

LFD_one_samples_cnt[25] = 0x0;

LFD_one_samples_cnt[26] = 0x10;

LFD_one_samples_cnt[27] = 0x0;

LFD_one_samples_cnt[28] = 0x10;

LFD_one_samples_cnt[29] = 0x0;

LFD_one_samples_cnt[30] = 0x10;

LFD_one_samples_cnt[31] = 0x0;

LFD_one_samples_cnt[32] = 0x10;

LFD_one_samples_cnt[33] = 0x0;

LFD_one_samples_cnt[34] = 0x10;

LFD_one_samples_cnt[35] = 0x0;

 

LFD_one_samples_cnt[0], LFD_one_samples_cnt[1], LFD_one_samples_cnt[2] and LFD_one_samples_cnt[3] are correct. Others have always the same value - 0x0 or 0x10;

 

Does anyone have any idea why it does not work properly??? I wolud be grateful for any advice ;-)

Outcomes