Best Microcontroller Projects


[?] Subscribe To This Site

XML RSS
Add to Google
Add to My Yahoo!
Add to My MSN
Subscribe with Bloglines


Home
Forum
Project Ideas
C Course
Projects Showcase
LCD-KEYS OnePort
PIC Introduction
PIC Programmer
Schematic Tool
PIC Projects
Tips & Techniques
PIC Tutorials
Digital Downloads
Store
My SECRET
Oscilloscopes
About Me
Contact
Terms of Use
Search This Site
Freebies
Articles
Books
Resource Links
Site Map
Video du Jour
Rant/Rave
Privacy Policy
Problem?-Solution
Programmer Types


Custom Search

Sign up for MicroZine:
''The'' Microcontroller Newsletter


:
:
Don't worry -- your e-mail address is totally secure. I promise to use it only to send you MicroZine
Enter your first Name and primary email address in the form above:

And receive absolutely FREE a full project for:


"Measuring Analogue Voltages
Without An ADC"

(Using only one pin).

Instant Download:
You Can
Get It Right Now

Warning: This project could be Removed
at any time.  

It will NOT be
available indefinitely SO

To avoid
disappointment get it:

Now



Remember this is a project with full description and fully debugged C Source code - and it's not available from the main website.

You can only get it through this newsletter.


To get exclusive access Enter your first name Name and primary email address Now in the form above.:

But wait !

There's more...

You'll receive more
free and exclusive reports as well as site information and site product updates.

Scroll up to the form above and sign up NOW.  Don't forget it's FREE and if you don't like it you can unsubscribe at any time.

Click Here Now to use the form above to get your Valuable information absolutely free.



Social Bookmarking
Click & Add:
add to BlinkBlink
add to Del.icio.usDel.icio.us
add to DiggDigg
add to FurlFurl
add to GoogleGoogle
add to SimpySimpy
add to SpurlSpurl
Bookmark at TechnoratiTechnorati
add to YahooY! MyWeb
Readers comments

"I wanted to thank
you so so so much
for all the information
you have provided in
your site it's

SUPERB and FANTASTIC."


- Ranish Pottath


"This site really is
the best and my favorite.
I find here many useful
projects and tips."

- Milan

bursach<at>gmail.com

Learn PIC C Now
Wondering how to program your next project using C and need a great start?


"Awesome site,
very, very easy and nice
to navigate!"


- Matt
matt_tr<at>
wolf359.cjb.net


"I am a newbie to PIC
and I wanted to say
 how great your
site has been for me."


- Dave

de_scott<at>bellsouth.net

Learn Microcontrollers
"Interested in
Microcontrollers?"


Sign up for The
Free 7 day guide:

FREE GUIDE : CLICK HERE

"Your site is a great
and perfect work.
congratulations."


- Suresh

integratredinfosys<at>
yahoo.com

"I couldn't find the correct
words to define
yourweb site.

Very useful, uncovered,
honest and clear.

Thanks so much for
your time and works.
Regards."


- Anon





Schematics and C code for a PIC frequency counter circuit operating up to about 50MHz.

A PIC Frequency counter circuit using an
Eight digit multiplexed 7 segment
display...

Sponsored Links...

This PIC frequency counter circuit uses a multiplexed seven segment display and uses timer 1 to count edges of the input signal.

It uses the simpler method of direct frequency measurement which is easy to do but means that the number of digits displayed depends on the input frequency. 

Note: If you want to display all digits all the time there is a technique called reciprocal counting - but this requires floating point (maybe fixed point) routines and would be difficult to implement with this hardware since it needs constant time routines to count accurately.

Learn about the tool used for creating this diagram.

In the same way as the LCD project this frequency counter circuit uses TMR1 in 16 bit counter mode to count the input signal edges. Counter overflows are accumulated to give the total count in multiples of 65536. Adding the current value of the counter at the end gives the total count.

Get a frequency counter now

Here's a selection of frequency counters that you can buy on Ebay (if you don't want to make up your own then you can get a bargain here - and it will have all the front end circuitry made for you).  

