Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.08.2011, 02:04
|
#1
|
Временная регистрация
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
|
Счетчик-таймер на ATtiny
Понадобился мне счетчик и таймер в одном исполнении, который бы считал секунды и минуты в обоих направлениях.. Пересмотрел все поисковики, того, что мне надо, не нашел.
В готовый исходный код на СИ для счетчика вставил обратный отсчет (правильно ли?, но работает), а дальше застопорился. Программирование только начал осваивать, и не могу сделать предустановку времени для обратного отсчета (импульсы установки через 0.25-0.5сек.), а так же, чтобы при счете мигала раз в секунду разделительная точка.
Может, кто поможет мне спраиться с этой задачей?
Как при пуске зажечь светодиод, а при остановке потушить?
Как сделать, что бы при достижении прямого счета 59.59 счет останавливался?
Вопросов больше, чем ответов с моей стороны. Может вообще я пошел не тем путем? Пересмотрел много исходников и этот мне наиболее понятен.
Исходный код для CodeVisionAVR и схема во вложенном файле.
|
|
|
Сказали "Спасибо" Dimitrij
|
|
|
21.08.2011, 04:40
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
__________________
Глаза боятся,а руки делают.
|
|
|
Сказали "Спасибо" CERGEI1982
|
|
|
21.08.2011, 09:51
|
#3
|
Временная регистрация
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
CERGEI1982,
Цитата:
|
Секундный таймер с нулевой погрешностью
|
Это не то, что мне надо. Тем более, что пример на асме, а я его совсем не знаю.
|
|
|
Сказали "Спасибо" Dimitrij
|
|
|
22.08.2011, 08:18
|
#4
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
m3:
tik++;
if (tik›9) {tik=0; des_tik++;}
if (des_tik›9) {des_tik=0; sec++;}
if (sec›9) {sec=0; des_sec++;}
if (des_sec›5) {des_sec=0; min++;}
if (min›9) {min=0; des_min++;}
if (des_min›5) {tik= des_tik = sec = des_sec = min= des_min=0;}
if ((des_min == 0) & (min == 0) & (des_sec == 0) & (sec == 5)) { start = 0; }
Последняя строка - это то что добавить надо.
Параметры останова сам уж скорректируешь.
Последний раз редактировалось BolshoyK; 22.08.2011 в 08:23.
|
|
|
Сказали "Спасибо" BolshoyK
|
|
|
22.08.2011, 10:08
|
#5
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Код таймера из одной "поделки"
/
Код:
|
*программа обработки прер. от RTC INT1 (DS1307 вывод времени) */
void rtc_int (void) interrupt 2 using 1
{
unsigned char j;
rtc_interrupt=1; //отмечаем прерывание
if (timer_mode){ //режим таймера
if (!timer_on) goto timer_out; //если выключен-просто вывод значения таймера
if(!timer_direction){ //прямой счет таймера?
if (++seconds == 60) { //увеличиваем секунды
seconds = 0;
if (++minuts == 60) { //увеличиваем минуты
minuts = 0;
if (++hours == 99) { //увеличиваем часы
hours = 0; }}}
}
else{ //обратный счет
if (!seconds && !minuts && !hours) goto timer_out; //таймер ==0 -выход
if (seconds) --seconds; //уменьшаем время таймера
else {
seconds=59;
if (minuts) --minuts;
else{
minuts=59;
--hours;}}
if (!seconds && !minuts && !hours) { //таймер обнулился-попищим
sound_duration=sound_long;
mute=0;
sound_on=1; }
} |
Последний раз редактировалось heady69; 22.08.2011 в 10:11.
|
|
|
Сказали "Спасибо" heady69
|
|
|
22.08.2011, 10:55
|
#6
|
Временная регистрация
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Сообщение от BolshoyK
|
Последняя строка - это то что добавить надо.
|
Счетчик останавливается, но повторно не запускается даже после сброса, только если выключить и включить питание! Я думаю, что тогда нужно ставить отдельно кнопки пуск и стоп, а портов не хватает.
Пробовал перейти на MEGA8, но уменя что-то не получилось. Знаний маловато.
CVAVR ругается на код:
Код:
|
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif |
, в MEGA8 нет CLKPR, а чем заменить, я не знаю. С таймерами у меня туго, настройки TIMER0 там другие.
heady69,
Цитата:
|
Код таймера из одной "поделки"
|
Спасибо, буду пробовать!
|
|
|
Сказали "Спасибо" Dimitrij
|
|
|
22.08.2011, 12:00
|
#7
|
Частый гость
Регистрация: 24.11.2006
Сообщений: 32
Сказал спасибо: 4
Сказали Спасибо 14 раз(а) в 8 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Сообщение от Dimitrij
|
Код:
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
|
Выкинуть совсем этот кусок.
|
|
|
|
22.08.2011, 12:02
|
#8
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Сообщение от Dimitrij
|
Счетчик останавливается, но повторно не запускается даже после сброса, только если выключить и включить питание!
|
У меня все запускается, если нажать на сброс. Строка симулирует нажатие кнопки стоп, при достижении нужного значения. Тестировал на том, что привел в примере - 5 секунд. Ждать час для теста нет желания Вообще, лучше разобраться детально в своей проге, чтобы ЗНАТЬ как она работает, чем просто повторить чужой код.
|
|
|
Сказали "Спасибо" BolshoyK
|
|
|
22.08.2011, 12:04
|
#9
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Сообщение от Dimitrij
|
в MEGA8 нет CLKPR, а чем заменить, я не знаю. С таймерами у меня туго, настройки TIMER0 там другие.
|
В CVAVR Есть визард который сделает тебе шаблон. Отуда и скопируй всю инициализацию.
|
|
|
Сказали "Спасибо" BolshoyK
|
|
|
22.08.2011, 13:00
|
#10
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Счетчик-таймер на ATtiny
Сообщение от Dimitrij
|
Понадобился мне счетчик и таймер в одном исполнении, который бы считал секунды и минуты в обоих направлениях.. Пересмотрел все поисковики, того, что мне надо, не нашел.
В готовый исходный код на СИ для счетчика вставил обратный отсчет (правильно ли?, но работает), а дальше застопорился. Программирование только начал осваивать, и не могу сделать предустановку времени для обратного отсчета (импульсы установки через 0.25-0.5сек.), а так же, чтобы при счете мигала раз в секунду разделительная точка.
Может, кто поможет мне спраиться с этой задачей?
Как при пуске зажечь светодиод, а при остановке потушить?
Как сделать, что бы при достижении прямого счета 59.59 счет останавливался?
Вопросов больше, чем ответов с моей стороны. Может вообще я пошел не тем путем? Пересмотрел много исходников и этот мне наиболее понятен.
Исходный код для CodeVisionAVR и схема во вложенном файле.
|
Через чур замудренный исходник... Выкинуть в корзину и написать с нуля!
Зачем переходы использовать и зачем использовать цикл с условием?! Изза этого бреда программа и затыкается.
напиши так:
прерывание(в нем динамическая индикация)
в основном цыкле переменная инкриментируется или декрементируется в зависимости от состояния флага и при достижении определенного значения счет останавливается. Я такого плана программки писал под заказ, при чем штук 100 различных вариаций. Самая последняя программка с эфектом миллисекундного досчета при установке нужного значения, симпатично получилось.
Вот мой проект, его можно доработать так как тебе нужно.
Если проблему не решишь сам, могу помочь.
|
|
|
Сказали "Спасибо" artyomugr
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:32.
|
|