Страница 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, Вам три четыре раза намекнули.
Если не забывать про первую серию этого сиквела, то - пять раз.
:facepalm: Прикрыл ту тему.
Интересно, неужели человек думает, что создавая множество тем, его поймут быстрее ... ? :)) С такой логикой в дворники нужно идти, а не программированием заниматься. Чем больше листьев наметёшь, тем больше тебя уважают :)))

Повангую. Сейчас чел огорчится на всех и, возможно, начнёт высказывать "Для чего же нужны форумы, и т.д...".

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

Добавлено: Ср фев 10, 2016 18:48:35
aleksei18rus
Мне в личку FAKIR написал что нужно в другой раздел написать, ну я понял что сюда.

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

Добавлено: Ср фев 10, 2016 18:51:55
Z_h_e
aleksei18rus писал(а):Мне в личку FAKIR ... ну я понял что сюда.
Он все правильно сказал. Тут люди сердобольные, проникнуться Вашей бедой, поплачут вместе с Вами :cry: . Не то что эти твари бессердечные, я про ПЛИСовцов.

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;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например

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

#define BUTTON_MODE PINB.0

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;}
Тут ошибка, я думаю.
И для нормальной работы заведите переменную, где будете хранить состояние таймера: запущен, остановлен, досчитал до конца и т.д. В прерывании проверяйте /изменяйте эту переменную, и в главном цикле проверяйте / изменяйте.
И еще общая рекомендация - в дефайнах заменяйте номера портов на осмысленные наименования, так вам и в последствии будет гораздо проще разобраться и изменения в проект вносить гораздо проще. Например

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

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

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

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