|
Странности таймеров в STR912 |
|
|
|
Feb 17 2010, 18:10
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(koyodza @ Feb 17 2010, 18:29)  Ваше предположение не вполне верно. Дело в том, что частота в "нормальном" режиме и в "обработчике прерывания" разная, она и правда меняется в разы. Но частота ведь всё время меняется, и на выходе таймера вы видите уже проинтегрированное значение. К слову, не PCLKDIV, а RCLKDIV ------------ Хм, посмотрел на блок-схему, освежил в памяти... Чего-то оно не очень освежилось... Всё равно проверьте ещё раз насчёт настроек RCLKDIV и Special Interrupt Mode, если меня не подводит память - там какая-то засада была именно с таймерами, из-за чего я сразу отказался от использования этого режима Да вроде как наладилось. Отказался от библиотек ST. Измерил частоту ШИМ с помощью осца. Отклонение рассчитанных значений и измеренных составило меньше одного процента и если учитывать, что частота определялась на глаз и осц довольно древний, то с уверенностью можно сказать, что после отказа от библиотек ST таймеры затикали нормально. За Special Interrupt mode спасибо. Буду иметь ввиду  .
Сообщение отредактировал artur_off - Feb 17 2010, 18:28
--------------------
Big time.
|
|
|
|
|
Feb 18 2010, 14:53
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Цитата(artur_off @ Feb 17 2010, 20:10)  Да вроде как наладилось. Отказался от библиотек ST. Вот так и рождаются нездоровые сенсации... А разобраться в чём дело значит не захотели. Библиотеки-то со всеми исходниками, можно ведь посмотреть и определить, кто и где был неправ
|
|
|
|
|
Feb 18 2010, 16:20
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(koyodza @ Feb 18 2010, 16:53)  Вот так и рождаются нездоровые сенсации... А разобраться в чём дело значит не захотели. Библиотеки-то со всеми исходниками, можно ведь посмотреть и определить, кто и где был неправ К сожалению нету времени в них копаться. Может как нибудь на досуге. Один из примеров. Как только начинал с ним работать, не хотели прерывания генерироваться. Поднял на форуме тему, в одном из сообщений подсказали попробовать объявить обработчик прерывания таким образом __irq void ........ (void) (в библиотеках ST почему-то это дело написано без __irq).
Сообщение отредактировал artur_off - Feb 18 2010, 16:25
--------------------
Big time.
|
|
|
|
|
Feb 20 2010, 15:32
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(Aprox @ Feb 11 2010, 09:53)  Не спешите. Я тоже столкнулся с проблемой тактирования периферии в STR91xx от внутренней частоты PCLK. Причем два раза для разных устройств- для UART- ов и для таймеров. На таймере запрограммировал PWM, генерирующий меандр с частотой 100 Гц. Получил 100, 5 Гц. Задающий кварц 25МГц- идеальный, проверял. Пришлось тупо корректировать загрузку кэпчур-регистра, чтобы убрать ошибку частоты в 0,5%. С UART получилась похожая история- при загрузке генератора скорости стандартными значениями из мануала, фактическая скорость следования битов оказалась на 2% ниже требуемой. Только на 57600 оказалась точной, а для других- всегда с занижением. Чем это объяснить- нет никаких мыслей. Пришлось также тупо корректировать загрузки генератора скорости, чтобы получить стандартные частоты. Проблема так и осталась нерешенной. Боюсь выплывет какой-нибудь неприятностью чуть позже. Если вы говорите, что в UART скорость была на 2% ниже, то попробуйте в целях эксперимента немного повысить частоту PLL, AlexandrY говорил, что розганял STR912 до 133 MHz. (Попробовал бы у себя, но у меня UART тикает вроде нормально). Запишите значения например N=202, M=26, P=2(данные значения для кварца 25MHz) (частота PLL примерно 97.115MHz) и посмотрите, какая получается скорость передачи в UART. Если вдруг процессор не запустится, то лечится следующим образом, выпаиваете кварц и на его место запаиваете кварц на меньшую частоту, скажем 12 MHz, стираете прошивку и запаиваете старый.
--------------------
Big time.
|
|
|
|
|
Feb 24 2010, 19:37
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Как обычно всё смешалось в одну кучу: Цитата(artur_off @ Jan 19 2010, 14:45)  Ради интереса выставил сделал счетчик, который каждую секунду должен зажигать светодиод. Но период не 1 сек, а примерно 1,3-1,5. Цитата(artur_off @ Feb 20 2010, 17:32)  ... в UART скорость была на 2% ниже ... Это, как говорится, две большие разницы: в случае с уартом налицо проблема неправильной настройки делителей. В STR91 (как и во многих других МК уровнем чуть повыше 51 и АВР) делитель частоты уарта может иметь некое подобие дробного коэффициента, там используется Fractional baud rate generation. Многие противники использования библиотек от ST просто игнорируют этот момент, и получают свои % отличия. В случае же с таймерами, описанным Вами в начале, отличие составляет десятки %. Чем оно может быть вызвано - одну из версий я уже выдвигал. Возможно, причина в чём-то другом, но однозначно это не их проблема, а Ваша. Ещё раз повторю: я реализовывал проект на данном МК, в котором недопустимо было отличие даже в сотые доли %, всё прекрасно работает.
|
|
|
|
|
Feb 25 2010, 20:52
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(koyodza @ Feb 24 2010, 22:37)  .... в случае с уартом налицо проблема неправильной настройки делителей. В STR91 (как и во многих других МК уровнем чуть повыше 51 и АВР) делитель частоты уарта может иметь некое подобие дробного коэффициента, там используется Fractional baud rate generation. Многие противники использования библиотек от ST просто игнорируют этот момент, и получают свои % отличия. В случае же с таймерами, описанным Вами в начале, отличие составляет десятки %. Чем оно может быть вызвано - одну из версий я уже выдвигал. Возможно, причина в чём-то другом, но однозначно это не их проблема, а Ваша. Ещё раз повторю: я реализовывал проект на данном МК, в котором недопустимо было отличие даже в сотые доли %, всё прекрасно работает. У меня с UART была и другая проблема- он изредка двоил символами на прием в присутствии прерываний таймера. Полез на ST форум и обнаружил, что у многих такое наблюдается. Тогда полез в исходники ST библиотеки и обнаружил ошибку в IRQ-обработчике. Там было реализовано nested прерывания без обновления приоритета VIC1. Тогда полез в support от ST и нашел новую версию ST-библиотеки от 2009 года. В этой новой библиотеке уже нет ошибки пв прерываниях. Надеюсь, установку скорости UART и счет таймеров( или PLL?) тоже подправили. Теперь буду пробовать новую версию библиотеки. О результатах вскорости доложу. Что же касается отличий в 2% от заданной скорости UART, то это похоже на ошибку округления до ближайшего целого при расчете fructional divider в старой версии ST библиотеки. Буду испытывать новую версию.
|
|
|
|
|
Feb 26 2010, 06:19
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(Aprox @ Feb 25 2010, 22:52)  У меня с UART была и другая проблема- он изредка двоил символами на прием в присутствии прерываний таймера. Полез на ST форум и обнаружил, что у многих такое наблюдается. Тогда полез в исходники ST библиотеки и обнаружил ошибку в IRQ-обработчике. Там было реализовано nested прерывания без обновления приоритета VIC1. Тогда полез в support от ST и нашел новую версию ST-библиотеки от 2009 года. В этой новой библиотеке уже нет ошибки пв прерываниях. Надеюсь, установку скорости UART и счет таймеров( или PLL?) тоже подправили. Теперь буду пробовать новую версию библиотеки. О результатах вскорости доложу.
Что же касается отличий в 2% от заданной скорости UART, то это похоже на ошибку округления до ближайшего целого при расчете fructional divider в старой версии ST библиотеки. Буду испытывать новую версию. Поделитесь новой библиотекой)))
--------------------
Big time.
|
|
|
|
|
Feb 27 2010, 07:57
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(artur_off @ Feb 26 2010, 09:19)  Поделитесь новой библиотекой))) Она в свободном доступе на сайте STM по разделу support. Уже кое-что попробовал. Действительно, обработчик прерываний в новой библиотеке стал работать предсказуемо за счет отказа от nested и правильного обновления приритетов при каскадировании VIC1 и VIC0. Понадобилось 2 года (с 2007 по 2009), чтобы устранить ошибки в ST библиотеке. Что же касается ошибки в 2% при установке длительности периода PWM на таймерах, то я обнаружил причину. Она из серии хреновых мануалов. Оказывается, чтобы поделить PCLK на пределителе таймера в N раз, нужно грузить в пределитель число N-1. В разделе мануала, где даются формулы расчета периода PWM, ничего про это не говорится! И в руководстве библиотеки ST тоже молчок. А узнаешь про -1 только в разделе "описание регистров TIMx". Hо идеального совпадения периода PWM с расчетным все равно не получилось после исправления оплошности с N-1 пределителя. Завышение частоты составило в 5-ом знаке по отношению к частоте задающего кварца. Если при расчете значения OCR2 вычитать не -5, как в мануале, а -4, то совпадение получаем идеальным. Что касается неточной установки скорости UART-ов, то этот момент еще с новой библиотекой не проверялся.
|
|
|
|
|
Feb 27 2010, 13:20
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(Aprox @ Feb 27 2010, 09:57)  Завышение частоты составило в 5-ом знаке по отношению к частоте задающего кварца. Если при расчете значения OCR2 вычитать не -5, как в мануале, а -4, то совпадение получаем идеальным. Ну так правильно, надо вычитать -4. Ведь при сбросе, значение счетного регистра устанавливается в значение 0xFFFC. Если честно, не нашел библиотеки.
Сообщение отредактировал artur_off - Feb 27 2010, 13:36
--------------------
Big time.
|
|
|
|
|
Feb 27 2010, 15:32
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(artur_off @ Feb 27 2010, 16:20)  Ну так правильно, надо вычитать -4. Ведь при сбросе, значение счетного регистра устанавливается в значение 0xFFFC. А фирменном мануале написано -5. Цитата Если честно, не нашел библиотеки. Ловите
new_91x_lib.zip ( 450.73 килобайт )
Кол-во скачиваний: 150
|
|
|
|
|
Feb 27 2010, 16:15
|

Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 24-05-08
Из: Odessa
Пользователь №: 37 784

|
Цитата(Aprox @ Feb 27 2010, 17:32)  Ловите
new_91x_lib.zip ( 450.73 килобайт )
Кол-во скачиваний: 150Благодарствую.
--------------------
Big time.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|