Just click on the Counter you want and start bidding.



Specification of the frequency counter circuit

Min frequency 1Hz
Max frequency ~50MHz (limited by input pin characteristics).
Input signal level TTL

The major difference in this project is that the display must be continuously refreshed so that your eye is fooled into thinking that display as is not flickering (persistence of vision).

For this frequency counter circuit project the display is refreshed every millisecond which is excessive - but does work. This refresh rate was chosen due to the timing period of the gate loop (999us) and allows easier constant time operation. Your eye only needs a refresh rate of about 50Hz or 20ms.

Pushing the refresh rate higher also shows you how to split the processing of a machine code algorithm, in the C environment, into several pieces so that the display can be refreshed at an approximate 1ms rate.

Just as in the LCD project the measurement time is 1 second the final count is actually the frequency of the input signal and again using the 1 second measurement time gives a frequency resolution of 1 Hz.

Note: The exact maximum operating frequency is determined by the PIC input pin characteristic.

Compiler Mikroelectronika C compiler V5.0.0.3 Free!
Target 16F877A (retargetable to other PICs that have TMR1)
Software level Advanced.
Software notes Constant time code.
Hardware level Intermediate
Hardware notes LCD will work with LVP (if PGM pin is pulled high). Seven segment multiplexing.
Project version 1.01
Project files Enter your details to get the Download Link
and get the microcontroller newsletter:
:
:
(Note: Your email is safe it will never be sold or rented).
You will get All the C source code and hex file.

 

Essential
C Programming Course:

Note: The display is blanked for no input signal.

Frequency counter circuit Test routines

Once constructed you can test the wiring out using the following two files e.g. if the 1st download file does not appear to work:

These tests will also test out a system using individual 7 segment displays.

Frequency counter circuit:Test wiring 1 Download here.
Frequency counter circuit:Test wiring 2 Download here.

Test wiring 1 : Outputs constant digits to the display and reads "12345678" from left to right.  You can use this test to see if PORTD and each transistor driver is connected correctly.

Test wiring 2 : Outputs a shifted digit set from 1-8 to test PORTD connections to each 7 segment.  Just observe each digit and make sure it goes through each number 1 to 8.

Compilation

For a tutorial on compiling these files click here.

You can recompile the frequency counter circuit files if you want examine code operation (using the built in simulator) or change the source code. Note the hex file is contained in the download.

For the general theory of operation of this circuit and notes on frequency counting for this frequency counter circuit click here.

PIC frequency counter circuit using 7 segment displays and TMR1.
(Click diagram to open a pdf).
7segment display frequency counter

Learn about the tool used for creating this diagram.

PIC frequency counter circuit Hardware

The main circuit blocks of the frequency counter circuit are shown in the diagram below.

The 8 seven segment displays are multiplexed using a Johnson counter (4017) that activates a single output after each clock pulse. Port A drives the reset line and clock signal to the 4017 and transistors at the outputs of the 4017 are connected to the common cathode of each seven segment display. This lets the micro turn on each display sequentially. Port D drives the segment enable lines to control the character displayed.

The crystal oscillator is simply a crystal and two capacitors connected to the PIC oscillator port at OSC1 and OSC2. The capacitors can both be fixed unless you want to tune it using a frequency reference. If you don't have an accurate reference then use fixed capacitors.

The PIC micro can be any type that has a Timer 1 hardware and and has enough memory to hold the program and enough ports to drive the 4017 and the segment enable lines (8 bits).

The LED is toggled at the end of every gate time to indicate that the processor is alive - so if there is no input signal you can tell that the software is working.

You can program the PIC in circuit through the ICSP connector.

frequency counter schematic circuit

Learn about the tool used for creating this diagram.

PIC frequency counter circuit Software

Project files for the PIC frequency counter circuit

Compiler project files
Frequency_counter_4MHz_7seg_tmr1.ppc

