******************************************************************************* * File main.c * Owner LaMa-TIC-RPR * Version 1.1 * Date Jun/17/2016 * Classification General Business Information * Brief S12Z Frequency Measurement at PT0 (IOC0_0) by TIM module * in input capture mode ******************************************************************************* * Detailed Description: * The code measures frequency at PT0 * It demonstrates * - It measures frequency at PT0 by means of TIM module IOC0_0. * - The measurement is sensitive on rising edges so duty cycle has no affect * to the measurement * - Constants: * BUSCLOCK * MAX_OVERFLOWS * TIMER_PRESCALLER * must be defined * - MAX_OVERFLOWS determines minimum measurable frequency. * It is max. allowed number of overflows. When overflows counter reaches * this value it the flag FREQUENCY_TOO_LOW is set. The message * PERIOD BETWEEN TWO EDGES IS TO WIDE is then written to a variable "str" * This value gives time interval: * T = TIMER_PRESCALER * MAX_OVERFLOWS * 65536 / BUSCLOCK * For example: * - TIMER_PRESCALER = 1 * - MAX_OVERFLOWS = 1000 * - BUSCLOCK = 16,000,000Hz * T = 1 * 1000 * 65536 / 16,000,000 = 4,096s => f=0,244140625Hz * - TIMER_PRESCALER = { 1,2,4,8,16,32,64,128} - smaller values give more * precise values but it generates timer overflow more frequently * - the physical representation of the measured frequency is stored in the * string "str" * * - The measurement precision is df which can be expressed as: * * df = BUSCLK / ((n^2 + n) * PRESCALER); n = measured number of TCNT periods * * For example: BUSCLK = 16MHz, n = 399, PRESCALER = 1 * * * df = 16,000,000 / ((399^2 + 399) * 1) = 100.25Hz * * so, count 399 means f=BUSCL/399=16,000,000/399 = 40,100.25Hz * so, count 400 means f=BUSCL/400=16,000,000/399 = 40,000.00Hz * * So this method is not suitable for large frequencies as can be seen in * following table (percentual error we can get is df/f): * n f[Hz] df[Hz] n f[Hz] df[Hz] * 1 8000000 5333333,3 101 1553,0 30,1 * 2 2666666,6 1333333,3 102 1522,9 29,2 * 3 1333333,3 533333,3 103 1493,6 28,4 * 4 800000 266666,6 104 1465,2 27,6 * 5 533333,3 152380,9 105 1437,5 26,8 * 6 380952,3 95238,0 106 1410,6 26,1 * 7 285714,2 63492,0 107 1384,5 25,4 * 8 222222,2 44444,4 108 1359,1 24,7 * 9 177777,7 32323,2 109 1334,4 24,0 * 10 145454,5 24242,4 110 1310,4 23,4 * 11 121212,1 18648,0 111 1287,0 22,7 * 12 102564,1 14652,0 112 1264,2 22,1 * 13 87912,0 11721,6 113 1242,0 21,6 * 14 76190,4 9523,8 114 1220,4 21,0 * 15 66666,6 7843,1 115 1199,40,502 * 16 58823,5 6535,9 116 1178,8 19,9 * 17 52287,5 5503,9 117 1158,9 19,4 * 18 46783,6 4678,3 118 1139,4 18,9 * 19 42105,2 4010,0 119 1120,4 18,5 * 20 38095,2 3463,2 120 1101,9 18,0 * 21 34632,0 3011,4 121 1083,8 17,6 * 22 31620,5 2635,0 122 1066,2 17,1 * 23 28985,5 2318,8 123 1049,0 16,7 * 24 26666,6 2051,2 124 1032,2 16,3 * 25 24615,3 1823,3 125 1015,8 15,9 * * - PCB setup: * - J35 is disconnected because measurement is done on PT0 * - pulse generator is connected to the J35 pin 1. (PT0) * * - Reference to documentation: MC9S12ZVLMR1.pdf Rev. 1.02 * - Tested on TRK-S12ZVL * - MCU MC9S12ZVL32 0N22G * - OSCCLK = 4MHz * - BUSCLK = 16MHz (set by PLL) * * The info about frequency and count is transmitted over the SCI0 Tx which is * routed (MODRR) to PS1 pin * ******************************************************************************* Revision History: Version Date Author Description of Changes 1.0 Jun/17/2016 LaMa-TIC-RPR Initial version ******************************************************************************/
記事全体を表示