MOBILE HOME Technical Tips  

LCD FREQUENCY COUNTER
see also TFT Counter , LED Counter

Updated 3/4/2017
Counter uses PIC16F628A . Included C code and circuit diagram. The LCD and driver module is a 2 lines 16 characters, it has 14 way connector. The LCD is driven by 4 bits data bus.
The frequency is displayed on line 1 by 7 digits with leading zeros removed down to 3 digits. Signal input is a TTL type. The time base is generated by the 32768Hz crystal oscillator.
The CPU frequency is 4MHz from the internal oscillator.
The counting resolution is 1 Hz for frequencies up to 1 MHz and 8 Hz for frequencies over 1 MHz.
The counting is first for a period of 1 second with resolution of 8 Hz and if the frequency is over 1 MHz it is displayed. If the frequency is less than 1MHz the counting is repeated for a period of 2 seconds with resolution of 1 Hz and then displayed.
I tested the counter at up to 2MHz, I don't have the means to test higher frequencies.
Period is displayed on line 2. The period is calculated. For frequencies greater than 1000Hz the display is ns and for less than 1000Hz the display is in us (micro sec).

ARDUINO LCD FREQUENCY COUNTER

The Arduino generates an accurate 1 second time base for the counter by cascading timer0 and timer2. The link between digital inputs 3 and 4 connects the output of timer2, 250 Hz, to input of timer0. The software waits for the output of timer0 to go positive to start the count of frequency input to timer1. Timer1 is a 16 bits timer, it overflows at the count of 2 power of 16, that in turn advances over-flow register. At the end of the 1 second the 16 bit register is recorded. The Arduino then calculates the frequency and period and displays them on the LCD.
LCD display and driver has 14 way connector, 10 connections are used, 4 bits data bus is selected. There is a big selection of LCD modules, and they are very similar in characteristics . The LCD module has to be HD44780 competible.
The frequency input is TTL signal levels, for low signal a video amp has to be added. The spects recommend input up to 6 MHz, I tested it at 2 MHz.

You are free to use the circuit diagram and the software with no limitations.

Circuit Description
See also Technical Tips

The crystal is a low power 32,768 Hz watch crystal.
Supply is 5V +/-10%. Input signal is TTL levels.
Contrast trimmer can set contrast from zero to max, set the trimmer to about middle to start with.
LCD display and driver has 14 way connector, 10 connections are used, 4 bits data bus is selected. There is a big selection of LCD modules, and they are very similar in characteristics i.e. DM1601, ACM1601.
Vss - Supply GRD.
Vdd - Supply 5V
Vo - Contrast Adjust
RS - Register Select
R/W - Data Read/Write
E - Enable
D4-D7 - Data Bus Lines





Name:

Comments and questions

Copy the number from the picture It stops net-robots from adding comments.



02.06.2017 - 17:56
Name: Andrew
Comment: Circuit works nicely thanks Moty. However, only works up to 2MHz - not 10MHz as you suggested. I am aware you could only test up to 2MHz but my sig gen goes beyond that to 5-10MHz. Any ideas what the problem could be? (same result whether I use the hex file or compile the C prog with xc8 btw). Cheers!

03.04.2017 - 18:21
Name: phuoc ho
Comment: qa

03.04.2017 - 17:22
Name: Andrew
Comment: Thanks Moty. The revised firmware works ok but it's hard getting used to the 8Hz resolution after the former accuracy! I'm gonna try this version http://www.electronics-lab.com/project/100mhz-frequency-counter-with-pic16f628a-2/ - they kindly reference your work....

03.04.2017 - 16:36
Name: Andrew
Comment: Circuit works nicely thanks Moty. However, only works up to 2MHz - not 10MHz as you suggested. I am aware you could only test up to 2MHz but my sig gen goes beyond that to 5-10MHz. Any ideas what the problem could be? (same result whether I use the hex file or compile the C prog with xc8 btw). Cheers!

03.04.2017 - 16:35
Name: Andrew
Comment: Circuit works nicely thanks Moty. However, only works up to 2MHz - not 10MHz as you suggested. I am aware you could only test up to 2MHz but my sig gen goes beyond that to 5-10MHz. Any ideas what the problem could be? (same result whether I use the hex file or compile the C prog with xc8 btw). Cheers!

31.03.2017 - 18:32
Name: Andrew
Comment: Circuit works nicely thanks Moty. However, only works up to 2MHz - not 10MHz as you suggested. I am aware you could only test up to 2MHz but my sig gen goes beyond that to 5-10MHz. Any ideas what the problem could be? (same result whether I use the hex file or compile the C prog with xc8 btw). Cheers!

31.03.2017 - 01:50
Name: Moty
Comment: Hi Andrew, You are right. I looked at the datasheet and timer 0 always synchronizes the output of the prescaler. That limits the input frequency to osc / 4 * prescaler . If you can tolerate an error of up to 8 Hz then you can download http://www.moty22.co.uk/lcd16mhz.zip and try it. I changed the prescaler to 1:16 and multiplied the measured frequency by 8. I haven't tested the code, I will do that in the near future.

