Taking timing further Chapter Nine 9.1 – 9.8 Dr. Gheith Abandah 1 Outline • • • • • • Timer 1 Timer 2 Capture/Compare/PWM Pulse Width Modulation (PWM) Digital to Analog Conversion (DAC) Summary Dr. Gheith Abandah 2 Timing Issues • Maintaining continuous counting functions • Recording (‘capturing’) in timer hardware the time an event occurs • Triggering events at particular times • Generating repetitive time-based events • Measuring frequency, e.g., motor speed Dr. Gheith Abandah 3 The PIC 16 Series Device Pins Features 16F84A 18 1 8-bit timer 1 5-bit port 1 8-bit port 16F873A 16F876A 28 3 parallel ports, 3 counter/timers, 2 capture/compare/PWM, 2 serial, 5 10-bit ADC, 2 comparators 16F874A 16F877A 40 5 parallel ports, 3 counter/timers, 2 capture/compare/PWM, 2 serial, 8 10-bit ADC, 2 comparators Dr. Gheith Abandah 4 PIC 16F84A Timer 0 Module Dr. Gheith Abandah 5 PIC 16F84A Timer 0 Module Dr. Gheith Abandah 6 Option Register • • • • T0CS: Clock source select T0SE: Source edge select PSA: Prescaler assignment bit PS2:PS0: Prescaler rate select Dr. Gheith Abandah 7 PIC 16F87XA Timer 1 Module Dr. Gheith Abandah 8 Timer 1 Registers 16-bit register: •TMR1L (0Eh) •TMR1H (0Fh) Control Register: •T1CON (10h) Dr. Gheith Abandah 9 Timer 1 control register • T1CKPS1:T1CKPS0: Input Clock Prescale Select, 1:1-1:8 • T1OSCEN: Oscillator Enable Control • T1SYNC’: External Clock Input Synchronization Control • TMR1CS: Clock Source Select • TMR1ON: Timer1 On Dr. Gheith Abandah 10 Derbot odometer • Timers 0 and 1 are used to count pulses generated by the optical sensors mounted on the shaft encoders. • The program drives the Derbot forward for 1m. It then completes a 180◦ turn on the spot and runs forward for 1m again. The program loops continuously in this manner. Dr. Gheith Abandah 11 Derbot odometer circuit Dr. Gheith Abandah 12 Odometer Example – Page 1 ;Initialization movlw B'01000100' ;set port A for right movwf adcon1 ;analog/digital mix movlw B'11101000' ;T0: external input, movwf option_reg ;low to high transition, ;no prescale movlw B'00000011' ;T1: no prescale, movwf t1con ;oscillator disabled, ;external sync input Dr. Gheith Abandah 13 Odometer Example – Page 2 opto_move clrf tmr0 ;clear timers clrf tmr1l Because the counter must first have a falling edge clrf tmr1h before it starts to count. clrf flags btfss portc,0 ;increment T1 if ip is zero, incf tmr1l ;as 1st rising edge isn’t ;detected call leftmot_fwd ;start motors running call rtmot_fwd Dr. Gheith Abandah 14 Odometer Example – Page 3 opto_loop movlw D'91' subwf tmr0,0 btfsc status,z bcf porta,mot_en_left movlw D'91' subwf tmr1l,0 btfsc status,z bcf porta,mot_en_rt … goto opto_loop ;test for 1m ;disable motor if = ;disable motor if = Dr. Gheith Abandah 15 Generating a ‘clock tick’ – a repetitive interrupt stream Dr. Gheith Abandah 16 Example: ‘clock tick’ generation • Assuming an oscillator frequency of 4MHz, what is the slowest ‘clock tick’ rate that can be obtained from Timer 0 and Timer 1? • T0: slowest interrupt rate with prescaler ÷256. • The input frequency to T0 is 1 MHz/256, or 3.906 kHz. • The 8-bit timer divides this frequency by 256 to produce the clock tick frequency, which will be 3.906 kHz/256, or 15.26 Hz. Dr. Gheith Abandah 17 Example: ‘clock tick’ generation • T1: slowest interrupt rate with prescaler ÷8. • The input frequency to T1 is 1 MHz/8, or 125 kHz. • The 16-bit timer divides this frequency by 216 to produce the clock tick frequency, which will be 125 kHz/ 216, or 1.91 Hz. Dr. Gheith Abandah 18 PIC 16F87XA Timer 2 Module Dr. Gheith Abandah 19 Timer 2 Registers 8-bit register: •TMR2 (11h) Control Register: •T2CON (12h) •PR2 (92h), period register Dr. Gheith Abandah 20 Timer 2 control register • TOUTPS3:TOUTPS0: Output Postscale Select, 1:1-1:16 • TMR2ON: Timer 2 On • T2CKPS1:T2CKPS0: Clock Prescale Select, 1:1, 1:4, 1:16 Dr. Gheith Abandah 21 The PR2 register, comparator and postscaler Dr. Gheith Abandah 22 Example: Timer 2 interrupt rate • Assuming an oscillator frequency of 4MHz, what is the slowest ‘clock tick’ rate that can be obtained from Timer 2? • Slowest interrupt rate with prescaler ÷16 and postscaler ÷16 . • The input frequency is 1 MHz/16, or 62.5 kHz. • If PR2 is preset to 255, the frequency is divided by 256 to produce the reset frequency, which will be 62.5 kHz/256, or 244.14 Hz. • With postscaler of 16, then the interrupt frequency will be 15.26 Hz. Dr. Gheith Abandah 23 The capture/compare/PWM (CCP) modules • 2 CCP modules • Each CCP module contains a 16-bit register which can operate as a: 1. 16-bit Capture register 2. 16-bit Compare register 3. Pulse width modulation Master/Slave Duty Cycle register Dr. Gheith Abandah 24 CCP Registers 16-bit register: •CCPR1L (15h) •CCPR1H (16h) •CCPR2L (1bh) •CCPR2H (1ch) Control Register: •CCP1CON (17h) •CCP2CON (1dh) Dr. Gheith Abandah 25 CCP x control register • CCPxX:CCPxY: PWM Least Significant bits • CCPxM3:CCPxM0: Mode Select bits Dr. Gheith Abandah 26 CCPx Mode Select bits Dr. Gheith Abandah 27 Capture mode Dr. Gheith Abandah 28 Compare mode Dr. Gheith Abandah 29 Pulse width modulation The current rises from 10 to 90% of its final value in time 2.2L/R Time constant small compared to ‘on’ time. Dr. Gheith Abandah 30 Pulse width modulation Time constant large compared to ‘on’ time, narrow pulse. Time constant large compared to ‘on’ time, wide pulse Dr. Gheith Abandah 31 PWM mode Note 1: The 8-bit timer is concatenated with 2-bit internal Q clock, or 2 bits of the prescaler, to create 10-bit time base. Dr. Gheith Abandah 32 Waveforms for the 16F873A PWM generator Dr. Gheith Abandah 33 Calculations T = (PR2 + 1) × (Timer 2 input clock period) = (PR2 + 1) × {Tosc × 4 × (Timer 2 prescale value)} ton = (pulse width register) × (PWM timer input clock period), = (pulse width register) × {Tosc × (Timer 2 prescale value)} pulse width register = CCPR1L | CCP1CON<5:4> + 1 Dr. Gheith Abandah 34 Example PR2 is loaded with 249D. The clock oscillator frequency is 4 MHz. Neither pre- nor postscale. Find the PWM period. T = (PR2 + 1) × {Tosc × 4 × (Timer 2 prescale value)} = 250 × (250 ns × 4 × 1) = 250 μs i.e. PWM frequency = 4.00 kHz. Dr. Gheith Abandah 35 PWM applied in the Derbot for motor control Dr. Gheith Abandah 36 Example waveforms Dr. Gheith Abandah 37 Derbot Motor Example – Page 1 ;set up movlw movwf movlw movwf movwf movlw movwf ... PWM B'00000100' t2con B'00001100' ccp1con ccp2con 0f9 pr2 ;switch on Timer2, ;no pre or postscale ;enable PWM ;249 Dr. Gheith Abandah 38 Derbot Motor Example – Page 2 leftmot_fwd ;run left motor forward bsf porta,mot_en_left movlw D'176' movwf CCPR2L return leftmot_rev ;run left motor backward bsf porta,mot_en_left movlw D'80' movwf CCPR2L return Dr. Gheith Abandah 39 Generating PWM in software • May use up all PWM resources or don’t have them in a low-cost microcontroller. • PWM outputs can be generated based on software delay loops only. • PWM outputs can also be generated based on timer interrupts. Dr. Gheith Abandah 40 Generating PWM with timer interrupt Dr. Gheith Abandah 41 cblock assembler directive cblock 20 var1 ;reserve 1 byte for var1 var2 ;reserve 1 byte for var2 … endc Dr. Gheith Abandah 42 PWM used for digital-to-analog conversion (DAC) Dr. Gheith Abandah 43 RC low-pass filter characteristics Dr. Gheith Abandah 44 Derbot Example fc = 1/(2π*100nF* 20kΩ) = 80 Hz Dr. Gheith Abandah 45 Generating a sine wave Dr. Gheith Abandah 46 Lower: the PWM stream. Upper: detail of analog output T = 250 μs f = 4 kHz Dr. Gheith Abandah 47 Sine wave example – Page 1 clrf pointer sin_loop movf pointer,w call sin_table ;get most significant byte movwf ccpr1l ;move it to the PWM output incf pointer,f ;increment the pointer movf pointer,w call sin_table ;get the MS byte andlw B'11000000' ;we only use ms 2 bits Dr. Gheith Abandah 48 Sine wave example – Page 2 movwf bcf rrf rrf iorlw movwf incf movf temp status,c ;adjust for CCP1CON temp,f temp,w B'00001100' ;set some CCP1CON bits ccp1con pointer,f pointer,w call goto delay1 sin_loop … Dr. Gheith Abandah 49 Weaknesses of this method • The output analog voltage is directly dependent on the logic levels of the PWM stream. These in turn are dependent on the accuracy of the power supply voltage. • The low-pass filter cannot generate fast-changing signals.. • Running the PWM faster decreases the resolution. • There will always be some residual ripple on the analog output. Dr. Gheith Abandah 50 Frequency measurement Both a counter and a timer are needed, the timer to measure the reference period of time and the counter to count the number of events within that time. Dr. Gheith Abandah 51 Derbot speed measurement program Dr. Gheith Abandah 52 Speed measurement example – Page 1 Timer2_Int decfsz int_cntr goto int_end ;here if making a measurement movf tmr0,w ;save counter values movwf tmr0_temp movf tmr1l,w movwf tmr1_temp clrf tmr0 ;clear counters clrf tmr1l Dr. Gheith Abandah 53 Speed measurement example – Page 1 btfss portc,0 ;inc T1 if = 0, as first incf tmr1l ;rising edge won’t be seen movlw D'250' ;reload interrupt counter movwf int_cntr int_end bcf pir1,tmr2if retfie Dr. Gheith Abandah 54 Summary • Timing is an essential element of embedded system design – both in its own right and to enable other embedded activities, like serial communication and pulse width modulation. • A range of timers is available, with clever add-on facilities which extend their capability to capture, compare, create repetitive interrupts or generate PWM pulse streams. • In applications of any complexity, a microcontroller is likely to have several timers running simultaneously, for quite different and possibly conflicting applications. The question remains open at this stage: how can these different timebased activities be marshaled and harmonized? Dr. Gheith Abandah 55