|
|
View previous topic :: View next topic |
Author |
Message |
lecutus
Joined: 12 Aug 2009 Posts: 40
|
What is this? |
Posted: Fri Sep 04, 2009 12:36 pm |
|
|
What is this? I trying some printf's to check on some behaviour and I got what I think is some hex stuff. Regardless I need to identify what ever it is. I don't think I asked for this.
First the unidentified:
[90] [C9] [C9] [C9] [C9] [C9] [C9] ) [CB] k [A5] [91] [95] [81]
The log format in which it was found
09/04/2009 09:36:57.406 --> while_cnt = 105
09/04/2009 09:36:57.406 --> while_cnt = 106
09/04/2009 09:36:57.406 --> while_cnt = 107
09/04/2009 09:36:57.406 --> while_cnt = 108
09/04/2009 09:36:57.421 --> while_cnt = 109
09/04/2009 09:36:57.421 --> wh [C9] [C9] [C9] [C9] [C9] [C9] [C9] ) [CB] k [A5] [91] [95] [81] main XXXXXX>>>>>>>>>>>>XXXX
09/04/2009 09:36:57.421 --> b4 pir1 = 00, tmr1if = 00
09/04/2009 09:36:57.421 --> afta pir1 = 00, tmr1if = 00
09/04/2009 09:36:57.421 --> just b4 read_E_data
09/04/2009 09:36:57.421 --> Id_Num= 5000 Engine=01 Trans=03
09/04/2009 09:36:57.437 --> while_cnt = 1
09/04/2009 09:36:57.453 --> while_cnt = 2
09/04/2009 09:36:57.453 --> while_cnt = 3
And the code that produced it:
Code: |
void main()
{
int1 va;
int8 while_cnt=0;
//line_feed();
printf(".......inside main XXXXXX>>>>>>>>>>>>XXXX"); line_feed();
set_tris_a(0xff);
set_tris_c(0xBF);
setup_timer_1(t1_internal|t1_div_by_8); //setup timer #1
can_init(); //init can module
setup_wdt(wdt_on);
set_timer1(0xBDC); //init timer #1
printf("b4 pir1 = %x, tmr1if = %x ",pir1,tmr1if ); line_feed();
bit_clear(pir1,tmr1if);
printf("afta pir1 = %x, tmr1if = %x ",pir1,tmr1if ); line_feed();
printf("just b4 read_E_data");line_feed();
read_e_data(); //reads stored values from eeprom
//printf("just afta read_E_data");line_feed();
while(TRUE)
{
//printf("ENTERING >>>>>>>>>>>>>> , inside while (true)"); line_feed();
va = bit_test(pir1,tmr1if);
//printf("Bit_test = value = %x, pir1 = %x, tmr1if = %x ", va,pir1,tmr1if ); line_feed();
while (!bit_test(pir1,tmr1if)) //sample j1939 rX for 100ms, original
{
printf("while_cnt = %u",++while_cnt); line_feed();
//printf("Bit_test = value = %x, pir1 = %x, tmr1if = %x ", va,pir1,tmr1if ); line_feed();
ck_j1939_input();
ck_rs232();
}
// printf("vvvvvvvvvvvvvvvvvvvvvv tf_data_ok=%u , tf_send_232=%u",tf_data_ok,tf_send_232);line_feed();
//tf_data_ok = true;
if (tf_data_ok) {process_rs232();} //PROCESS RS232 IF DATA IS OK
//tf_send_232 = true;
if (tf_send_232)
{rs232();} //SEND DATA STRING AFTER ANALYZING RS232 COMMANDS
// printf("^^^^^^^^^^^^^^^^^^^^^^ tf_data_ok=%u , tf_send_232=%u",tf_data_ok,tf_send_232);line_feed();
loop_cnt++;
ck_spn_fmi();
if (loop_cnt>=3) //send swi status every 300ms
{
get_swi_status();
send_swi_status();
loop_cnt=0;
}
set_timer1(0xBDC); //init timer #1
bit_clear(pir1,tmr1if);
//printf("leaving <<<<<<< inside while (true)");
//line_feed();
}
printf(".........LEAVING main <<<XXXXXXXXXXXX"); line_feed();
}
|
One other bit of info, the while_cnt goes to 255, starts over goes to 108 or 109, then the above happens. and the while_cnt starts over.
So what gives?
I using pic18f258, pcwhd 4.079
Thanks L. |
|
|
Ttelmah Guest
|
|
Posted: Fri Sep 04, 2009 2:44 pm |
|
|
I'd say your chip was doing a watchdog restart.
Depending on your fuses the serial line is going unconnected (floating) at the PIC pin, while it waits to ensure the oscillator has started, etc. etc..
Best Wishes |
|
|
lecutus
Joined: 12 Aug 2009 Posts: 40
|
Here's the preprocessor stuff |
Posted: Fri Sep 04, 2009 3:46 pm |
|
|
The watchdog restart would make sense. The question remains, what is it that I'm looking at?
Below is the way the program is setup
Code: | #include <18F258.h>
#fuses HS,PROTECT,NOLVP,WDT32,nowdt
#use delay(clock=20000000)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#include <can-18xxx8.c>
#byte pir1=0x0F9E
#define TMR1iF 0X00
#rom int 0xf00000={0x00,0x00,0x00,0x00}
#define offset_id 0x00
#define offset_e 0x02// original
#define offset_t 0x03// original
#include <stdlib.h>
#include <stdio.h>
#include <input.c>
int8 swi_status=0,loop_cnt=0,/*tmp_port,*/conv_lok,req_gear; //buffer counter
int8 sel_gear,cur_gear,gear, fuel_psi,oil_psi,water;
int buffer[8],rx_len,rxstat;
int32 rx_id,rx_ad,hrs;
int1 tf_lube_ovr=false/*tf_send_status=false, tf_eng_run=false*/;
//int1 tf_psi_lo=false,tf_temp_hi=false;
int16 rpm,outspeed,inspeed,pressure_out,lube_psi,lube_temp;
int16 pressure_max,crpm,volts,injt_psi,spn/*rpm_pre,rpm_total=0,rpm_temp*/;
float bpm;
int8 rm_volts,rm_hrs,alr_pump,fmi, spn_count=0,fmi_count=0/*,rpm_cnt*/;
//int32 spn_fmi;
int8 k_char,x=0;
int16 x_cnt;
int1 tf_rs232=false,tf_data_ok=false,tf_send_can=false,tf_send_232=false;
char s1[30];
//int16 rpm_rs=740,ov_press_rs=7500,pump_id=0,id_num; //original
int16 rpm_rs=900,ov_press_rs=750,pump_id=0,id_num;
int8 swi_rs=0,gear_rs=129,cnt_send_can=0,engine=0,trans=0;[code][/code][code][/code] |
Thanks
L. |
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Fri Sep 04, 2009 6:30 pm |
|
|
the WDT32 is in conflict with nobrownout
and it wins in the masking wars
try
#fuses HS,PROTECT,NOLVP,nowdt,brownout,BORV42,noprotect
this assumes you are using a 5V supply for brownout, safe starting
and noprotect - just for fun until you are for sure debugged
i might add that with a 20 mhz clock and 115200 baud - the compiler default is allowing a baud rate error of about 1.5%
which is clearly OK - as you are receiving data
but a better choice of oscillator would be say
19.6608mhz which is a standard tho not common - can oscillator value
it results in a dead on 0.0% error in baud rate
and is ideal for your baud |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|