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

Okay, please forgive this question! External int question...

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
kamputty
Guest







Okay, please forgive this question! External int question...
PostPosted: Fri Feb 02, 2007 5:43 pm     Reply with quote

Hi all,

Okay, simple question, but not for me!

I want to create an external int, so I'll use this

Code:

#int_ext
void external_isr_1()
{
      // do something fast!
}


Now, pin B0 is connected to this. All I want to do is hookup a osc to this. To be honest, I'm not sure what to do. Confused

How should I hook this up? There are only 2 pins! One must go to ground, and the other to B0? Or do I need to add some other parts?!

BLA!

~Kam (^8*
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Feb 02, 2007 5:52 pm     Reply with quote

Quote:
All I want to do is hookup a osc to this

For what purpose ? It takes time to service an interrupt. If you're
running at 4 MHz, it might take 40 or 50 usec to get in and out of the
interrupt. What frequency oscillator do you intend to connect to this
pin, and why ?
rnielsen



Joined: 23 Sep 2003
Posts: 852
Location: Utah

View user's profile Send private message

PostPosted: Fri Feb 02, 2007 5:55 pm     Reply with quote

You want to hook up a crystal to this input and cause an interrupt at the frequency of the crystal???? Or, do you want to use B0 as an output? If you are using a crystal the circuitry to drive it is not there. The crystal will not oscillate. Describe, in greater detail, just what it is you are trying to accomplish.

Ronald
kender



Joined: 09 Aug 2004
Posts: 768
Location: Silicon Valley

View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger

Re: Okay, please forgive this question! External int questio
PostPosted: Fri Feb 02, 2007 6:14 pm     Reply with quote

Hooking up a relatively low frequency oscillator is possible. For example, the second oscillator can be used by the self-test routine to check the ferquency of the main xtal/osc.

Kam wrote:
All I want to do is hookup a osc to this... How should I hook this up? There are only 2 pins! One must go to ground, and the other to B0? Or do I need to add some other parts?!


If it has only 2 pins, it's, probably a crystal (xtal). Oscillators usually have 4 pins. To hook up the xtal to a pin of a PIC you need 2 inverter gates a a few discretes. There are also variants with transistors instead of gates, but in any event, you need an active element to make the xtal oscillate. Here are some examples
http://www.ee.washington.edu/circuit_archive/circuits/F_ASCII_Schem.html#ASCIISCHEM_009
http://www.discovercircuits.com/PDF-FILES/40khzref2.PDF
http://ourworld.compuserve.com/homepages/Bill_Bowden/page11.htm#counter.gif
kamputty
Guest







I'm on crack!
PostPosted: Fri Feb 02, 2007 8:14 pm     Reply with quote

Hi all,

Let me start by saying that I must be on crack, else it's Friday. Very Happy

What I mean to say is this

I need to connect an osc to my TIMER0, not the ext int!

So my code is as such

Code:

#int_TIMER0
void TIMER0_isr()                         
{
   counter++;
}


I want to hook up a 14.31818Mhz osc to timer0, giving me 3.579545Mhz heart beat (osc/4).

Said that, I need to connect one end to the PIC (I believe its RA4/TOCKI) and the other end to ???? (must be either - or +!)

What I ultimately want is a 3.579545 heartbeat...

Well, there it is.

~Kam (^8*
Ttelmah
Guest







PostPosted: Sat Feb 03, 2007 4:02 am     Reply with quote

First thing to get clear, is do you have an external oscillator, or just a crystal?. This was raised before, but still applies.
If the former, then Timer1, can be setup with:
setup_timer1(T1_EXTERNAL | T1_DIV_BY_4);

If the latter, then T1_CLK_OUT, also needs to be 'ored' into the setup.

For the former, only one connection to the timer1 input is needed, for the latter, the crystal needs to go between the timer1 input, and output pins with suitable capacitors.

Now, at this point, 'Timer1', will be clocking off the external frequency over 4, and the contents of the timer1 counter registers can be read at any time to give a 'heartbeat' tick value. The interrupt will occur every 65536 ticks (54.6 times/second).

To get an actual long 'counter' at 3.57MHz, you need to treat the 'counter' value being incremented in the timer, as the 'overflow' from the hardware timer, to give a 24bit, or 32bit counter.

Best Wishes
kam



Joined: 15 Jul 2005
Posts: 59

View user's profile Send private message

PostPosted: Sat Feb 03, 2007 11:49 am     Reply with quote

Okay, as you've seen, I know nothing about electronics! I need to stick with making bagels or something...I'm sure I can squish bready blobs and make bagels things better then I can connect 2 wires together (okay, I am getting better at soldering! Very Happy )

I want to do this...

I'm currently working on a pic@20mhz ntsc character generator. I have successfully "drawn" lines on the tv etc. via a RCA cable. Yippeeee!

Now, I would like to get a 3.579545Mhz heart beat to manage the color burst freq.

I would like to drive Timer0 with that beat, so I can sync the tv updating.

I have a full can 14.31818Mhz oscillator with 4 pins

http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&productId=108652


As mentioned, I can then issue
Code:

setup_timer1(T1_EXTERNAL | T1_DIV_BY_4);


Okay, here goes my question, and please be kind! ( Embarassed )

How do I physically hook up the 4 pin osc to timer0?! There are 4 pins, and on the site, I cannot find any datasheets...

I've come to doubt everything I do with the physical electronics... Sad

Well, there it is!

~Kam (^8*
kam



Joined: 15 Jul 2005
Posts: 59

View user's profile Send private message

PostPosted: Sat Feb 03, 2007 4:11 pm     Reply with quote

okay, I think this is it!

pin 1:
pin 7: Ground
pin 8: Output
pin 14: Vcc

Gonna give it a try! hopefully no smoke released... Shocked Shocked

~Kam (^8*
Ttelmah
Guest







PostPosted: Sun Feb 04, 2007 3:52 am     Reply with quote

I think, reading some of your latter posts, what you are after, is not a 'heartbeat', but a _clock_.
A heartbeat', in computer terms, is something where events are triggered at a regular interval. Hence on the PC, there is a 'heartbeat' interrupt at 18mSec, or 10mSec, depending on the OS involved. You appear to want to develop the colourburst 'clock', from an external clock at 4* the frequency. If so, this _cannot_ be done with timer1. The code given, is to trigger an internal counter, at the colourburst clock frequency. No output will be produced.
It is not possible on most PICs, to do what you want. The only systems, that supports producing an external clock at high frequency, are the CPU master clock itself (which can produce IP/4), or the CCP, which on most chips, is tied to Timer2, which does not support using an external clock.
As such, the only way I can think of to do this, would be to get rid of the 20MHz clock, and the 14Mhz one, and run the processor master clock off twice the colourburst frequency. Then if the chip involved is one with the *4 PLL, the CPU could be run at 28.6MHz, and the PWM, could be used to produce the required frequency

Best Wishes
kam



Joined: 15 Jul 2005
Posts: 59

View user's profile Send private message

PostPosted: Sun Feb 04, 2007 9:56 am     Reply with quote

Morning all,

Okay, some more questions...

#1. If I have an osc on timer0 at 14.31818Mhz then using osc/4, this gives me a beat of 3.579545Mhz. Is this not possible? I'm still not sure what I am missing if this is not true.

#2. Once I get the "beat" in my isr, I can update the signal as I need to. The line

Code:

#int_TIMER0
void TIMER0_isr()                         
{
   counter++;
}


is just an illustration on the isr, not the logic. The "counter++" is just junk code, nothing more.

The purpose of the isr is to produce a single voltage (0~1v) for a single element within the scanline timeline, actually for all the lines from a buffer.

I have another isr that does nothing more then update the buffer, but that is not timing critical.

Am I waaaaaaaaaaaaay off base here in regards of timer0?! Sad

Thanks for the replies! Great learning experience....

~Kam (^8*
SherpaDoug



Joined: 07 Sep 2003
Posts: 1640
Location: Cape Cod Mass USA

View user's profile Send private message

PostPosted: Sun Feb 04, 2007 11:15 am     Reply with quote

Trying to generate a color burst on a PIC is going to be VERY difficult. If you have an internal clock of 3.579MHz it doesn't mean you can toggle a pin in software at that rate. If you poll the timer till it ticks and then set the pin to 1, then you wait till the timer ticks again to set the pin to 0 you will only get half the 3.579MHz rate.

You could poll for a tick, set the pin to 1, wait some short delay, set the pin to 0, and poll for the next tick. But that would give an asymmetrical output.

With some PICs you might get a 2x3.579MHZ internal clock so you could poll for 1 and poll for 0, but the PIC isn't going to have time to do ANYTHING else.

Trying to use interrupts at these rates is hopeless.

This is going to be really hard, probably impossible. If you want to learn about generating complex signals try working with audio. I once built a 25 to 32kHz synthesizer for sonar work and it took every clock cycle my PIC16C58 could muster.

If you have to generate color video signals start looking at dedicated chips for video work.
_________________
The search for better is endless. Instead simply find very good and get the job done.
kam



Joined: 15 Jul 2005
Posts: 59

View user's profile Send private message

PostPosted: Sun Feb 04, 2007 12:52 pm     Reply with quote

Hmmm....well, thats not good! Sad

I've gotten black and white working just fine. Granted not as an interrupt, but the same logic. I only change the state from old to new within specific time. I have 2 "processes", one (the interrupt) that just sends one bit (actually 2, but they are combined) of information to the tv from a buffer. This could be sync, white, black, grey in the b/w version. So all I am doing is changing state from x to y, and it will keep that state until the next change. The process is fast because all it does is push a specific bit out from a buffer. No logic, just send bit, send bit, send bit etc.

The second process manages the buffer, stalling as need be etc.

All I'm using the timer for is to maintain sync with the tv, actually, have the tv sync with me!

I still gonna try. I feel it can be done Very Happy (famous last words! Sad )

~Kam (^8*
Ttelmah
Guest







PostPosted: Sun Feb 04, 2007 3:45 pm     Reply with quote

kam wrote:
Morning all,

Okay, some more questions...

#1. If I have an osc on timer0 at 14.31818Mhz then using osc/4, this gives me a beat of 3.579545Mhz. Is this not possible? I'm still not sure what I am missing if this is not true.

#2. Once I get the "beat" in my isr, I can update the signal as I need to. The line

Code:

#int_TIMER0
void TIMER0_isr()                         
{
   counter++;
}


is just an illustration on the isr, not the logic. The "counter++" is just junk code, nothing more.

The purpose of the isr is to produce a single voltage (0~1v) for a single element within the scanline timeline, actually for all the lines from a buffer.

I have another isr that does nothing more then update the buffer, but that is not timing critical.

Am I waaaaaaaaaaaaay off base here in regards of timer0?! Sad

Thanks for the replies! Great learning experience....

~Kam (^8*


The chip develops 'OSC/4' internally. It is _not_ available to you outside the chip. The interrupt gets triggered when the counter overflows, which is 65536 cycles of this clock....

Best Wishes
kam



Joined: 15 Jul 2005
Posts: 59

View user's profile Send private message

PostPosted: Sun Feb 04, 2007 4:31 pm     Reply with quote

Ttelmah wrote:

The chip develops 'OSC/4' internally. It is _not_ available to you outside the chip. The interrupt gets triggered when the counter overflows, which is 65536 cycles of this clock....


Just to make sure I understand, I was assuming that using a 14.x Mhz osc will be dived by 4 (osc/4) automagically by the PIC giving me an effective 3.x clock. If I set the interrupt "count" to 0xffff with the interrupt, then I'm assuming that I can get the 3.x interrupts I need.

If this is not true, please please please explain ( Crying or Very sad ) because my root understanding is wrong.

Forget about color sync, etc., all I want to do is connect an external oscillator to a timer, and get that many "hits" per second.

Again, thanks to all...very enlightening.

~Kam (^8*
newguy



Joined: 24 Jun 2004
Posts: 1907

View user's profile Send private message

PostPosted: Sun Feb 04, 2007 4:59 pm     Reply with quote

If the processor didn't have to do anything else, then yes, what you are proposing would work. However, what you're overlooking is the overhead involved in the interrupt. When the PIC gets an interrupt, it has to stop what it's doing, set aside whatever it was working on, then get to the interrupt, and finally get back to whatever it was doing when the interrupt was received in the first place.

All this takes clock cycles. With CCS, you're looking at 40 - 80 clock cycles total (give or take a few). So, your clock is ticking along at approximately 0.28 us (= 4/14,320,000 Hz), so the quickest you could hope to service an interrupt would be approximately every 11 to 22 us. This equates to a frequency of about 45 kHz - 90 kHz TOPS.

You could a very small improvement in speed by simply checking the timer's interrupt flag, but I doubt that the improvement would be much better than a factor of 3 - 4 at best.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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