CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

interrupt with INT_CCP1 are not interrupting printf,
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

interrupt with INT_CCP1 are not interrupting printf,
PostPosted: Sun Sep 21, 2014 12:34 pm     Reply with quote

Hy
I discovered code like:

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);


is not interrupting working of code like:

printf(LCD_SEND_C,"%Lu ",TEST);

so when I receive FE edge, I must put an output logically high.

#int_CCP1
void CCP1_v1()
{
output_bit(OUT,1);
}


and is not working.
Any solution will be better than nothing
Best regards.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 12:43 pm     Reply with quote

Post your compiler version. There was a printf/GIE bug in some versions.
Always post your version.
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 1:05 pm     Reply with quote

Version 4.140

.................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
03DB: MOVLB 02
03DC: BCF 1D.5
03DD: MOVLW 35
03DE: MOVLB 00
03DF: MOVWF 18
03E0: CLRF 19
.................... setup_ccp1(CCP_CAPTURE_FE);
03E1: MOVLB 01
03E2: BSF 0E.2
03E3: MOVLB 05
03E4: CLRF 13
03E5: MOVLW 04
03E6: MOVWF 13
03E7: CLRF 14
03E8: CLRF 15
03E9: BCF 1E.0
03EA: BCF 1E.1
03EB: MOVLW 01
03EC: MOVWF 16
.................... enable_interrupts(INT_CCP1);
03ED: MOVLB 01
03EE: BSF 11.2
.................... enable_interrupts(GLOBAL);
03EF: MOVLW C0
03F0: IORWF 0B,F

.................... printf(LCD_SEND_C,"%Lu ",TEST);
0417: MOVLW 41
0418: MOVWF 04
0419: MOVF 4B,W
041A: MOVWF 55
041B: MOVF 4A,W
041C: MOVWF 54
041D: MOVF 49,W
041E: MOVWF 53
041F: MOVF 48,W
0420: MOVWF 52
0421: MOVLB 00
0422: GOTO 29E
0423: MOVLW 57
0424: MOVLB 03
0425: MOVWF 11
0426: MOVLW 01
0427: MOVWF 12
0428: BSF 03.0
0429: MOVLW 07
042A: MOVLB 04
042B: MOVWF 52
042C: MOVLB 00
042D: GOTO 303

Best regards.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 1:25 pm     Reply with quote

I installed vs. 4.140 and made a test program and looked at the .LST file
and I can't find any place where it disables interrupts. So either your
version doesn't have that bug, or you are doing something in your code
that you are not showing us. For example, you may have more code in
the #int_ccp1 routine than you are showing us. Or, you may have
another interrupt routine which has delay_ms() in it. I suspect you are
doing something like that.
Code:

#include <18F4520.h>
#fuses INTRC_IO, BROWNOUT, PUT, NOWDT
#use delay(clock=4M)
//#use rs232(baud=9600, UART1, ERRORS)

#include "flex_lcd.c"

#define OUT  PIN_B0

#int_CCP1
void CCP1_v1()
{
output_bit(OUT,1);
}

void LCD_SEND_C(int8 c)
{
lcd_putc(c);
}

//=============================
void main()
{
int16 TEST = 1234;

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_ccp1(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);

printf(LCD_SEND_C,"%Lu ",TEST);


while(1);
}
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 1:38 pm     Reply with quote

Yes
I use on printf my code for LCD 2X8.
and use half of data of pins.
when I send data like is on data sheet I must enable pin E for minimum 2ms.
so when is this pin enabled interrupt not working?
how can I "fix" this or change?

Thank you.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 2:16 pm     Reply with quote

I don't know. I can't help without seeing a test program that shows
the problem.
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Sun Sep 21, 2014 2:41 pm     Reply with quote

I will post a piece of code.
is too big and is my work please understand.
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Mon Sep 22, 2014 9:45 am     Reply with quote

so in my code for LCD I have:

#define LCD_ENABLE (output_bit(LCD_E,1), delay_ms(2), output_bit(LCD_E,0), delay_us(1))

can you help?
Thank you.
temtronic



Joined: 01 Jul 2010
Posts: 9247
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Sep 22, 2014 10:49 am     Reply with quote

You should post your LCD module however I assume that you really need delay_us(2) and NOT delay_ms(2) in your define.

If you read the LCD.C example that CCS supplies they use delay_us().

hth
jay
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Sep 22, 2014 11:04 am     Reply with quote

I don't see anything in the little amount of code that you have posted so
far, that shows any problem. And the the problem can be caused by
other things, than just using delay routines inside and outside an isr.

Make sure that warnings are enabled for display by the CCS compiler.
Then compile your program. Look at the "Build Window" output report.
Does it say "Interrupts Disabled to Prevent Re-entrancy".

In fact, right here is your previous thread where you are doing this:
http://www.ccsinfo.com/forum/viewtopic.php?t=52882

Are you still doing it ? Are you still getting the "Interrupts Disabled"
message ? If so, stop calling CCS routines inside and outside your
interrupt routines, or use the solutions given to you in that previous thread.
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Mon Sep 22, 2014 1:36 pm     Reply with quote

Dear PCM Programmer
As I said that problem I solved by shifting ">>2"
I have 0 Errors, 0 Warnings.

Dear temtronic look at this on page: 15 ...
http://www.tme.eu/ro/Document/a9f385851814a23749414e1b9da83876/RC0802A-BIW-CSX.pdf

... after display clear I must use enable pin at least 1520us, approx 2ms for every time when I use enable pin.

The problem is on this:

#define LCD_ENABLE (output_bit(LCD_E,1), delay_ms(2), output_bit(LCD_E,0), delay_us(1))

how can I use 2 ms but not to be higher priority than #int_CCP1
I look forward for your reply.
temtronic



Joined: 01 Jul 2010
Posts: 9247
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Sep 22, 2014 2:41 pm     Reply with quote

I've downloaded the documentation and feel you're not reading it correctly.
On page 13, Writing from MPU to LCD..., the enable pulse width needs to be a minimum of 140 ns, so it is like most LCD units I've seen and should work fine with the flex_lcd.c driver.

What you're writing about is the lcd_init sequence which is ONLY done ONCE, when you run your program. The driver takes care of this in th einit() function.

You really should start all over and code a basic 'Hello World' program with NO interrupts. It'll be about 10 lines of code. You need to get that working 100% BEFORE you proceed with anything more complicated.
Post your 'Hello World' code for us....

hth
jay
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Tue Sep 23, 2014 12:32 am     Reply with quote

temtronic
I think you are right, I will test your solution and I will be back with reply.
I hope is okay time 1-2us. (for 140ns).
Best regards.
temtronic



Joined: 01 Jul 2010
Posts: 9247
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Sep 23, 2014 5:13 am     Reply with quote

Just to let you know, EVERY LCD module I've every used in the past 20 years has worked fine with the 'flex_lcd' driver so I know the delays are fine.

jay
nailuy



Joined: 21 Sep 2010
Posts: 159

View user's profile Send private message

PostPosted: Wed Oct 01, 2014 4:18 pm     Reply with quote

yes is working but not full
instead of 2ms I have 4 us, with lower than 4 is not working.
#define LCD_ENABLE (output_bit(LCD_E,1), delay_us(4), output_bit(LCD_E,0), delay_us(1))

I verify entire data sheet but is still something wrong maybe.
I will study.
Best regards.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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