Таймер обратного отсчета на AVR язык Си

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

Добрый вечер! Пытаюсь сделать таймер с выводом на LCD дисплей. В первой строчке показывает часы, а во второй таймер обратного отсчета. Время все прекрасно идет, показывает, настраивается, а вот с таймером что то не получается.
Задача таймера, минуты и секунды. Настраиваю минуты (секунды) к примеру надо что бы считал с 5 минут и до 00.00 отсановился и выполнил какое то действие.
Реклама
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

Изображение
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

это у вас в коде что-то не так
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 782
Зарегистрирован: Вс фев 04, 2007 16:32:06

Сообщение yaotzin »

не знаю как у вас там что сделано и как правильней сделать, не занимался часами.

Но, время вы берёте от часов реального времени ? т.е. отдельная микросхема стоит? или у вас в микроконтроллере уже есть часы?

что вам мешает запомнить время в часах реальных.
к примеру запомнили 12:05
обратный отсчёт 00:05
---------------
и отслеживать так время
если ((запомненное+обратный отсчёт)-текущее)==0 то действие

, чтоб не использовать таймер/счётчик дополнительно. Хотя может правильней использовать таймер счётчик?

ну без программы и того что у вас там есть больше ничего сказать не могу.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

ARV писал(а):это у вас в коде что-то не так
Вот с кодом и не могу разобраться.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

aleksei18rus писал(а):Вот с кодом и не могу разобраться.
Т.е. код где-то существует? Тогда шансы есть разобраться.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

yaotzin писал(а):не знаю как у вас там что сделано и как правильней сделать, не занимался часами.

Но, время вы берёте от часов реального времени ? т.е. отдельная микросхема стоит? или у вас в микроконтроллере уже есть часы?

что вам мешает запомнить время в часах реальных.
к примеру запомнили 12:05
обратный отсчёт 00:05
---------------
и отслеживать так время
если ((запомненное+обратный отсчёт)-текущее)==0 то действие

, чтоб не использовать таймер/счётчик дополнительно. Хотя может правильней использовать таймер счётчик?

ну без программы и того что у вас там есть больше ничего сказать не могу.

Часы написаны через прерывания, прерывания 1 раз в секунду то что мне и нужно.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

исправьте ошибку в коде, делов-то!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Я так понимаю, человек просто пришёл поделиться несчастьем, а не за помощью. Ну дак поддержим его ! Пожелаем удачи во всём разобраться !
Давай, Алексей, мы с тобой мысленно !
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

aleksei18rus, Вам три четыре раза намекнули. Ну давайте "жирно" объясню. Вы сообщили формчанами что у Вас что-то не работает и что? Все дружно Вам посочувствовали. Вопрос то у Вас какой?

Задайте четкий вопрос и к вопросу приложите некие дополнения, зачастую требуются схемы, алгоритм, исходник и пр. в зависимости от вопроса.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Z_h_e писал(а):aleksei18rus, Вам три четыре раза намекнули.
Если не забывать про первую серию этого сиквела, то - пять раз.
Последний раз редактировалось Pnjom-Penb Ср фев 10, 2016 18:20:02, всего редактировалось 1 раз.
Опытный кот
Аватара пользователя
Сообщения: 782
Зарегистрирован: Вс фев 04, 2007 16:32:06

Сообщение yaotzin »

aleksei18rus без кода я вам помочь не могу.


когда нажали кнопку обратного отсчёта то
запомнили секунды в переменную обратного отсчёта

в прерывании где +1сек у вас постоянно, вычитаете с переменной -1секунду


ну и где либо делаете сравнение если (переменная с обратным отсчётом==0) то делаете там что либо
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Pnjom-Penb писал(а):
Z_h_e писал(а):aleksei18rus, Вам три четыре раза намекнули.
Если не забывать про первую серию этого сиквела, то - пять раз.
:facepalm: Прикрыл ту тему.
Интересно, неужели человек думает, что создавая множество тем, его поймут быстрее ... ? :)) С такой логикой в дворники нужно идти, а не программированием заниматься. Чем больше листьев наметёшь, тем больше тебя уважают :)))

