Страница 1 из 2
Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 17:35:19
aleksei18rus
Добрый вечер! Пытаюсь сделать таймер с выводом на LCD дисплей. В первой строчке показывает часы, а во второй таймер обратного отсчета. Время все прекрасно идет, показывает, настраивается, а вот с таймером что то не получается.
Задача таймера, минуты и секунды. Настраиваю минуты (секунды) к примеру надо что бы считал с 5 минут и до 00.00 отсановился и выполнил какое то действие.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 17:36:13
aleksei18rus
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 17:47:05
ARV
это у вас в коде что-то не так
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 17:58:18
yaotzin
не знаю как у вас там что сделано и как правильней сделать, не занимался часами.
Но, время вы берёте от часов реального времени ? т.е. отдельная микросхема стоит? или у вас в микроконтроллере уже есть часы?
что вам мешает запомнить время в часах реальных.
к примеру запомнили 12:05
обратный отсчёт 00:05
---------------
и отслеживать так время
если ((запомненное+обратный отсчёт)-текущее)==0 то действие
, чтоб не использовать таймер/счётчик дополнительно. Хотя может правильней использовать таймер счётчик?
ну без программы и того что у вас там есть больше ничего сказать не могу.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:00:31
aleksei18rus
ARV писал(а):это у вас в коде что-то не так
Вот с кодом и не могу разобраться.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:02:15
Z_h_e
aleksei18rus писал(а):Вот с кодом и не могу разобраться.
Т.е. код где-то существует? Тогда шансы есть разобраться.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:03:39
aleksei18rus
yaotzin писал(а):не знаю как у вас там что сделано и как правильней сделать, не занимался часами.
Но, время вы берёте от часов реального времени ? т.е. отдельная микросхема стоит? или у вас в микроконтроллере уже есть часы?
что вам мешает запомнить время в часах реальных.
к примеру запомнили 12:05
обратный отсчёт 00:05
---------------
и отслеживать так время
если ((запомненное+обратный отсчёт)-текущее)==0 то действие
, чтоб не использовать таймер/счётчик дополнительно. Хотя может правильней использовать таймер счётчик?
ну без программы и того что у вас там есть больше ничего сказать не могу.
Часы написаны через прерывания, прерывания 1 раз в секунду то что мне и нужно.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:06:23
ARV
исправьте ошибку в коде, делов-то!
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:12:44
Аlex
Я так понимаю, человек просто пришёл поделиться несчастьем, а не за помощью. Ну дак поддержим его ! Пожелаем удачи во всём разобраться !
Давай, Алексей, мы с тобой мысленно !
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:13:22
Z_h_e
aleksei18rus, Вам три четыре раза намекнули. Ну давайте "жирно" объясню. Вы сообщили формчанами что у Вас что-то не работает и что? Все дружно Вам посочувствовали. Вопрос то у Вас какой?
Задайте четкий вопрос и к вопросу приложите некие дополнения, зачастую требуются схемы, алгоритм, исходник и пр. в зависимости от вопроса.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:18:59
Pnjom-Penb
Z_h_e писал(а):aleksei18rus, Вам три четыре раза намекнули.
Если не забывать про
первую серию этого сиквела, то - пять раз.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:19:07
yaotzin
aleksei18rus без кода я вам помочь не могу.
когда нажали кнопку обратного отсчёта то
запомнили секунды в переменную обратного отсчёта
в прерывании где +1сек у вас постоянно, вычитаете с переменной -1секунду
ну и где либо делаете сравнение если (переменная с обратным отсчётом==0) то делаете там что либо
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:26:27
Аlex
Pnjom-Penb писал(а):Z_h_e писал(а):aleksei18rus, Вам три четыре раза намекнули.
Если не забывать про
первую серию этого сиквела, то - пять раз.

Прикрыл ту тему.
Интересно, неужели человек думает, что создавая множество тем, его поймут быстрее ... ?

С такой логикой в дворники нужно идти, а не программированием заниматься. Чем больше листьев наметёшь, тем больше тебя уважают
Повангую. Сейчас чел огорчится на всех и, возможно, начнёт высказывать "Для чего же нужны форумы, и т.д...".
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:48:35
aleksei18rus
Мне в личку FAKIR написал что нужно в другой раздел написать, ну я понял что сюда.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 18:51:55
Z_h_e
aleksei18rus писал(а):Мне в личку FAKIR ... ну я понял что сюда.
Он все правильно сказал. Тут люди сердобольные, проникнуться Вашей бедой, поплачут вместе с Вами

. Не то что эти твари бессердечные, я про ПЛИСовцов.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Ср фев 10, 2016 19:20:07
Pnjom-Penb
Z_h_e писал(а):Не то что эти твари бессердечные, я про ПЛИСовцов.
Да, они не верют в телепатию и телекинез! Они бы даже в электричество не верили, как та старушка с Вороньей слободки, но это у них не получается никак - как начнут не верить, так все сразу само-собой заканчивается.
(Все же, полагаю, Факир "Мяу" имел ввиду.)
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Чт фев 11, 2016 08:11:09
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();
}
}
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Чт фев 11, 2016 08:40:16
metan
aleksei18rus писал(а):if (PIND.0==0 & stop==0) {start=1;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Чт фев 11, 2016 08:58:14
aleksei18rus
Нет все нормально она отрабатывала, просто отбратный отсчет не получается сделать.
Re: Таймер обратного отсчета на AVR язык Си
Добавлено: Чт фев 11, 2016 09:02:37
aleksei18rus
metan писал(а):aleksei18rus писал(а):if (PIND.0==0 & stop==0) {start=1;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например
тоесть в коде буду писать
, что бы запустить процесс.