C Source files.
Frequency_counter_4MHz_7seg_tmr1.c
bcd.c
delay.c
seven_segment.c
gate.c

Header files.
def.h
bit.h
bcd.h
delay.h
seven_segment.h
gate.h

Output files
Frequency_counter_4MHz_7seg_tmr1.hex

Brief description

  • Frequency_counter...c : contains the code start point (in routine 'main').
  • bcd.c : machine code to convert a long to a bcd.
  • delay.c : code to create fixed delay times.
  • sevensegment.c : Constant time seven segment refresh update routines.
  • gate.c : Accurate 1 second time delay while calling 7seg refresh.
  • bit.h : macros for bit manipulation.
  • def.h : control for simulation help.

All other header files contain prototypes.

PIC frequency counter circuit code operation.

The code uses the built in LCD driver routines which are automatically included by the compiler. Note automatic include is unusual but it seems to work well in mikroC.

Interrupts are not used only the flags that can be polled (timer overflow) are activated.

Frequency_counter_4MHz_7seg_tmr1.c

This file contains the port initialization and main routine.

After initialization the code enters an endless loop where it continuously performs a measurement and display operation. Throughout the loop the display refresh routine is called (approx every millisecond). Also in main the gate_loop routine is called.

The gate loop is tuned to just below a millisecond so that the caller (in main) can adjust the exact delay taking account of any delays caused by calling the gate loop routine itself.

Note that the timer overflow is polled within the gate loop and the seven segment display is refreshed . Extra statements in the else part of if statements allow constant execution time whether the conditions are true or false. This allows the loop time to be accurately calculated since it always has the same execution time.

gate.c

This file contains the gate loop time measurement routines - the loop time is tuned to 999us so that the caller can calibrate the 1 second delay time (accounting for compiler optimisation and return from call instructions).

The gate_loop routine calls the constant time seven segment display update and also checks (in constant time) the timer 1 overflow counter.

sevensegment.c

This file has the 8 digit seven segment display driver.

The first output from the 4017 is not connected so this acts as the reset state. At every call the next digit is output on port D and the 4017 is advanced one bit by strobing the clock. In this way after each call the next digit is displayed.

All the routines here are made into constant time routines so that the gate loop (the calling routine) can make an accurate 1 second time measurement.

delay.c

Delay routines were created using machine code so that they have a fixed execution time i.e. they do not change as the compiler re-optimizes the code. They are also fixed in memory location to avoid bank change problems.

bcd.c

This routine was created in machine code to save space on the smaller chips and it also results in faster code than using the built in routines for long multiply and divide.

It uses the Add 3 method to convert the unsigned long into an ASCII value that can be displayed on the LCD.

For this project the routine is split into separate processing functions

ulong2bcd_p1(df);
ulong2bcd_process(void);

The second routine is called 8 times so that the seven segment display can be updated every millisecond (approx). This is true at 4MHz - obviously using a faster crystal would allow less calls e.g. for a 20MHz crystal you could get away with two calls. Using a faster crystal makes timing slightly more difficult since for a 20MHz clock the instruction cycle is 200ns not 1us.

The bcd conversion is not the fastest around but it is faster than letting the compiler using long divide or multiply and this does show how to use machine code in the C source code. It also shows how to split processing time up for the machine code program.

def.h

Contains a control to let the simulator update variables where needed.

bit.h

This contains macros for bit manipulation which should be compiler independent.

End of code description for the frequency counter circuit.


Jump from frequency counter circuit
to Best Microcontroller Projects Home Page.
 


Don't forget to Sign Up for your

Microcontroller Newsletter

With "Essential tips and techniques",

..."New Site Info" and more...

Including a free project :

How to drive an LCD and 12key keypad using "Only One 8 Bit Port" with no interface logic!...

(Works for any microcontroller)

This costs you : Nothing...
Just fill out the form below and you'll get full C source code and project schematic and description.



:
:
Don't worry -- your e-mail address is totally secure. I promise to use it only to send you MicroZine
Google
 
  Best Microcontroller projects.





<-- --> <-- -->