Повангую. Сейчас чел огорчится на всех и, возможно, начнёт высказывать "Для чего же нужны форумы, и т.д...".
Контактная информация:
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

Мне в личку FAKIR написал что нужно в другой раздел написать, ну я понял что сюда.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

aleksei18rus писал(а):Мне в личку FAKIR ... ну я понял что сюда.
Он все правильно сказал. Тут люди сердобольные, проникнуться Вашей бедой, поплачут вместе с Вами :cry: . Не то что эти твари бессердечные, я про ПЛИСовцов.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Z_h_e писал(а):Не то что эти твари бессердечные, я про ПЛИСовцов.
Да, они не верют в телепатию и телекинез! Они бы даже в электричество не верили, как та старушка с Вороньей слободки, но это у них не получается никак - как начнут не верить, так все сразу само-собой заканчивается. :( :)))

(Все же, полагаю, Факир "Мяу" имел ввиду.)
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

Как смог так и написал не пинайте за код, главное как ни как работает.

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

#include <tiny2313a.h>
#include <lcd.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
eeprom char ee_min1;
//eeprom char ee_sec1;
 char chas;
 char min;
 char sec;
 char min1;
 char sec1=0;
 bit start=0;
 bit stop=0;
 /////////////////////////////////////////////////////////////////////////////////////////////////////////// прерывания
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////// счетчик часов
 sec++;
 if (sec==60)
 {sec=0; min++;}
 if (min==60) 
 {min=0; chas++;}
 if (chas==24) 
 {chas=0;min=0;sec=0;}
/////////////////////////////////////////////////////////////////////////////////////////////////////////// счетчик таймера
тут бла бла бла таймер
 }
 
 
 TCNT1=0;

}
void vremya ()
{    lcd_gotoxy (0,0);
     lcd_putchar(chas/10+48);
     lcd_putchar(chas%10+48);
     lcd_putsf (":");
     lcd_gotoxy (3,0);
     lcd_putchar(min/10+48);
     lcd_putchar(min%10+48);
     lcd_putsf (":");
     lcd_gotoxy (6,0);
     lcd_putchar(sec/10+48);
     lcd_putchar(sec%10+48);  
     lcd_gotoxy (9,0);
     lcd_putsf("GLAZOV");
}
void timer ()
{    lcd_gotoxy (0,1);
     lcd_putsf("<<<< ");
     lcd_putchar(min1/10+48);
     lcd_putchar(min1%10+48);
     lcd_putsf (":");
     lcd_putchar(sec1/10+48);
     lcd_putchar(sec1%10+48);  
     lcd_putsf(" >>>>");
     
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////// програмМа
void main(void)
{PORTD=0xFF;
 DDRD=0x00;
 lcd_init(16);
 TCCR1B=0x0C;
 TIMSK=0xE0;
 OCR1A=0x7A12;
 lcd_gotoxy (0,0);
 lcd_putsf ("FOOTBALL");
 lcd_gotoxy (8,1);
 lcd_putsf ("PROGRESS");
 delay_ms (950);
 lcd_clear();
 #asm ("sei")

while (1)
{vremya();
timer();    
     while (PIND.2==0)  
     {    
     if (PIND.0==0) {delay_ms (250); min++;}
     if (PIND.1==0) {delay_ms (250); chas++;}
     vremya();
     }
     
     
     if (PIND.0==0 & stop==0) {start=1;}
     if (PIND.1==0) {delay_ms(150);min1++; ee_min1=min1; delay_ms (20);}
     if (min1==60) {min1=0;}
     timer();
    }            

}
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

aleksei18rus писал(а):if (PIND.0==0 & stop==0) {start=1;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например

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

#define BUTTON_MODE PINB.0
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

Нет все нормально она отрабатывала, просто отбратный отсчет не получается сделать.
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Сообщение aleksei18rus »

metan писал(а):
aleksei18rus писал(а):if (PIND.0==0 & stop==0) {start=1;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например

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

#define BUTTON_MODE PINB.0
тоесть в коде буду писать

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

 if (BUTTON_MODE == 0)
, что бы запустить процесс.
Ответить

Вернуться в «AVR»