| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с таймер http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14023 |
Страница 1 от 3 |
| Автор: | bobi13 [ Вто Сеп 08, 2015 3:18 pm ] |
| Заглавие: | Проблем с таймер |
Здравейте, ползвам микроконтролер 8051f021 и имам следния проблем. Използвам 2 таймера, за да генерирам честата и импулс. Таймерът на импулса е през 1мс и е с приоритет. Проблемът е че на изхода не получавам увеличаване през 1мс както е зададено, а получавам сигнал с разлика от 200-800us от искания. Например аз искам 8мс, а на изхода имам 7,8us. А към края на при искани 30мс получавам 29мс. void timer1_ISR(void) interrupt 3 //Timer to generate output signal { TH1 = 0xFA; //1ms TL1 = 0xCB; FRQ1 = FRQ1 - 1; if(FRQ1 == 0) { Valve_on = 1; // valve OFF FRQ1=FRQ; CNTIMP1=CNTIMP; CNTIMP1++; LED = 0; } CNTIMP1 = CNTIMP1 - 1; if(CNTIMP1 == 0) { CNTIMP1=CNTIMP; Valve_on = 0; // valve ON LED = 1; } } |
|
| Автор: | Dimitar [ Вто Сеп 08, 2015 3:42 pm ] |
| Заглавие: | Re: Проблем с таймер |
Много добре си ги получаваш - дължи се на софтуерния ти PWM. Можеш малко да го оптимизираш, но никога няма да е точно колкото искаш. Ако искаш точна честота ползвай хардуерен PWM. |
|
| Автор: | bobi13 [ Вто Сеп 08, 2015 4:20 pm ] |
| Заглавие: | Re: Проблем с таймер |
Нямам възможност да го ползвам. Има ли друг начин? |
|
| Автор: | stefan63 [ Вто Сеп 08, 2015 4:52 pm ] |
| Заглавие: | Re: Проблем с таймер |
Тези 200-300 микросекунди ... -или има друго прекъсване с по-голям приоритет, което твърде често съвпада с прекъсването по таймера -или някъде забраняваш прекъсванията и нещо чакаш. На каква честота работи процесора? |
|
| Автор: | stefan63 [ Вто Сеп 08, 2015 4:58 pm ] |
| Заглавие: | Re: Проблем с таймер |
Всъщност, покажи цялата програма. |
|
| Автор: | bobi13 [ Вто Сеп 08, 2015 4:58 pm ] |
| Заглавие: | Re: Проблем с таймер |
Имам два таймера, този таймер е на 1мс и е с най- висок приоритет. Другият таймер е на 5мс - той ми следи за бутони и други функции. Процесорът е на 16MHz/12 |
|
| Автор: | bobi13 [ Вто Сеп 08, 2015 4:59 pm ] | |||||||||
| Заглавие: | Re: Проблем с таймер | |||||||||
|
||||||||||
| Автор: | stefan63 [ Вто Сеп 08, 2015 5:38 pm ] | |||||||||
| Заглавие: | Re: Проблем с таймер | |||||||||
В ISR таймер 0 имаш твърде много неща. Виж си таймер 1 ISR, няма никакви извиквания на други функции. Където и да ти е проблемът - първо и задължително - първо се опразва таймер 0 ISR. Не може главната програма нищо да не прави while(1); Кой знае как ти се омазват регистри и памет. Т0 се презарежда от ISR, там се вдига някакъв флаг "Ехо, минаха 5 милискунди" и излиза, нищо друго. Главната програма следи този флаг. Като го види вдигнат - нулира флага и изпълнява всичко това което си вкарал в Т0. Отделно обработката ти на бутоните е лоша. Потърси из темите "debounce", оттам може да ти набъбне Т0 ISR, но малко. Според даташийта:
Това означава, че смяната на порт в T1ISR ще сработва с "житер" между 5 и 18 такта, което на 16МХц не би трябвало да е важно. Периодът на импулсите обаче може да се регулира доста добре , трябва малко да се пипне презареждането на Т1 в прекъсването. Но това е твърде далечно . |
||||||||||
| Автор: | ToHu [ Вто Сеп 08, 2015 6:03 pm ] |
| Заглавие: | Re: Проблем с таймер |
Освен всичко написано от колегите, какво означава че мне можеш да изпозлваш хардуерния PWM, точно тоя не го знам колко има, но повето от тия имат поне 4 PWM-а, не може и 4-те да са ти заети. Също така не знам с какво компилираш, но в кейла имаше пак някаква особенност при обслужване на прекъсванията, трябва да погледна но имам спомен че за някои проекти съм изпозлвал мой код за обслужване на прекъсването. Но като цяло с тоя процесор не би следвлао да имаш никакви грижи дори и за софтуерно реализиран PWM. |
|
| Автор: | Dimitar [ Вто Сеп 08, 2015 6:16 pm ] | |||||||||
| Заглавие: | Re: Проблем с таймер | |||||||||
Има - като си оптимизираш кода в прекъсванията и приоритетите им. Генерално правило е всичко, което може да е извън прекъсване. Не може да наблъскаш всичко вътре. И въпреки всичко няма да е идеално - винаги ще има малко грешка. |
||||||||||
| Автор: | bobi13 [ Вто Сеп 08, 2015 6:23 pm ] |
| Заглавие: | Re: Проблем с таймер |
Тъй като ползвам само вътрешния осцилатор, немога да го накарам да работи на толкова ниска честота променям честотата от 1-30Хц импулса - 1мс-30мс |
|
| Автор: | stefan63 [ Вто Сеп 08, 2015 6:24 pm ] |
| Заглавие: | Re: Проблем с таймер |
Bobi13, Обработката ти на бутоните е твърде разхвърляна и сложна, трудно е да се ориентирам. Но предполагам ,че имаш проблеми и с бутоните. Бих те посъветвал да оставиш Т1 за момента , направи си бутоните и дисплея, Т0 - минималистично. Т1 както си го замислил- може би е добре, може и да не е - не съм наясно какво точно правиш. Остави го за края, наистина не е нещо особено - проблемите ти не идват оттам. |
|
| Автор: | bobi13 [ Вто Сеп 08, 2015 6:31 pm ] |
| Заглавие: | Re: Проблем с таймер |
Целта на Т0 е да следя бутоните през 5мс и ако има натиснат да направи проверка чрез флагове, дали наистина е натиснат и ако е да го обработи след 15мс (това е за бутони плюс и минус). Другия бутон е за старт/стоп на сигнала който изпращам към изхода. Функцията мастер бутон, следи дали са вдигнати флаговете за натиснат бутон |
|
| Автор: | stefan63 [ Вто Сеп 08, 2015 6:41 pm ] |
| Заглавие: | Re: Проблем с таймер |
Да, но съм си сипал ракийка, и това усложнява още нещата. И да не бях с ракийка, пак не бих се зачел - някои неща не си струват времето, без да се обиждаш. Ако LCDto се управлява коректно, изнеси му функциите - да не си гумбим времето с тях и почвай другите неща. Пишеш - постваш. Все някой ще коментира. След 2 дена можеш да пробваш. |
|
| Автор: | stefan63 [ Вто Сеп 08, 2015 6:42 pm ] |
| Заглавие: | Re: Проблем с таймер |
На всяка функция напиши коментар на български - какво трябва да прави. |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|