30.03.2017 - 18:19
Name: Andrew
Comment: Circuit works nicely thanks Moty. However, only works up to 2MHz - not 10MHz as you suggested. I am aware you could only test up to 2MHz but my sig gen goes beyond that to 5-10MHz. Any ideas what the problem could be? (same result whether I use the hex file or compile the C prog with xc8 btw). Cheers!

11.03.2017 - 14:10
Name: Tien
Comment: Hi Moty. Although circuit don't run, but I thank you very much.I don't understand why code and circuit are the same but still do not show frequency. :((

09.03.2017 - 21:17
Name: Moty
Comment: It can be that the 32KHz crystal doesn't oscillate or the input signal amplitude is too low.

09.03.2017 - 04:21
Name: Tien
Comment: Hi Moty. Could you see file code C? I ran project, it ran, but it didn't count frequency.

09.03.2017 - 01:12
Name: Moty
Comment: Hi Tien, Sorry, I don't have proteus.

08.03.2017 - 10:04
Name: Tien
Comment: this is link file proteus and file hex, it isn't working. LCD don't to display. help me, please. thank you very much https://drive.google.com/file/d/0B3eoJDZKqqJtdkZyV3N3NUl0Rmc/view?usp=sharing

08.03.2017 - 09:44
Name: Tien
Comment: this is link file proteus and file hex, it isn't working. LCD don't to display. help me, please. thank you very much https://drive.google.com/file/d/0B3eoJDZKqqJtdkZyV3N3NUl0Rmc/view?usp=sharing

08.03.2017 - 09:31
Name: Tien
Comment: this is link file proteus and file hex, it isn't working. LCD don't to display. help me, please. thank you very much https://drive.google.com/file/d/0B3eoJDZKqqJtdkZyV3N3NUl0Rmc/view?usp=sharing

08.03.2017 - 09:31
Name: Tien
Comment: this is file proteus and file hex, it isn't working. LCD don't to display. help me, please. thank you very much

08.03.2017 - 00:13
Name: Moty
Comment: Hi Tien, Which part isn't working?

07.03.2017 - 13:40
Name: Tien
Comment: Hello. I don't run project. help me

24.02.2017 - 09:50
Name: MANI
Comment: DOWNLOAD

24.02.2017 - 09:50
Name: MANI
Comment: DOWNLOAD

24.02.2017 - 09:49
Name: MANI
Comment: OK

09.12.2016 - 15:04
Name: James
Comment: Good clear comment lines make modification easy

14.09.2016 - 22:48
Name: Fernando
Comment: It is always good to have such information. Tank you.

25.06.2016 - 08:55
Name: SURESH
Comment: PLEASE SEND ME THIS PROJECTS

08.04.2016 - 06:06
Name: aaa
Comment: ssss

04.04.2016 - 21:14
Name: Fernando PU2PLL
Comment: Very usefull circuit to adjust the precision local oscilator of my FT-857D HF ham radio. I think that a temperature compensated cristal oscilator and a pre-amplifier options will be welcome for ham aplcations. Thank you.

07.07.2015 - 12:40
Name: Andy BG
Comment: Hello! Thank you! Well, I gave it a try, but it didn't work... however, I don't use [C] compilers, so I suspect in first place that something's wrong with the configuration... I will take some more time to dig into it. Best regards, Andy

06.07.2015 - 14:55
Name: Moty
Comment: Hi Andy. Welcome to the PIC Jurassic website. Most 8x2 LCD will work. The code start a line with 2 blank symbols so you have to remove them from the code otherwise the last digit of the frequency wont display.

06.07.2015 - 12:05
Name: Andy BG
Comment: Hello, Moty! Very attractive little project, good for you! I have a stupid question... while finding where I had put my PIC16F628A (BTW it would be awesome if you would migrate to the new PIC16F15xx series, they come at half the price of '628, not to mention the antique 16F84), I have a stupid question... "The frequency is displayed on line 1 by 7 digits with leading zeros removed down to 3 digits." - I have a small LCD by my hand, but it is only 8 symbols per line (2 lines)... am I right to expect the same code will run with it? Best regards, Andy

06.07.2015 - 10:52
Name: Andy BG
Comment: Hello, Moty! Very attractive little project, good for you! I have a stupid question... while finding where I had put my PIC16F628A (BTW it would be awesome if you would migrate to the new PIC16F15xx series, they come at half the price of '628, not to mention the antique 16F84), I have a stupid question... "The frequency is displayed on line 1 by 7 digits with leading zeros removed down to 3 digits." - I have a small LCD by my hand, but it is only 8 symbols per line (2 lines)... am I right to expect the same code will run with it? Best regards, Andy

06.07.2015 - 03:00
Name: Moty
Comment: Hi Dr. Joshi, Thanks for the comments. The 32K crystal is on TMR1 to give 2 seconds time base. The MCU uses the 4 MHz internal oscillator. 0b1110 is the same as 0b001110. I agree that my code lacks comments. In compare to some other websites mine is very weak in descriptions. One reason is that I'm not good at it. Another reason is that my projects are aimed at people who have some experience and are looking for similar circuits to compare experience. Because I'm not a software engineer and I didn't learn it in school my code isn't a proper example for students. Students will have to rewrite the code in a proper format if they wish to represent it.

05.07.2015 - 10:08
Name: Dr. J. C. JOSHI
Comment: Hi Moty, I downloaded the software and found few things misleading. 1. In the diagram the crysral is shown as 3.768 KHz whereas in the software it is wrtten as #define_XTAL_FREQ 4000000, which is correct? 2. While setting up TMR1 prescaler,two MSB ie bit 4&5 are missing. It should have been T1CON = 0b001110. 3. If this project is written for beginners it lacks in comments

24.04.2015 - 02:23
Name: Fabio Alexandre
Comment: Hi Moty, I was trying to set the Hi-tech in MPLAB X, and did not work. Now that you commented on the XC8, I downloaded and installed and it worked perfectly!! Thank you. Once again congratulations for the excellent and fast code, and thanks for the reply. Kind Regards, Fabio

24.04.2015 - 00:46
Name: Moty
Comment: Hi Fabio, Download the software again, I've added to it C file for MPLAB X with XC8 compiler.

23.04.2015 - 23:21
Name: Fabio Alexandre
Comment: Hi, Very good your circuit and code. I would like to understand better how it works, so I have tried to compile it for more than a week without success! I tried on several compilers and editors, as mikroC PRO for PIC, PIC C Compiler, MPLAB X, without success. Checked in your Technical Tips page that you use the HI-TECH C compiler, which is not manufactured anymore. I tried some older versions, I believe the wrong versions, it also was not successful. Versions I found and tried: PICC Standard v9.60 and PICC-Lite v9.50, but none installed Editor, only the compiler, which signed up in MPLAB X, but when you try to compile I get thousands of errors. Could you tell me which version of the compiler and editor are using, so I try to use them and be able to compile the code. Kind regards

21.04.2015 - 13:36
Name: Hasan Bilgin
Comment: Thenks,

17.03.2015 - 16:23
Name: Moty
Comment: Hi Tanveer, Hi-Tech compiler needs to know the oscillator frequency for the purpose of calculating __delay_ms().

17.03.2015 - 13:00
Name: tanveer
Comment: why use #define _XTAL_FREQ 4000000 ?

09.01.2015 - 02:40
Name: s.Ravichandran
Comment: I like this frequency counter,everything is OK. Excellent project,....

31.07.2014 - 17:08
Name: SHAMMU
Comment: good job.

05.04.2014 - 10:42
Name: Edba
Comment: Hi Moty, everything is OK. Excellent project. Details will write later. Edba.

05.04.2014 - 10:07
Name: Edba
Comment: Hi Moty, everything is OK. Excellent project. Details will write later. Edba.

31.03.2014 - 22:13
Name: Moty
Comment: Hi Edba. Does the programmer report any errors? Try to build a project with Microchip IDE using the C file, compile it and use the .hex file that you get. Attached another copy of the files.

31.03.2014 - 18:37
Name: Edba
Comment: Hi, I have tried two programmers (PICKIT2 and PICKIT3) But I have problems - I cannot burn the LCD counter.hex into the PIC16F628A. Is the file OK? Thank you for your reply. Edba

31.12.2013 - 12:53
Name: Moty
Comment: Hi Kabeer. I have no experience with Proteus. In real life the display is blank when the contrast potentiometer isn't set right. Try simulating different levels of the contrast.

31.12.2013 - 10:54
Name: kabeer
Comment: Hello i know you did a nice job but i try to simulate this circuit using Proteus but no single display on the screen....

31.12.2013 - 10:29
Name: kabeer
Comment: Hello i know you did a nice job but i try to simulate this circuit using Proteus but no single display on the screen....

15.03.2013 - 13:28
Name: Moty
Comment: Hi Bandu. You can edit the c file if you have HI-TECH for PIC16 installed, it comes with Microchip MPLAB. I don't have this program in ASM, I don't know ASM well enough to write this program.

15.03.2013 - 01:40
Name: Bandu
Comment: This file can't use with MPLAB please send ASM file

17.01.2013 - 07:03
Name: Moty
Comment: Hi Tohu, Attached hex file for the LCD Counter just in case you are can't download it from the site. I've never written asm for this project because of the complexity of converting binary to decimal.

16.01.2013 - 16:56
Name: tohu
Comment: asm or hex for this project thank you

08.12.2012 - 15:19
Name:
Comment: interpretation of your 'comment dated 12.10.2011 - 14:44' is fortunately wrong. Best "regards"