roboforum.ru

Технический форум по робототехнике.
Текущее время: 06 ноя 2024, 02:26

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 30, 31, 32, 33, 34, 35, 36 ... 144  След.
Автор Сообщение
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 04 май 2008, 20:52 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
В некоторых АВРках есть режимы в которых верхнее значение можно задавать. А так, как уже и сказали аксакалы, :) только вручную в начале процедуры обработки прерывания по совпадению в счетный регистр таймера ноль записывать. И таймер начнет барабанить с нуля, а процедура будет себе выполняться. И им будет глубоко друг на друга все равно :).

_________________
I live My life!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 04 май 2008, 21:31 
Не в сети

Зарегистрирован: 11 ноя 2007, 20:12
Сообщения: 57
Откуда: урал
у часов вот такой обработчик прерывания:
Код:
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)    //Прерывание происходит 100 раз в сек, сохраняем в глобальные переменные текущее время
{
TCNT1H=0x00;
TCNT1L=0x00;
milliseconds++;
}

часы отстают в сутки на полторы минуты. Кварц 16 МГц, тинька2313, прерывания 100 раз в сек.
Даже если на каждом прерывании терять по 10 тактов - то не должно быть такой погрешности. Кварц дохлый или грабли в другом месте? Собственно вопросы были по этой причине


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 04 май 2008, 21:40 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Точная подгонка времени описана в задаче 6 курса ! http://avr123.nm.ru/z6.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 05 май 2008, 04:45 
Не в сети

Зарегистрирован: 11 ноя 2007, 20:12
Сообщения: 57
Откуда: урал
avr123.nm.ru писал(а):
Точная подгонка времени описана в задаче 6 курса ! http://avr123.nm.ru/z6.htm

указанный способ не подходит. Во первых часы отстают а это значит что придется изменять параметры таймера, а во вторых этих NOP будет слишком много, да и кварц не термостатирован, что означает что корректирующую величину придется менять в зависимости от условий эксплуатации. В данному случае проще ввести корректировку времени 4 раза в сутки добавляя или вычитая настраиваемую константу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 май 2008, 00:48 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Хелп, нимагу понять, есть у меня Mega8, я двумя кнопками подключенными к прерываниям включаю и выключаю ШИМ на ножке В2, включается он очень даже на ура, а вот после выключения ШИМа на порте остается то высокий, то низкий уровень.
Код:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)  //ПУСК
{
PORTC.2=0;  //отключаем реле торможения
delay_ms(PauseTormoz);  //пауза на срабатывание реле

PORTC.1=1;  //включаем реле пуска
delay_ms(PausePusk);  //пауза на срабатывание реле

TCCR1B=0x09;  //запускаем ШИМ 
delay_ms(200);  //пауза для устранения дребезга контактов   
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)  //СТОП
{
TCCR1B=0x08;  //останавливаем ШИМ 
delay_ms(1);  //пауза на всякий случай
PORTC.1=0;  //отключаем реле пуска
delay_ms(PausePusk);  //пауза на срабатывание реле

PORTC.2=1;  //включаем реле торможения
delay_ms(PauseTormoz);  //пауза на срабатывание реле

delay_ms(200);  //пауза для устранения дребезга контактов 
}


Добавлено спустя 1 минуту 9 секунд:
Причем вставка после выключения ШИМа сточки
Код:
PORTB.2=0;
не помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 май 2008, 09:49 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
так ты шим скорей всего останавливаешь в случайном состянии. отсюда то 1 то 0 на выходе. выходы Порта сконфигурированы как шим и программированию типа порт=1 или 0 не поддаются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 май 2008, 10:44 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Да наверное так и получается, просто в протеусе всегда ШИМ отключается в состоянии "0".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 май 2008, 22:57 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Блин все равно не получается, уже уменьшаю ШИМ до нуля, останавливаю таймер, но никакого результата, при ШИМе 100% после выключения на ножке все равно высокий уровень.
Код:
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)  //СТОП
{
OCR1B=0x00;  //уменьшаем ШИМ до нуля
TCCR1B=0x08;  //останавливаем ШИМ 
delay_ms(1);  //пауза на всякий случай
PORTC.1=0;  //отключаем реле пуска
delay_ms(PausePusk);  //пауза на срабатывание реле

PORTC.2=1;  //включаем реле торможения
delay_ms(PauseTormoz);  //пауза на срабатывание реле

delay_ms(200);  //пауза для устранения дребезга контактов 
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 май 2008, 00:37 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
уже лучше? только высокий на ножке?
выход шим случайно не инверстный, и какой МК?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 май 2008, 11:39 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Выход не инверсный, МК Mega8 кварц 16 МГц, получается что вероятность появления высокого уровня прямопропорциональна величине ШИМ :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 11 май 2008, 00:58 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Короче нашел в чем проблема, это даже наверное из раздела грабли, все прошло после того как я вставил паузу в 1мс.
Код:
OCR1B=0x00;  //уменьшаем ШИМ до нуля
delay_ms(1);  //БЕЗ ЭТОЙ ПАУЗЫ НИФИГА НЕ РАБОТАЕТ ШИМ ОСТАНАВЛИВАЕТСЯ В ВЫСОКОМ ПОЛОЖЕНИИ
TCCR1B=0x08;  //останавливаем ШИМ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 11 май 2008, 08:23 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
А можно еще, на крайняк, в регистр сравнения писать число, при котором ШИМ 0%.

_________________
I live My life!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 11 май 2008, 10:32 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
А это что еще за регистр такой?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 12 май 2008, 22:23 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2007, 19:23
Сообщения: 1058
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК
ну, блин, OCR (Output Compare Register) там какой-нибудь OCR1A, OCR1B и протча. Если там ноль, то и на ножке будет ноль, а если там максимальное значение, то на выходе будет 1.

_________________
I live My life!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 12 май 2008, 23:51 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
Master, вообщето отвечая на твои вопросы я думал ты представляешь как шим работает через таймеры. :pardon:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 30, 31, 32, 33, 34, 35, 36 ... 144  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO