NCO_Calc.zip
I'm building a project that requires calculating numerous frequencies with the Numerically Controlled Oscillator (NCO) function in Fixed Duty Cycle Mode. Realizing that it would take me way too much time punching numbers into a calculator, I developed a simple app that does all the math work for me. I'm relatively new to the whole PC programming thing (Visual Studio 2015), but it works. Unzip the attached file, double click the .exe, and viola. If you right-click the .exe and select "Create shortcut", then drag the shortcut to your desktop (or selected folder), it will open from there. You must open/install it first, though.
How it works;
- Select your Fosc, either by typing it in, or using the arrows up/down. It increments in 4 MHz chunks, so non-realistic Fosc settings are possible.
- Enter the desired frequency
- Click the "Calculate" button
- It displays the decimal NCO1INCx value
- It displays the hex NCO1INCx value
- It displays the frequency when the value is rounded down
- It displays the frequency when the value is rounded up
- The Clear button resets for the next entry.
It also tracks if the frequency you enter is too large for the 20-Bit NCO1INC register and gives you a pop-up warning. If you are targeting a relatively low frequency like 60 Hz, the calculated NCO value (@ 4 MHz) is 31.45725, the HEX value is 1F, the frequency generated by using the rounded up 32 (hex 20) is 61.0352 Hz, the frequency generated by using the (rounded down) 31 (hex 1F) is 59.1279 Hz. With this information:
- NCO1INCL = $1F
- NCO1INCH = $00
- NCO1INCU = $00
If you wanted a frequency of 11,780,000 and entered that in the "Enter Frequency" box, it would give you a pop-up that reads, "Frequency Too High for Fosc, Press Clear Button and Try Again". However, if you change Fosc to 32 (MHz), you get:
- NCO Decimal = 772013.34375
- NCO Hex = BC7AD
- Result Rounded Up = 11780010.0136
- Result Rounded Down = 11779994.7548
With that in mind, you would set your registers:
- NCO1INCL = $AD
- NCO1INCH = $C7
- NCO1INCU = $0B
Have fun.


Menu

Re: Converting PBP interrupt to ASM - 18F25K20
for what it worth you might save a nano second or two
richard - 4th March 2026, 05:30i'm not exactly sure how the assembler works but SFR's that are in the access bank can be referenced without needing to select bank 15...