Код: Выделить всё
void set_motor_pwm_frequency(int frequency) {
switch (frequency) {
case PWM_31250_HZ:
// Divide by 1. frequency = 31.25 kHz;
bitClear(TCCR1B, CS11);
bitSet(TCCR1B, CS10);
break;
Код: Выделить всё
void set_motor_pwm_frequency(int frequency) {
switch (frequency) {
case PWM_31250_HZ:
// Divide by 1. frequency = 31.25 kHz;
bitClear(TCCR1B, CS11);
bitSet(TCCR1B, CS10);
break;
У меня есть тахометр на tiny2313, у которого таймер 1 имеет такой же функционал как и у mega328.uldemir писал(а):Т.е. замерить интервал невозможно, так как счетчик уже 10 раз переполнится между импульсами? А менять частоту ШИМ двигателей я не могу - мне нужно снять характеристики именно в таком режиме.
Код: Выделить всё
// Массив режимов работы светодиода
uint16_t modes[] = {
0B0000000000000000, //Светодиод выключен (
0B1111111111111111, //Горит постоянно
0B0000111100001111, //Мигание по 0.5 сек
0B0000000100000001, //Короткая вспышка раз в секунду
0B0000000000001001, //Две короткие вспышки раз в 2 секунды
0B0000000001001001, //Три короткие вспышки раз в 2 секунды
0B0101010101010101 //Частые вспышки
};
int main(void){
while(1){
// Событие срабатывающее каждые 125 мс СТАТУС СВЕТОДИОД
if( ( msec_cnt - ms_led_st ) > 125 || msec_cnt < ms_led_st ) {
ms_led_st = msec_cnt;
// Режим светодиода ищем по битовой маске
if(blink_mode & 1<<(blink_loop&0x0F)) {
PORTC |=(1<<LED_STATUS); //ON светодиод;
}else{
PORTC &=~(1<<LED_STATUS); //OFF светодиод
}
blink_loop++;
}
}
}Код: Выделить всё
ISR (TIMER0_OVF_vect)
{
// Событие срабатывающее каждые 125 мс СТАТУС СВЕТОДИОД
if( ( msec_cnt - ms_led_st ) > 125 || msec_cnt < ms_led_st ) {
ms_led_st = msec_cnt;
// Режим светодиода ищем по битовой маске
if(blink_mode & 1<<(blink_loop&0x0F)) {
PORTC |=(1<<LED_STATUS); //ON светодиод;
}else{
PORTC &=~(1<<LED_STATUS); //OFF светодиод
}
blink_loop++;
}
}можно и так.Just_Fluffy писал(а):Fcpu/64 -> таймером разделить на 150 - подходит