00001
00029 #include <ioavr.h>
00030
00031 #include "enums.h"
00032
00033 #include "main.h"
00034 #include "PWM.h"
00035 #include "time.h"
00036
00037
00038
00039
00040
00044 void PWM_Stop(void)
00045 {
00046 OCR1B = 0;
00047 PLLCSR = 0;
00048 TCCR1A = 0;
00049 TCCR1B = 0;
00050 TCCR1C = 0;
00051 TCCR1D = 0;
00052 OCR1C = 0;
00053 OCR1D = 0;
00054 DT1 = 0;
00055 }
00056
00057
00066 void PWM_Start(void)
00067 {
00068
00069 TCCR1A = (1<<COM1B1)|(0<<COM1B0)|(1<<PWM1B);
00070
00071
00072 TCCR1B = 0;
00073
00074
00075 TCCR1C = (TCCR1A & 0xF0);
00076
00077
00078 TCCR1D = (0<<WGM11)|(1<WGM10);
00079
00080
00081 TCCR1E = 0;
00082
00083
00084 OCR1A = 0;
00085
00086
00087 OCR1B = PWM_OFFSET;
00088
00089
00090 OCR1C = 0xFF;
00091
00092
00093 OCR1D = 0;
00094
00095
00096 DT1 = 0;
00097
00098
00099 DDRB |= (1<<PB3);
00100
00101
00102 PLLCSR = (0<<LSM) | (1<<PLLE);
00103
00104
00105 Time_Set(TIMER_GEN,0,0,1);
00106 do{
00107 }while(Time_Left(TIMER_GEN));
00108
00109
00110 do{
00111 }while((PLLCSR & (1<<PLOCK)) == 0);
00112
00113
00114 PLLCSR |= (1<<PCKE);
00115
00116
00117 TCCR1B |= (0<<CS13)|(0<<CS12)|(0<<CS11)|(1<<CS10);
00118 }
00119
00120
00126 unsigned char PWM_IncrementDutyCycle(void){
00127
00128 if (OCR1B < PWM_MAX) {
00129 OCR1B += 1;
00130 return(TRUE);
00131 } else {
00132 return(FALSE);
00133 }
00134 }
00135
00136
00142 unsigned char PWM_DecrementDutyCycle(void){
00143
00144 if (OCR1B > 0) {
00145 OCR1B -= 1;
00146 return(TRUE);
00147 } else {
00148 return(FALSE);
00149 }
00150 }