|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:19 pm
| Автор |
Съобщение |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Проблем с таймер
Здравейте, ползвам микроконтролер 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; } }
|
| Вто Сеп 08, 2015 3:18 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с таймер
Много добре си ги получаваш - дължи се на софтуерния ти PWM. Можеш малко да го оптимизираш, но никога няма да е точно колкото искаш. Ако искаш точна честота ползвай хардуерен PWM.
|
| Вто Сеп 08, 2015 3:42 pm |
|
 |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Re: Проблем с таймер
Нямам възможност да го ползвам. Има ли друг начин?
|
| Вто Сеп 08, 2015 4:20 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
Тези 200-300 микросекунди ... -или има друго прекъсване с по-голям приоритет, което твърде често съвпада с прекъсването по таймера -или някъде забраняваш прекъсванията и нещо чакаш. На каква честота работи процесора?
|
| Вто Сеп 08, 2015 4:52 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
Всъщност, покажи цялата програма.
|
| Вто Сеп 08, 2015 4:58 pm |
|
 |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Re: Проблем с таймер
Имам два таймера, този таймер е на 1мс и е с най- висок приоритет. Другият таймер е на 5мс - той ми следи за бутони и други функции. Процесорът е на 16MHz/12
|
| Вто Сеп 08, 2015 4:58 pm |
|
 |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Re: Проблем с таймер
|
| Вто Сеп 08, 2015 4:59 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
В ISR таймер 0 имаш твърде много неща. Виж си таймер 1 ISR, няма никакви извиквания на други функции. Където и да ти е проблемът - първо и задължително - първо се опразва таймер 0 ISR. Не може главната програма нищо да не прави while(1); Кой знае как ти се омазват регистри и памет. Т0 се презарежда от ISR, там се вдига някакъв флаг "Ехо, минаха 5 милискунди" и излиза, нищо друго. Главната програма следи този флаг. Като го види вдигнат - нулира флага и изпълнява всичко това което си вкарал в Т0. Отделно обработката ти на бутоните е лоша. Потърси из темите "debounce", оттам може да ти набъбне Т0 ISR, но малко. Според даташийта: Това означава, че смяната на порт в T1ISR ще сработва с "житер" между 5 и 18 такта, което на 16МХц не би трябвало да е важно. Периодът на импулсите обаче може да се регулира доста добре , трябва малко да се пипне презареждането на Т1 в прекъсването. Но това е твърде далечно .
|
| Вто Сеп 08, 2015 5:38 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: Проблем с таймер
Освен всичко написано от колегите, какво означава че мне можеш да изпозлваш хардуерния PWM, точно тоя не го знам колко има, но повето от тия имат поне 4 PWM-а, не може и 4-те да са ти заети. Също така не знам с какво компилираш, но в кейла имаше пак някаква особенност при обслужване на прекъсванията, трябва да погледна но имам спомен че за някои проекти съм изпозлвал мой код за обслужване на прекъсването. Но като цяло с тоя процесор не би следвлао да имаш никакви грижи дори и за софтуерно реализиран PWM.
|
| Вто Сеп 08, 2015 6:03 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с таймер
Има - като си оптимизираш кода в прекъсванията и приоритетите им. Генерално правило е всичко, което може да е извън прекъсване. Не може да наблъскаш всичко вътре. И въпреки всичко няма да е идеално - винаги ще има малко грешка.
|
| Вто Сеп 08, 2015 6:16 pm |
|
 |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Re: Проблем с таймер
Тъй като ползвам само вътрешния осцилатор, немога да го накарам да работи на толкова ниска честота променям честотата от 1-30Хц импулса - 1мс-30мс
|
| Вто Сеп 08, 2015 6:23 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
Bobi13, Обработката ти на бутоните е твърде разхвърляна и сложна, трудно е да се ориентирам. Но предполагам ,че имаш проблеми и с бутоните. Бих те посъветвал да оставиш Т1 за момента , направи си бутоните и дисплея, Т0 - минималистично. Т1 както си го замислил- може би е добре, може и да не е - не съм наясно какво точно правиш. Остави го за края, наистина не е нещо особено - проблемите ти не идват оттам.
|
| Вто Сеп 08, 2015 6:24 pm |
|
 |
|
bobi13
Ранг: Минаващ
Регистриран на: Сря Авг 07, 2013 1:11 am Мнения: 41
|
 Re: Проблем с таймер
Целта на Т0 е да следя бутоните през 5мс и ако има натиснат да направи проверка чрез флагове, дали наистина е натиснат и ако е да го обработи след 15мс (това е за бутони плюс и минус). Другия бутон е за старт/стоп на сигнала който изпращам към изхода. Функцията мастер бутон, следи дали са вдигнати флаговете за натиснат бутон
|
| Вто Сеп 08, 2015 6:31 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
Да, но съм си сипал ракийка, и това усложнява още нещата. И да не бях с ракийка, пак не бих се зачел - някои неща не си струват времето, без да се обиждаш. Ако LCDto се управлява коректно, изнеси му функциите - да не си гумбим времето с тях и почвай другите неща. Пишеш - постваш. Все някой ще коментира. След 2 дена можеш да пробваш.
|
| Вто Сеп 08, 2015 6:41 pm |
|
 |
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 11:22 pm Мнения: 3084
|
 Re: Проблем с таймер
На всяка функция напиши коментар на български - какво трябва да прави.
|
| Вто Сеп 08, 2015 6:42 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|