#include <avr/interrupt.h>
#include <avr/io.h>
//таймер
//#define FQ 5000 //установка частоты обновления в Гц
volatile unsigned int tcnt2; //timer freq
//74hc595 wiring
//Pin connected to ST_CP of 74HC595
int _latch = 8;
//Pin connected to SH_CP of 74HC595
int _clock = 12;
////Pin connected to DS of 74HC595
int _data = 11;
byte registers[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//настройки при запуске
void setup() {
//timer setup
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 1; // 16000000/64/f=tcnt2
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
//установка портов
pinMode(_latch, OUTPUT);
digitalWrite(_latch, LOW);
pinMode(_clock, OUTPUT);
digitalWrite(_clock, LOW);
pinMode(_data, OUTPUT);
digitalWrite(_data, LOW);
}
//цикл главной программы
void loop() {
}
//процедура динамической индикации
void timer2() {
if (registers[0]==0x01) registers[0]=0x00;
else registers[0]=0x01;
digitalWrite(_latch, LOW);
shiftOut(_data, _clock, MSBFIRST, registers[7]);
shiftOut(_data, _clock, MSBFIRST, registers[6]);
shiftOut(_data, _clock, MSBFIRST, registers[5]);
shiftOut(_data, _clock, MSBFIRST, registers[4]);
shiftOut(_data, _clock, MSBFIRST, registers[3]);
shiftOut(_data, _clock, MSBFIRST, registers[2]);
shiftOut(_data, _clock, MSBFIRST, registers[1]);
shiftOut(_data, _clock, MSBFIRST, registers[0]);
digitalWrite(_latch, HIGH);
}
//обработчик прерывания
ISR(TIMER2_OVF_vect) {
TCNT2 = tcnt2;
timer2();
}
Включается но не выключается, либо скорость настолько высока что пц (при установке в 1).
Как установить частоту 1 гц? просто 1?