Пример #1
0
void pwm_init(){
	//PWM output active (pin5)
	DDRE   |=  (1<<PE3);
	
	//CS3{2:0}   = 011  prescaler set to 64
/*
	TCCR3B |=  (1<<CS30) | (1 << CS31);
	TCCR3B &= ~(1<<CS32);*/

	//CS3{2:0}   = 010  prescaler set to 8
	TCCR3B |=   (1<<CS31);
	TCCR3B &= ~((1<<CS32) | (1<<CS30));
	
	//WGM3{3:0}  = 1110 mode set to fast PWM
	TCCR3A |=  (1<<WGM31);
	TCCR3A &= ~(1<<WGM30);
	TCCR3B |=  (1<<WGM33) | (1<<WGM32);
	
	//COM3A{1:0} = 10   clear bit on ICR3 compare
	TCCR3A |=  (1<<COM3A1);
	TCCR3A &= ~(1<<COM3A0);
	
	//Setting ICR3 to DUTY_CYCLE_STEPS (20ms)
	ICR3 = DUTY_CYCLE_STEPS;
	pwm_set_value(MID_SERVO);
}
Пример #2
0
void UART0_IRQHandler(void){

	//disable interrupt
	U0IER = 0x0;

	/*
	char s[11];
	char a = U0RBR;
	for(int i = 0;i<100;i++){
		itoa(array[i],s,10);
		USART0_String(s);
		USART0_Transmit('\r');
		USART0_Transmit('\n');
	}
*/
	//USART_Handler();

	char s[12];
	int tmp = 0;



	s[0] = U0RBR;

	for(tmp=1;tmp<11;tmp++){
		s[tmp] = USART0_Receive();
		if(s[tmp] == '\n') break;
	}
	s[tmp+1] = '\0';

	tmp = (int)strtol(s, NULL, 10);

	pwm_set_value(FAN_ADC, tmp);
	//heater_set_temp(EXTRUDER_ADC, tmp);
	//STEPS_PER_M_E = tmp;

	char a[12];
	itoa(tmp, a, 10);


	USART0_String(a);
	USART0_Transmit('\n');

	//enable interrupt
	U0IER = 0x1;
}
Пример #3
0
void pwm_test(){
	pwm_set_value(150);
}
Пример #4
0
void pwm_set_servo(int16_t val){
	val += 128;
	//printf("%d\n", val);
	val = (val*(VAL_SCALE/UNDERFLOW_FIX)) / 255 * UNDERFLOW_FIX + MIN_SERVO;
	pwm_set_value(val);
}
Пример #5
0
	/*
	DDRH = (1 << DDH6);
	
	//fast pwm
	TCCR4A &= ~(1 << WGM40);
	TCCR4A |= (1 << WGM41);
	TCCR4B |= (1 << WGM42) | (1 << WGM43);
	
	//set non-inverting
	TCCR4A &= ~(1 << COM4A0);
	TCCR4A |= (1 << COM4A1);
	
	//set prescaler
	TCCR4B |= (1 << CS41);
	TCCR4B &= ~((1 << CS42)|(1 << CS40));
	
	//Set duty cycle?
	ICR4 = F_CPU/prescaler/1000*20;
	
	//Set on time?
	OCR4A = 2/1000*F_CPU/prescaler;
	*/
}

void pwm_set_value(unsigned int val){
	OCR3A = val;
}

void pwm_test(void){
	pwm_set_value(150)
}