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

TIMER0 & PIC16F877A
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
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

TIMER0 & PIC16F877A
PostPosted: Tue Jul 08, 2014 3:08 pm     Reply with quote

Hi everybody. Can someone tell me what i am doing wrong!!!!
Code:

#include <16f877a.h>

#fuses hs,nowrt,nowdt,nodebug,brownout,nolvp,nocpd,put,noprotect
#use delay (clock=20000000)
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, errors)



#define LCD_ENABLE_PIN  PIN_B0            //#define use_portb_lcd TRUE                   
#define LCD_RS_PIN      PIN_B1                                   
#define LCD_RW_PIN      PIN_B2                                     
#define LCD_DATA4       PIN_B4                                     
#define LCD_DATA5       PIN_B5                                   
#define LCD_DATA6       PIN_B6                                   
#define LCD_DATA7       PIN_B7

#include <lcd.c>     // For LCD and has to be after #use delay()

unsigned int i=0;
#int_TIMER0
void test()
{
   i++;
   if (i==100) {output_high (pin_D0);output_low(pin_d1);}
   if (i==200) {output_low (pin_D0);output_high(pin_d1);i=0;}
}


void main ()
{
setup_timer_0(RTCC_DIV_256 | RTCC_EXT_L_TO_H );
set_timer0(0);                   //========> 20.000.000/4/256*1000=0.0512 msec.  every 0.0512*100=0.512sec led will go on and off
enable_interrupts(int_timer0);
enable_interrupts(GLOBAL);

lcd_init();
delay_ms(100);
printf(lcd_putc,"\fREADY");
delay_ms(500);
printf(lcd_putc,"\nWAITING...");

while (TRUE)
{}}
     
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jul 08, 2014 3:22 pm     Reply with quote

Quote:
setup_timer_0(RTCC_DIV_256 | RTCC_EXT_L_TO_H );

What is this ? Are you clocking the timer with an external signal ?
If so, what is the signal ? Describe it. If not, then change that
parameter to T0_INTERNAL.

Quote:
Hi everybody. Can someone tell me what i am doing wrong!!!!

Also, in the future, tell us what the program is doing wrong, and tell us
how you expect it to behave, if the program was running correctly.
Example of what you should say in your post:
"I expect the LEDs on pins D0 and D1 to be blinking, but they are not even turning on."
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Tue Jul 08, 2014 3:39 pm     Reply with quote

Hi. You can see in the "test" that leds are getting on and off!
Maybe you can tell me how can I use external clock...
temtronic



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

View user's profile Send private message

PostPosted: Tue Jul 08, 2014 3:58 pm     Reply with quote

If 'what's wrong' is the LEDS do not flash then get rid of everything NOT LED related. That means delete all teh LCD code, RS232 code, etc.

In order to debug you MUST reduce your program to ONLY that code that you're trying to get 'up and running'.

jay
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jul 08, 2014 4:02 pm     Reply with quote

Quote:
Maybe you can tell me how can I use external clock

What device do you have (outside the PIC) that can provide an external
clock to the PIC for Timer0 ?
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Tue Jul 08, 2014 8:33 pm     Reply with quote

I guess I am all wrong after all. I thought crystal is used for external clock.
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Wed Jul 09, 2014 2:53 am     Reply with quote

I am using 20mhz crystal connected to clki and clko with 2 capacitors which connected to ground. How can I use external clock? Fuses???
Ttelmah



Joined: 11 Mar 2010
Posts: 19510

View user's profile Send private message

PostPosted: Wed Jul 09, 2014 9:33 am     Reply with quote

OK.

Deep breath.

There is a master oscillator (this is your crystal), that clocks the PIC CPU. It can also clock the timers.

However you are selecting to run your timer from and external clock.

The RTCC_EXT_L_TO_H setting says 'clock the RTCC from and external clock, and count the rising edges on this'.

Look at the data sheet.

'Block diagram of the timer0/WDT prescaler'

