Вт дек 17, 2019 10:40:53
Вт дек 17, 2019 11:12:15
Вт дек 17, 2019 11:22:44
Вт дек 17, 2019 11:23:48
ISR(TIM0_COMPA_vect)
{
j=j+1;
if (j==4)
{
PORTB ^= (1<<LED2);
j=0;
TCNT0=0x00;
}
}
Вт дек 17, 2019 11:27:12
volatile uint8_t t0_ovf_cnt, t0_1hz_flag;
ISR(TIM0_COMPA_vect) {
t0_ovf_cnt++; // Увеличием свою переменную, отмечая кол-во входов в прерывание по совпадаению.
if (t0_ovf_cnt == 4) // если это был 4ый вход, пора изменить OCR0A, чтобы дальше получился 1 Гц
OCR0A = 148; // 1172 вы сами посчитали, 4 раза по 256 уже прошло, осталось 148 (256*4 + 148 = 1172)
else if (t0_ovf_cnt >= 5) { // И вот следующий раз натикало 1172 тика вот тут уже
OCR0A = 255; // вернем регистр сравнения назад к 0xFF
t0_ovf_cnt = 0; // сбросим нашу переменную с кол-ом переполнений
t0_1hz_flag = 1; // установим переменную с флагом переполнения. Мы можем в main() потом проверить его и если он 1 - значит пора что-то делать. Или вместо этой строки сразу можем написать скажем переключения пина со светодиодом и будет мерцание в 1 Гц.
}
}
Вт дек 17, 2019 11:27:14
BOB51 писал(а):ВСЮ начинку ПО МАКСИМУМУ выпотрошить
Вт дек 17, 2019 11:28:46
Вт дек 17, 2019 12:31:00
Вт дек 17, 2019 12:39:37
olegue писал(а):в каких пределах устанавливается внутренняя частота процессора (встроенного генератора)?
Вт дек 17, 2019 12:42:53
Вт дек 17, 2019 13:22:54
Вт дек 17, 2019 13:57:28
Вт дек 17, 2019 15:02:44
Как и в каких пределах устанавливается внутренняя частота процессора (встроенного генератора)?
CLKPR = 1 << CLKPCE;
CLKPR = (1 << CLKPS2) | (1 << CLKPS0);
Мне на английском его читать пока проблематично.
Ну например как в отладчике. допустим я посчитал частоту импульсов с генератора. Как в протеусе вывести на экран результат подсчета?
В отладчике вижу что все мои переменный указаны в шестнадцатиричном виде.
И когда я делю количество импульсов на секунды, неудивительно что у меня в результирующей переменной '\0'
Вт дек 17, 2019 16:54:23
NStorm писал(а):Без этого будет тяжко. Надо учиться читать ДШ на английском,
NStorm писал(а):Нужен код. Что на что делится непонятно. Почему 0 и при чем здесь 16ричный вид?
TCCR0B=0x05; //ДЕЛЕНИЕ НА 1024
//TCCR0B|=(1<<CS02); // УСТАНОВИМ ДЕЛИТЕЛЬ 1024
//TCCR0B|=(1<<CS00); // Эти 2 бита в 1
TCCR0A=0x00;
OCR0A=0x00; // 30; 1200000/1024=1172 ГЦ и делим на число 0x1E (30)= 39 гц
TIMSK0=0x04; // разрешаем таймер по совпадению с числом в OCR0A
Вт дек 17, 2019 17:23:54
у меня вот эти настройки таймера работают по переполнению,а не по сравнению с OCR0A.
TCCR0A = (1 << WGM01);
а если ставлю TIMSK0=0X02, то вообще в функцию не заходит.
Вт дек 17, 2019 17:43:21
NStorm писал(а): вообще плохая практика писать "магические числа" - код потом нечитаем без постоянного заглядывания в ДШ совсем. П
Вт дек 17, 2019 19:13:17
Вт дек 17, 2019 19:14:07
olegue писал(а):не готов пока по даташиту работать,
нет общего понимания системы,
Вт дек 17, 2019 19:35:45
Вт дек 17, 2019 20:08:16