Professional Documents
Culture Documents
and DC Motor
Control
Part 2
LECTURE# 23
OCF0
TCNT2 Bottom
FOC2
TCNT2 Top
PORTD.7 0
OC2
TCNT2 (PD7)
1
=
Wave Generator
Comparator
OCR2 DDRD.7
OCF2
Limitations??
◦ Non-inverted
◦ 0% duty not possible
◦ inverted
◦ 100% duty not possible
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
SBI DDRB,3
LDI R20,99
OUT OCR0,R20
LDI R16,0x69
OUT TCCR0,R16
OUT OCR0,R20
LDI R16,(1<<TOIE0)
OUT TIMSK,R16
SEI
HERE: RJMP HERE
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16 ;initialize stack
SBI DDRB,3 ;OC0 as output
LDI R20,99 ;R20 = 99
OUT OCR0,R20 ;OCR0 = 99
LDI R16,0x69 ;Fast PWM mode, non-inverted, no prescaler
OUT TCCR0,R16
OUT OCR0,R20 ;OCR0 buffer = 99
LDI R16,(1<<TOIE0) ;enable overflow interrupt non-inverted Fast PWM mode
OUT TIMSK,R16 • On compare match OC0 -> High
SEI ;enable global interrupt • On overflow OC0-> Low
HERE: RJMP HERE ;wait here
NEG(99) = 157
NEG(157) = 99
Counts
◦ 0, 1, 2, …, 254,
◦ 255,
◦ 254, … , 2, 1, 0
◦ (total 510 cycles)
2×𝑂𝐶𝑅0 𝑂𝐶𝑅0
Duty Cycle = × 100 ⇒ Duty cycle = × 100
510 255
On Atmega328
◦ All timers can generate two PWMs
◦ As all timers have two different OCRnA and OCRnB registers
◦ Generating PWMs on OCnA and OCnB
slaves SS SLAVE1
SLAVE2
At a time, the master SS
SS SLAVE3