You will see that the input clock (top left corner), can come from Fosc/4 (your crystal), or from the RA4 pin.

You either need to select the internal clock, or feed a clock into this pin.
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Wed Jul 09, 2014 10:34 am     Reply with quote

Thanks for reply. Some questions...

Can I use 2 pwm external and 2 timers internal?
How can I feed ra4 pin? Ps: I need it for something else...
For internal timer, do I need to change anything in fuses?
And last question: Can I use the same program above by
changing RTCC_EXT.... to RTCC_INTERNAL....?
Thanks.
Mike Walne



Joined: 19 Feb 2004
Posts: 1785
Location: Boston Spa UK

View user's profile Send private message

PostPosted: Sat Jul 12, 2014 3:21 am     Reply with quote

Ruby wrote:
Thanks for reply. Some questions...

Can I use 2 pwm external and 2 timers internal?
How can I feed ra4 pin? Ps: I need it for something else...
For internal timer, do I need to change anything in fuses?
And last question: Can I use the same program above by
changing RTCC_EXT.... to RTCC_INTERNAL....?
Thanks.
You need to study:-

1) The microchip data sheet.
2) The CCS manual.
3) The .h file for you chip.

You will then find the answers to all your questions.
(That's what the rest of us have had to do.)

Mike
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Sat Jul 12, 2014 3:46 am     Reply with quote

The thing is I don't understand anything from datasheet. There is no examples in ccs about external clock.
So how can I "feed" Ra4 pin?
temtronic



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

View user's profile Send private message

PostPosted: Sat Jul 12, 2014 5:19 am     Reply with quote

To 'feed' RA4, you just add a 5V CMOS/TTL compatible signal generator(aka 'external clock source') and pullup resistor.
This can be a clock oscillator module, a 555 with Rs and Cs, 2 transistor multivibrator with Rs and Cs,a CMOS 4020, even another PIC.
The point is this 'external clock' has to generate( send to the PIC) a known frequency that you've chosen.What you use as the 'source' is up to you, the designer.

The PIC datasheet does cover the technical details though I suspect that 99.5% of programmers use an internal clock and not the external clock option. It's probably only used when 'non standard' clock source is required say from a special piece of equipment.

hth
jay
Ruby



Joined: 04 Jul 2014
Posts: 44

View user's profile Send private message

PostPosted: Sat Jul 12, 2014 5:25 am     Reply with quote

Thank you very very much.
Ps: This means that the crystal that I used not for timers just for pic right?
temtronic



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

View user's profile Send private message

PostPosted: Sat Jul 12, 2014 5:47 am     Reply with quote

not quite.....
PICs have a LOT of 'options'....

the 'crystal' ( and 2 caps, 15-22pf) attached to pins 13 and 14( OSC1, OSC2) ARE the PICs main 'heartbeat' or master clock. It's the primary timing source.If you use a 4MHz xtal, it will give the PIC the '1us' timing you see in a lot of the charts and articles.

It is also a source for the timers, though depending on the PIC and how you 'configure' it, other 'sources', like the 'external clock' can be used.

Most programmers will use the internal sources (like clk/4) as it is cheaper( no additional parts),accurate(runs off the main clock), programmable(depending on timer used).

Using an external clock source is usually done for some 'odd' frequency that isn't easy for the PIC to generate OR to be 'synced' to an external device.

hth
jay
Ttelmah



Joined: 11 Mar 2010
Posts: 19510

View user's profile Send private message

PostPosted: Mon Jul 14, 2014 12:55 am     Reply with quote

As I said multiple posts ago,

"
Look at the data sheet.

'Block diagram of the timer0/WDT prescaler'

You will see that the input clock (top left corner), can come from Fosc/4 (your crystal), or from the RA4 pin.

You either need to select the internal clock, or feed a clock into this pin.
"

Note all the "OR's".

It's _your_ choice which source you feed the timer from.

Look then at PCM_programmer's first post in this thread. Look at what he carefully _highlighted_ in one line from your code, and what he says below it.

Read what people are saying to you.
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