![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| Specialist |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 12.5.2008 Где: Кривой Рог Репутация: 1 Всего: 2 |
Пишу прогу и нужно было поставить кварц на 20 мГц поставил. До этого стоял на 4мГц и все норм было . И конечно у меня задержки уменьшились в 5 раз, странно.
Использую Proteus для отладки, пишу в MPLAB на C, компилятор Hi-Tech. Функции Delay там есть в примерах я использую их. Проблема в том, что я не пойму как указать частоту правильно.
Тут написано, что нужно в командную строку добавить -DXTAL_FREQ=20MHZ. Иду в Project>Build Options>main.c добавляю там строчку эту и задержка изменяется на 31мкс но это не правильно.
Может у кого-то есть другая функция задержки ? Или как эту использовать ??? Помогите плиз, очень нужно ! Это сообщение отредактировал(а) Specialist - 31.7.2008, 20:45 |
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Ты уже нашел CPP predefined symbols list? Или прогу picc?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Specialist |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 12.5.2008 Где: Кривой Рог Репутация: 1 Всего: 2 |
Ничего не понял. |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Specialist, ты сам выложил комментарии, ты их читал, сделал что там написано?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Specialist |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 12.5.2008 Где: Кривой Рог Репутация: 1 Всего: 2 |
Читал конечно.
А должна быть 50мкс. Это сообщение отредактировал(а) Specialist - 3.8.2008, 19:57 |
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Ради интереса, посмотри правильно ли отсчитывает 10, 20 и там 30 мкс. Если при какой то паузе начинается погрешность, то это и есть even smaller. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Specialist, на своём относительно небольшом опыте скажу - вместо рабора "чего не так" с библиотечными функциями проще написать свои. Благо в отношении контроллеров это не такая уж и проблема. Практически весь функционал я пишу для свои проектов я пишу сам, исключение составляют разве что небольшие макросы, которые неправильно работать просто немогут. В отношении данной темы могу сказать вот что - сделай цикл (можно даже ассемблерной вставкой и инлайновским) - посмотри сколько циклов мк он длится. Например в моих проектах такой цикл выглядит так:
Поиграв со значениями и вставив по необходимости пустые операторы можно добится круглового количества циклов. Далее при необходимости задержки в извесное количество циклов - просто столько раз и вызови эту функцию. Со временем то же самое, просто необходимо сначала высчитать количество вызовов (надо умножить частоту кристалла на количество времени задержки)... |
|||
|
||||
| Specialist |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 12.5.2008 Где: Кривой Рог Репутация: 1 Всего: 2 |
Не правильно. Наверно после 12мГц начинается "range limits". И к 20 мГц вообще перестает работать. Нету времени сейчас проверить. UniBomb, не сильно понял, что этот код делает(кроме декремента) но сам смысл понятен. Чуть позже этим займусь. Спасибо! |
|||
|
||||
| eladrea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2008 Репутация: нет Всего: нет |
была похожая проблема...
реализовывал нужную задержку оператором "for" внутри которой пару "nop" команд и вызов функции опроса клавиатуры |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Specialist,
этим декрементом ты занимаеш процессорное время. Чего и требовалось))) Вместо декремента можно инкремент сделать, или вообще что угодно eladrea, фор в зависимости от настроек компилятора (да и вообще в зависимости от самого компилятора) может быть по разному реализован. Как следствии можно говорить о точности "+- чего то там". Да и потом такой цикл может быть вообще проигнорирован. Как следствие задержка получается наглазок, когда как инлайновские ассемблеровские вставки дают задержку в точное количество тактов. |
|||
|
||||
| eladrea |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2008 Репутация: нет Всего: нет |
UniBomb а отладка на что? даже в MPLAB SIM можно все задержки прослеживать и корректировать
фор удобен еще тем что в любой момент можно прервать задержку(при срабатывании прерывания и возврата в ту же самую точку), если речь идет о hi-tech picc, мое мнение - компилятор кривой(8.05 PL2 точно), щас перешел на ccs c - пока нареканий нету. |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
eladrea, ну я с пиками дела не имел, только авр... avr-gcc имеет такую особенность, что он часто оптимизирует то, чего не ждёт программист. И если написать просто фор с нопами, то такой цикл "оптимизируется" до нуля циклов. Даже очень много переменных не создются ни при отладке, ни при рантайме (которые используются всего несколько раз - например всякие счётчики, представляеш как удобно отлаживать, считая количесвто циклов в уме)))))
|
|||
|
||||
| Ofer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 293 Регистрация: 15.10.2006 Где: КривбаСС Репутация: 1 Всего: 5 |
UniBomb, чтоб оптимизатор не убирал код, его можно насильно заставить вставить через volatile, а чтоб считать циклы было удобней, то в сишном коде можно сделать ассемблерные вставки с упоминанием того же volatile. В таком случае можно добиться очень большой точности задержки, если конечно просчитать и не ошибиться
|
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Гы)) я эту мысль уже озвучил: |
|||
|
||||
| Ofer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 293 Регистрация: 15.10.2006 Где: КривбаСС Репутация: 1 Всего: 5 |
||||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |