Например TDA7294

 Форум РадиоКот • Просмотр темы - Помогите с асинхронным таймером на AtMega8a
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср апр 25, 2018 11:26:47



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 11:26:00 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Вот весь код:


Я уменьшил убегание (проблема была в минутах, последняя минута сбрасывалась в 0 за одно прерывания)
было так:
Код:
ISR(TIMER2_COMP_vect){
if (sec++ >= 59) { min ++; sec = 0;};
if (min >= 59) { hour ++; min = 0;};
if (hour >= 23) {hour = 0;};
}


Теперь они спешат на 20 секунд в час, все еще много, но лучше чем на 1,5 минуты.
При этом запускал параллельно с секундомером на ноутбуке, и заметно что одна секунда на часах отображается немного быстрее чем нужно.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 12:26:47 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Ср янв 06, 2010 11:01:46
Сообщений: 380
Рейтинг сообщения: 0
Я думаю, нужно переделать на прерывание по переполнению, и всё наладится
У меня в CodeVision вот так

Код:
TIMSK &=~(1<<OCIE2 | 1<< TOIE2);   // Запрещаем прерывания таймера 2
ASSR  = 1<<AS2;            // Включаем асинхронный режим
TCNT2 = 0;
TCCR2 = 5<<CS20;          // Предделитель на 128 на 32768 даст 256 тиков в секунду
               // Что даст 1 прерывание по переполнению в секунду.

while(ASSR & (1<<TCN2UB | 1<<OCR2UB | TCR2UB));

TIFR  |= 1<<OCF2 | 1<< TOV2;      // Сбрасываем флаги прерываний, на всякий случай.


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK |= 1<< TOIE2 | 1<<TOIE0;   


////////////////////////

interrupt [TIM2_OVF] void timer2_ovf_isr(void) {
  seconds++; normalize(); 
}


Вернуться наверх
 Профиль  
 
JLCPCB Prototype, Бесплатная доставка первого заказа + $2 на прототип ПП!

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Цена за 10 плат: $2 за 2-х слойную, $15 за 4-х слойную, $74 за 6-ти слойную.

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 13:43:13 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Я изначально и пытался делать по переполнению (посмотри самый первый код в шапке)

Добавлено after 8 minutes 18 seconds:
Еще вопрос, в прерывания по переполнение, в какой тик происходит прерывание? В 256 или 257?


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 13:53:36 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 95
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 11635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Jack-Sidr писал(а):
в какой тик происходит прерывание? В 256 или 257?
при переходе из 255 в 0

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 

Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 17:04:01 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Тогда какая разница в прерывания по совпадению с 255 и прерыванию по переполнению?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 17:35:17 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Ср янв 06, 2010 11:01:46
Сообщений: 380
Рейтинг сообщения: 0
Jack-Sidr писал(а):
какая разница в прерывания?

1


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 17:59:18 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
На тик дольше или меньше?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 21:57:51 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Ср янв 06, 2010 11:01:46
Сообщений: 380
Рейтинг сообщения: 0
меньше


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 22:29:18 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Если на тик менше, значит прерывания будут срабатывать чаще, значит часы будут идти быстрее, а они у меня и так спешат.
Чем тогда поможет прерывание переполнениям?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Пн фев 19, 2018 22:48:24 
Встал на лапы
Аватар пользователя

Карма: 21
Зарегистрирован: Сб янв 12, 2013 23:43:10
Сообщений: 96
Откуда: Москва
Рейтинг сообщения: 0

Код немного причесал, но есть ещё вопросы- в частности: весь проект выложить можно?- и интересует выставление фьюзов контролёра.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Вт фев 20, 2018 07:56:38 
Потрогал лапой паяльник

Карма: 7
Зарегистрирован: Ср янв 06, 2010 11:01:46
Сообщений: 380
Рейтинг сообщения: 0
Может, я и не логичен, конечно. Но я ответил на вопрос
Jack-Sidr писал(а):
какая разница в прерывания по совпадению с 255 и прерыванию по переполнению?

