Problem with TIMER ON DELAY

boschow's Avatar, Join Date: Feb 2007
Go4Expert Member
Hi all,
i am programing a microprocessor. The system part of the application is already done, so i have to write the logic for all the inputs and the outputs ...

In the system part of the the application there si a function UINT32 CSS_GetTime (UINT16 *ms) that gets the time in seconds and miliseconds since last reboot.

ms - is the pointer that holds the number of miliseconds (0 ..999). Can be NULL if miliseconds are not needed.

So i wrote the code something like this:
Code:
UINT32 get_time;
UINT32 delay_time = 3;

if input1 {
       get_time = CSS_GetTime(NULL);
       if get_time > delay_time {
                        output1 = 1;
     } else output1 = 0;
}
This part of the program only works after the reset, because the get_time is never set to zero. Any ideas how can i do this?

I also tryed with miliseconds. Code:
Code:
UINT16 get_mili_sec=0;
UINT32 get_time;
UINT32 time_increment;
UINT32 delay_time = 3;
UINT32 curr_time;

if input1 {
       get_time = CSS_GetTime (&get_mili_sec);
          if (get_time == 999) {
                   time_increment = 1;
          } else time_increment = 0;
          curr_time += time_increment;
          if (curr_time > delay_time) {
                 output = 1;
                 curr_time = 0;
          } else output = 0;
                    curr_time = 0;
}
This part of the program also dosent work. Can somebody tell me what am i doing wrong?

Thx for your time and help,
Best regards,
BoSCHoW.
boschow's Avatar, Join Date: Feb 2007
Go4Expert Member
The timer, is working now. But once the output is set i cannot put it to 0 even if the input is pressed for a shorter time then 3000 ms. I dont know what i did wrong, can somebody help me. Below is the code that i used ...
Code:
if (contactor == 1) output1=1;
else output1=0;

// RS FLIP FLOP SETS FINAL OUTPUT
 (!key_not_pressed 
    && (time_key_active== 0))      contactor = 0;
else if (!key_not_pressed 
         && (time_key_active == 1)) contactor = 1;
else if (key_not_pressed 
         && (time_key_active == 0)) contactor = 0;
else if (key_not_pressed 
         && (time_key_active == 1)) contactor = 0;

//     LOGIC AND - chaks the status of the key
if ((key_check_status ==0)    // check key status failed 
     && input1) // key pressed
		key_not_pressed = 0;
else if ((key_check_status ==0)  // check key status failed
     && !input1) // key not pressed
		key_not_pressed  = 0;
else if ((key_check_status ==1) // check key status success
     && !input1)  // key not presset 
                key_not_pressed  = 1;
else if ((preverjanje_stanja_tipke==1)	// check key stats success
     &&  input1) // key pressed
                key_not_pressed  = 0;

// FLIP FLOP - CHECK KEY STATUS
if (input1  // key pressed
    && (time_key_active == 0))	// key not active
		preverjanje_stanja_tipke = 1;
else if (input1 // key pressed
    && (time_key_active == 1)) // key active
    key_check_status = 0;
else if (!input1 // key not pressed 
    && (time_key_active == 0)) // key not active
    key_check_status = 0;
else if (!input1 // key not pressed 
    && (time_key_active== 1)) // key active
    key_check_status = 0;

 //		 TIMER STARTER
if (input1) {
    begin_s = CSS_GetTime(&begin_ms);
      do {
        time_key_active= 0;
        now_ms = 0;
        now_s = CSS_GetTime(&now_ms);
        passed_time = (now_s - begin_s) * 1000 + (now_ms - begin_ms);
      
      }
      while (passed_time < 3000);
      time_key_active= 1;
}
Thanks for your time and help,
best regards,
BoSCHoW.