This shows you the differences between two versions of the page.
pm:lab:lab0xc0-3 [2020/03/30 01:09] dumitru.tranca |
pm:lab:lab0xc0-3 [2020/03/31 17:01] (current) constantin.ghilinta [Generating PWM using ATmega Timers] |
||
---|---|---|---|
Line 3: | Line 3: | ||
For more in-depth knowledge about the capabilities and the timing peripherals and how to program them you can find more information in the ATmega324 datasheet ({{:pm:doc8272.pdf|Datasheet ATmega324}}). | For more in-depth knowledge about the capabilities and the timing peripherals and how to program them you can find more information in the ATmega324 datasheet ({{:pm:doc8272.pdf|Datasheet ATmega324}}). | ||
- | Sketch is available here: | + | |
===== PWM (Pulse Width Modulation) ===== | ===== PWM (Pulse Width Modulation) ===== | ||
- | PWM (Pulse Width Modulation) or PDM (Pulse Duration Modulation) is a modul{{:pm:lab:lab3:lab2_0xc2.zip|}}ation technique used to reduce the average power delivered by an electrical signal to a load by chopping it into discrete parts. | + | PWM (Pulse Width Modulation) or PDM (Pulse Duration Modulation) is a modulation technique used to reduce the average power delivered by an electrical signal to a load by chopping it into discrete parts. |
The average value of a signal is dependent on the maximum and minimum amplitude and on the duration of the pulses of minimum and maximum amplitude. | The average value of a signal is dependent on the maximum and minimum amplitude and on the duration of the pulses of minimum and maximum amplitude. | ||
Line 93: | Line 93: | ||
{{ :pm:lab:lab3:pwm_unipolar.png?550 |}} | {{ :pm:lab:lab3:pwm_unipolar.png?550 |}} | ||
- | \begin{equstudation} | + | \begin{equation} |
V_{avg}=\frac{7.5ms}{10ms} \cdot 10=0.75 \cdot 10 = 7.5V | V_{avg}=\frac{7.5ms}{10ms} \cdot 10=0.75 \cdot 10 = 7.5V | ||
\end{equation} | \end{equation} | ||
Line 176: | Line 176: | ||
* Wait For T2 | * Wait For T2 | ||
- | he issue here would be that we need to determine how much time does the code before this sequence or after it take to execute. | + | The issue here would be that we need to determine how much time does the code before this sequence or after it take to execute. |
Another solution would be to use timer interrupts and in the ISR to change the state of the pin. | Another solution would be to use timer interrupts and in the ISR to change the state of the pin. | ||
In this manner, we will at least have a precise timing, but we will generate many interrupts that might affect our code in some situations. | In this manner, we will at least have a precise timing, but we will generate many interrupts that might affect our code in some situations. | ||
Line 235: | Line 235: | ||
TCCR1A |= _BV(WGM10); //Just WGM10 is in TCCR1A | TCCR1A |= _BV(WGM10); //Just WGM10 is in TCCR1A | ||
- | //WGM11, WGM12 and WGM13 will be set in TCCR1B | + | //WGM12 will be set in TCCR1B |
TCCR1B |= _BV(WGM12); | TCCR1B |= _BV(WGM12); | ||
Line 329: | Line 329: | ||
===== Tasks ===== | ===== Tasks ===== | ||
+ | Sketch is available here: {{:pm:lab:lab3:lab2_0xc2.zip|}} | ||
1. Compile the code sketch in the archive and run it. | 1. Compile the code sketch in the archive and run it. |