Разумеется имея в виду первую часть фразы "по совпадению с 255"
Дальше думайте сами. Тем более что я вам дал 100% рабочий код.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Вт фев 20, 2018 08:22:57 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 95
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 11635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
-Valerius- писал(а):
Код немного причесал, но есть ещё вопросы
вот-вот, вопросы есть. например, вот это вот что такое и зачем?
-Valerius- писал(а):
unsigned char bin[64] = {
0b00000000,
0b00100000,
0b00010000,
0b00110000,

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Вт фев 20, 2018 08:57:12 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
1.Фьюзы я не менял, только внутрение конденсаторы отключил.
2. Пробовал я по совпадению с 127, но так как часы спешили, решил попробовать с 128, ведь это по идее должно замедлить ход.
3.
Код:
void ShowTime(char h, char m, char s){   // функция динамической индикации
PORTB = bin[h]; //выводы PB0-5 подключены к светодиодами, выставляем часы двоичным кодом.
PORTD |= (1 <<PD5);  //открываем n-p-n транзистор столбика с часами
_delay_ms(1); //без задержки транзистор не успевает полностью закрыться, и светятся все столбики
PORTD &= ~(1 <<PD5); //закрываем транзистор часов
PORTB = bin[m];  // выставляем минуты
PORTD |= (1 <<PD6); // открываем транзистор минут
_delay_ms(1);
PORTD &= ~(1 <<PD6); // закрываем
PORTB = bin[s]; //секунды
PORTD |= (1 <<PD7);
_delay_ms(1);
PORTD &= ~(1 <<PD7);
}


4. Почему именно предделитель на 256 и сравнение с 127, а не предделитель на 128 и сравнение с 255, разве во втором случае не точнее будет?


Последний раз редактировалось Jack-Sidr Вт фев 20, 2018 09:01:50, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Вт фев 20, 2018 08:58:45 
Встал на лапы

Карма: 1
Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 139
Рейтинг сообщения: 1
В идеальных условиях, если по совпадению
Код:
OCR2=0x7E; 1 секунда

OCR2=0x80; 1,0078 секунды

OCR2=0x7E; 0,99219 секунды
В последних двух видим что за 3600 секунд +-28секунд набегает.

Я делал так (кварц китайский, по всей видимости не на 32768)
В результате за 72 часа убежали на 0,5-1 секунды.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Вт фев 20, 2018 13:44:13 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Похоже на правду, и убегает примерно на столько, прийду домой попробую потом отпишусь.

Добавлено after 4 hours 35 minutes 33 seconds:
-Valerius- писал(а):
Код немного причесал, но есть ещё вопросы
вот-вот, вопросы есть. например, вот это вот что такое и зачем?
-Valerius- писал(а):
unsigned char bin[64] = {
0b00000000,
0b00100000,
0b00010000,
0b00110000,


Часы выводят время двоичным кодом, а поскольку у меня не получилось развести выводы в правильном порядке, это по сути костыль, а вообще посмотрев в шапку, можно найти фото часов, и понять это)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Ср фев 21, 2018 08:13:08 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Код немного причесал, но есть ещё вопросы- в частности: весь проект выложить можно?- и интересует выставление фьюзов контролёра.


Не знаю как, но ваше "причесевание" помогло, оставлял на ночь, и за 8,5 часов набежало лишних 30 секунд, что, безусловно шаг вперед.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Ср фев 21, 2018 10:36:57 
Модератор
Аватар пользователя

Карма: 134
Зарегистрирован: Сб авг 14, 2010 16:05:51
Сообщений: 13226
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
лишних 30 секунд за 8,5 часов - это примерно 0,1%. но для часов это плохо...

_________________
Мудрость приходит вместе с импотенцией...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Ср фев 21, 2018 10:47:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 95
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 11635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Jack-Sidr писал(а):
это по сути костыль
я подозревал, что связано с разводкой. но 64 комбинации зачем?! или у вас нетрадиционные часы? ;)

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Ср фев 21, 2018 11:52:02 
Открыл глаза
Аватар пользователя

Зарегистрирован: Сб фев 17, 2018 01:08:56
Сообщений: 46
Рейтинг сообщения: 0
Именно, они отображают время не на индикаторах, а на светодиодных столбиках двоичным кодом, поэтому и нужны числа от 0 до 59 в двоичном коде. (Пожалуйста, посмотри в шапку, там есть фото собранных часов, и они никак не похожи на обычные часы)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите с асинхронным таймером на AtMega8a
СообщениеДобавлено: Ср фев 21, 2018 12:06:09 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 95
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 11635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Jack-Sidr писал(а):
поэтому и нужны числа от 0 до 59 в двоичном коде
а 64 варианта зачем? :)))

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y