View previous topic :: View next topic |
Author |
Message |
romano21
Joined: 04 May 2018 Posts: 8
|
PIC16f627 need help for implemented Watchdog |
Posted: Fri May 04, 2018 4:59 am |
|
|
Hello to all ! A few years ago a man give me a program for pic16 that he had created.
I spend long time for doing a functional electronic part, today the case works.
Simple system with 1 push button and 1 led and which allows to switch in SP95 (fuel classic ) or E85 mode.
FIXED LED = unleaded mode (long press on the button).
Flashing LED 6x = E85 mode (long press then 6 short press).
But it happens totally randomly that the program crash, after 3 days or 3 weeks or after 1 year.
My car goes wrong and the box in LED off or then it goes back into SP95 (fixed LED) randomly.
The program prevents any programming in eeprom 10 seconds after startup.
The box must then be reprogrammed manually using the push button.
This phenomenon is very probably caused by electrical disturbances it is impossible for me to reproduce the phenomenon.
I know i need to integrate WATCHDOG in my program.
But I am no ideas of how and where to place WDT in my program. My experience with C programming is very limited.
I use Mplab to compile the program PIC16F627. Can someone help me ? Thanks ! Sorry for my english. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19486
|
|
Posted: Fri May 04, 2018 1:49 pm |
|
|
Are you using CCS C?.
If not this is not the forum to be asking.
Honestly you need to be fixing the electrical disturbance causing the problem. A watchdog is not a fix for such problems.
BOR might help ensure a clean restart, but a BOR restart or a watchdog restart is going to involve the code restarting, so it won't be in the state it was when running.
Automotive applications require very careful hardware design, since this is a noisy environment. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9220 Location: Greensville,Ontario
|
|
Posted: Sat May 05, 2018 11:31 am |
|
|
I have to agree with Mr. T., automotive products have to be very, VERY well designed ! Starting with proper PCB design and layout, every I/O well filtered, shielded cabling, mumetal box, robust power supply, correct PB debounce are just a few of the items that need to be done.
A WDT is a 'crutch' or 'bandaid', something used as a last resort. It is vital to find out WHAT is causing the problem. Airborne EMI, cell phone, bad alternator, power surge, crosstalk, EMP from lightning 20 miles away, the list is endless... but each and every issue has a solution. |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 4:40 am |
|
|
I agree with you and i work for this.
But watchdog is not useless for my situation and even if agree with you for hardware parts, i just need help for place watchdog in my program. I can share my program if needed. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue May 08, 2018 12:12 pm |
|
|
romano21 wrote: |
I just need help for place watchdog in my program. I can share my
program if needed.
|
In your program you will most likely have a main loop. This loop will be
a continuous while() statement. Inside the loop you call various functions.
But what if one of those functions hangs up ? What if it doesn't return
to the main loop when it's finished ? In that case, the watchdog timer
will timeout and reset the PIC. It may not cure the problem.
The problem could be a bad sensor. But this is the most simple implementation:
Code: |
while(TRUE)
{
data = read_sensor();
final_data = process_result(data);
display_result(final_data);
restart_wdt(); // Restart WDT if we didn't hang.
}
|
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19486
|
|
Posted: Tue May 08, 2018 1:37 pm |
|
|
and then you of course need to work out the slowest routine the code may ever need to execute, and set the watchdog interval to be longer than this.
Ideally you have the restart only executed if all the component parts of the code have executed correctly. |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 1:50 pm |
|
|
Main.C
Last edited by romano21 on Wed May 09, 2018 2:00 am; edited 1 time in total |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 1:52 pm |
|
|
Timer.c
Last edited by romano21 on Wed May 09, 2018 2:00 am; edited 1 time in total |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 1:54 pm |
|
|
ihm.c ( human machin interface )
Last edited by romano21 on Wed May 09, 2018 1:57 am; edited 1 time in total |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 1:56 pm |
|
|
eprom.c
Last edited by romano21 on Wed May 09, 2018 1:55 am; edited 1 time in total |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Tue May 08, 2018 1:57 pm |
|
|
timer.c
Last edited by romano21 on Wed May 09, 2018 1:54 am; edited 1 time in total |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue May 08, 2018 5:35 pm |
|
|
romano21 wrote: | Main.C
#include <htc.h>
|
You're using the Hi-Tech compiler. We're only supposed to answer
questions for the CCS compiler. This is the CCS forum. |
|
|
romano21
Joined: 04 May 2018 Posts: 8
|
|
Posted: Wed May 09, 2018 2:01 am |
|
|
Sorry for that ! |
|
|
|