часы на atmega16

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
NIk_9
Родился
Сообщения: 5
Зарегистрирован: Пн ноя 06, 2017 12:52:51

часы на atmega16

Сообщение NIk_9 »

З0дравствуйте. У меня возникла проблема с написанием часов на atmega16.
Я хочу сделать кнопку Start_stop в функции инициализации таймера. Но он не работает.
void timer_ini(void)
{

TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)

if (!(PORTA&0b00000100))
{
start_stop=0;
if (start_stop==0)
{
TCCR1B |= (0<<CS12);//установим делитель.
}
}
if ((PORTA&0b00000100))
{
start_stop++;
if (start_stop==1)
{
TCCR1B |= (1<<CS12);//установим делитель.
}
}

TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)



OCR1AH = 0b01111010; //записываем в регистр число для сравнения
OCR1AL = 0b00010010;
//TCCR1B |= (1<<CS12);//установим делитель.
}


Или нужно этот цикл писать не в этой функции?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: часы на atmega16

Сообщение Аlex »

NIk_9 писал(а):Но он не работает.
Кто не работает ? Кнопка ? Или таймер ?
Если кнопка, то почему "Он" ? Если таймер, то причём тут кнопка ?
NIk_9 писал(а):Или нужно этот цикл писать не в этой функции?
Ну, вообще то, это Вам решать, как создателю программы. Логика работы устройства только Вам известна.
NIk_9 писал(а):

Код: Выделить всё

start_stop=0;
if (start_stop==0)
Прикольно :)
Где логика, сначала сбрасывать переменную в ноль, потом проверять её на этот ноль ? :)))
Реклама
NIk_9
Родился
Сообщения: 5
Зарегистрирован: Пн ноя 06, 2017 12:52:51

Re: часы на atmega16

Сообщение NIk_9 »

Счетчик работает. Не работает кнопка.
в цикле я написал что если на PORTA 0b00000001 приходит земля то в значение переменной я занесу ноль и таймер перестанет считать.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: часы на atmega16

Сообщение BOB51 »

Остановка делается или по предделителю таймера (запись соответствует отключенному от предделителя входу таймера) или спецфлагом остановки/сброса предделителя таймера.
:roll:
Реклама
Эиком - электронные компоненты и радиодетали
NIk_9
Родился
Сообщения: 5
Зарегистрирован: Пн ноя 06, 2017 12:52:51

Re: часы на atmega16

Сообщение NIk_9 »

Я попытался сделать вот так но все равно не работает.
void timer_ini(void)
{

TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)
TCCR1B |= (i<<CS12);
TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)
OCR1AH = 0b01111010; //записываем в регистр число для сравнения
OCR1AL = 0b00010010;
//TCCR1B |= (1<<CS12);//установим делитель.
}

//----------------------------------------------------

while(1)
{
if (!(PORTA&0b00000001))
{
start_stop=0;
if (start_stop==0)
{
i=0;
}
}
if ((PORTA&0b00000100))
{
if (start_stop==1)
{
i=1;
}
}
if (start_stop>1)
{
if (i>1)
{
i=0;
start_stop=0;
}
}
}
}
Реклама
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: часы на atmega16

Сообщение arkhnchul »

приведите код целиком. И суньте его в теги code и spoiler.
Реклама
metan
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Re: часы на atmega16

Сообщение metan »

1. Вам уже сказали, где неверный код, почему в новом коде вы эту лажу повторили?
2. Где изменяется переменная start_stop и как она может стать >1?
3. Вы планируете использовать таймер еще для какой-то другой цели? Если нет, то оставьте функцию инициализации в покое, пусть себе считает. В обработчике прерывания просто при старте нужно обнулить переменную, и с ней уже работать. Всю обработку нажатий кнопок я бы сделал в главном цикле, или в отдельной процедуре, которая из него вызывается.
4. Вам очень не помешает посмотреть на исходные коды, которые были написаны до вас (в аналогичных разработках). В сети их полно. Там найдёте, как и старт сделать, и стоп.
Ответить

Вернуться в «Разные вопросы по МК»