Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.12.2010, 12:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от omercury
|
В начале памяти программ векторы прерываний. Если придут все сразу(ситуация невероятная, но теоретически возможная), кроме сброса, то будут обрабатываться по очереди - начиная с младшего адреса.
Ежу понятно.
У ТС так и сделано - критичный ко времени расчет вначале.
Будем на словах ловить, или по-делу?
|
Господи, никого я не ловлю. Оно мне нужно? Но утверждать, что у АВРок нет приоритетности прерываний некорректно. Она есть. И исходя их этого надо расставлять задачи по обработчикам.
Согласен, надо по делу. А дела-то и нету.. Вот мы и пикируемся, знания демонстрируем друг другу
Я перестал...
|
|
|
|
03.12.2010, 20:24
|
|
Частый гость
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Так всетаки из за чего отстают часы (время прерывания 1мс) код выполняется менее 1 мс даже так:
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
if( ++ms == 1000){ ms = 0;
if( ++sec == 60 ){ sec = 0;
if( ++min == 60 ){ min = 0;
if( ++hour == 24 ) {hour = 0;
}}}}
PORTA=255;
PORTB=0b11000000;
if (++Dig==6){Dig=0;};
switch (Dig){
case 0: PORTB SET_B(0);PORTA=recode[(hour / 10)];break;
case 1: PORTB SET_B(1);PORTA=recode[(hour % 10)];break;
case 2: PORTB SET_B(2);PORTA=recode[(min / 10)];break;
case 3: PORTB SET_B(3);PORTA=recode[(min % 10)];break;
case 4: PORTB SET_B(4);PORTA=recode[(sec / 10)];break;
case 5: PORTB SET_B(5);PORTA=recode[(sec % 10)];break;
};
for (i = 0; i ‹ 780; i++){};
}
протеус выдает 1мс
|
|
|
|
03.12.2010, 20:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от Dorgx7
|
Так всетаки из за чего отстают часы (время прерывания 1мс) код выполняется менее 1 мс даже так:
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
if( ++ms == 1000){ ms = 0;
if( ++sec == 60 ){ sec = 0;
if( ++min == 60 ){ min = 0;
if( ++hour == 24 ) {hour = 0;
}}}}
PORTA=255;
PORTB=0b11000000;
if (++Dig==6){Dig=0;};
switch (Dig){
case 0: PORTB SET_B(0);PORTA=recode[(hour / 10)];break;
case 1: PORTB SET_B(1);PORTA=recode[(hour % 10)];break;
case 2: PORTB SET_B(2);PORTA=recode[(min / 10)];break;
case 3: PORTB SET_B(3);PORTA=recode[(min % 10)];break;
case 4: PORTB SET_B(4);PORTA=recode[(sec / 10)];break;
case 5: PORTB SET_B(5);PORTA=recode[(sec % 10)];break;
};
for (i = 0; i ‹ 780; i++){};
}
протеус выдает 1мс
|
А это зачем???
Цитата:
|
for (i = 0; i ‹ 780; i++){};
|
В прерывании все сделали, но уходить из него грустно? Еще немножко посидим, этак 780 джампов?
По правилам "хорошего тона" любой список case в теле оператора switch должен завершаться default. См. руководство по Си.
Уйдешь из Протеза, можно будет поговорить. С виртуальными девайсам не работаю.
Поставь хороший точный кварц (промеряй тактовую) - тогда будем обсуждать проблемы неточности установки частоты.
Последний раз редактировалось ut1wpr; 03.12.2010 в 21:02.
|
|
|
|
03.12.2010, 21:07
|
|
Частый гость
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от ut1wpr
|
for (i = 0; i ‹ 780; i++){};
|
это я проверял сколько остается времени после выполнения основного кода прерывания те примерно 700 тиков. те этого не будет в программе.
А насчет кварца это проблема померить тактовую нечем нет ни частотомер ни осциллографа.(как раз думал сделать но с такой погрешностью ....)
подскажите как можно определить хороший кварц по внешним признакам, если это конечно возможно
Последний раз редактировалось Dorgx7; 03.12.2010 в 21:12.
|
|
|
|
03.12.2010, 21:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от Dorgx7
|
вроде все правильно но часики за 8ч отстают на 4 сек ((
|
Чем и как замерялся уход? В Протеусе?! 8 часов не выключался компьютер?
Что-то меня это упоминание о Протезе настораживает...
|
|
|
|
03.12.2010, 21:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от Dorgx7
|
А насчет кварца это проблема померить тактовую нечем нет ни частотомер ни осциллографа.(как раз думал сделать но с такой погрешностью ....)
|
Затрудняюсь сказать. Чтобы измерять, нужен инструмент.
|
|
|
|
03.12.2010, 21:21
|
|
Частый гость
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
ок буду искать чем померить (покупать уж очень накладно для увлечения )
|
|
|
|
03.12.2010, 22:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
Сообщение от Dorgx7
|
ок буду искать чем померить (покупать уж очень накладно для увлечения )
|
Так все-таки, это готовое устройство или Протеус? Ответа не было.
|
|
|
|
03.12.2010, 22:56
|
|
Частый гость
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
устройство в железе, и кварц я менял толку 0
Протеус юзаю при отладке кода чтоб не прошивать мк 100 раз на дню а потом когда все вроде ок в железо и там проверяю в итоге 3-4сек за 8часов на железе .
|
|
|
|
03.12.2010, 23:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Прошу помощи в освоении AVR под CV
0.00014% ошибка! По-моему очень достойный кварц.
Каждые 2 часа добавляйте 1секунду - и будет вам счастье.
Или почаще кратно.
Последний раз редактировалось omercury; 03.12.2010 в 23:43.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:56.
|
|