Виж темите без отговор | Виж активните теми
Дата и час: Пет Апр 19, 2024 4:09 am
Zilog - Z8 Encore! F083A Series
Автор |
Съобщение |
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Zilog - Z8 Encore! F083A Series
Здравейте ! Бих искал да помоля за помощ, относно начините за измерване на период (честота) на правоъгълен входен сигнал с помощта на таймер. Таймерите в Z8F083A имат три режими на прехващане – режим „прехващане/сравнение”, режим ”прехващане с рестартиране” и класически режим „прехващане”. До колкото разбирам, при capture/compare - таймерът започва да брои едва след като на изводът постъпи активен фронт и при постъпване на следващия активен фронт => прехващане, докато при capture/restart - таймерът започва да брои веднага след като е разрешен и разликата е, че още първият активен фронт на сигнала ще предизвика прекъсване, но изчислената стойност няма да бъде вярна, тъй като все още нямаме изтекъл цял период. Така, имам 2 въпроса: И вторият ми въпрос е свързан със capture/compare: Дали кодът по-долу е правилен, а той трябва да игнорира първото прекъсване по нарастващия фронт на таймера. Прилагам само interrupt-а, тъй като изменението на кодът би следвало да е само тук, а не и в основната програма. Всъщност имам и 3-ти въпрос, дали трябва да получа една и съща честота при capture/compare и capture/restart. Благодаря !
|
Пон Ное 19, 2018 4:45 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
И в двата режима (CAPTURE и CAPTURE RESTART) таймера започва да брои след запис в контролния регистър. И в двата режима трябва да изчакаш минимум две кепчър събития за да измериш времето между тях. Разликата между двата режима е само в рестартирането при кепчър събитие при CAPTURE RESTART режима. В определени случаи това ще ти спестява операцията по изваждане на двете "прихванати" таймщампи.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Вто Ное 20, 2018 3:33 am |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Благодаря ! Аз като цяло съм прочел документацията и имам представа как работят режимите, но въпросите ми са малко по-различни от това, кой режим, как работи и т.н.
|
Вто Ное 20, 2018 2:51 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
Дааа, пропуснал съм CAPTURE/COMPARE режима. Но като гледам не ти помага кой знае колко. Ако нулираш j при старт на програмата, в прекъсването просто го установявай в '1'. Това ще ти е флаг че си получил поне едно прехващане. Съответно при влизане в прекъсване от прехващане проверяваш дали (0 != j) и само тогава изчисляваш периода. Но проверката не я влагай в блока от проверката за препълване. Например така: Но този код има няколко други проблема. 1. Възможно е основната нишка да бъде прекъсната точно в момента на "ползване" на променливата Т и да се случи така че за момент да ползва няколко байта от старата стойност и няколко байта от новата. С други думи трябва да защитиш в основната нишка прочитането на Т за да осигуриш atomic операция. 2. Това четене на T0RH и T0RL в прекъсването боде очите. Ако не променяш тази стойност и ако е известна "on build time" защо не я дефинираш като константа? Още повече може да си избереш по-удобна стойност, която да оптимизира умножението. 3. Това процесорче има ли инструкция за умножение? Но дори и да има, умножението в прекъсване може да замениш с по-прости операции. 4. Бих ти препоръчал COMPARE режима, но тогава нищо няма да остане от тръпката да използваш решение до което си стигнал сам. Кодът би трябвало да работи и в COMPARE/RESTART но вътъка ми стига до тук
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Вто Ное 20, 2018 11:57 pm |
|
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 1:21 am Мнения: 10610 Местоположение: София
|
Re: Zilog - Z8 Encore! F083A Series
Тая част определено е интересна, и би било полезно да се спомене какви са "добрите практики" за избягване на проблема.
|
Сря Ное 21, 2018 4:06 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
Добрите практики изискват отделна тема. В тази тема за да се използват "добрите практики" ще трябва да се пренапише кода и то не само обработчика на прекъсването но и останалата част, която в случая излиза извън темата. С така написания код и с този подход, две от възможните решения са:
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Ное 21, 2018 8:40 pm |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Много ти благодаря за съветите и кодът (интелигентно написан, не като моя - лишен от всякаква мисъл). Все още се уча (сам) и ми е доста трудно. А и със сигурност не искам да оставя някой с впечатление, че този код съм го написал аз. Чета една книга и се опитвам да разбера идеята, да правя упражненията и т.н. Относно проблемите, които спомена: 1. Въобще си нямам идея за какво говориш (atomic операция). До колко прочетох, това се отнася за всяко нещо, което се изпълнява без прекъсване. Ако е възможно, както спомена itso.t да ми покажеш какво точно имаш в предвид и "добрите практики". 2 - 3. Имаш в предвид - Това : Tov = (((uint16)T0RH << | T0RL), да бъде заменено със: const uint16 Tov = FFFF. Съжалявам, ако питам/пиша пълни глупости и елементарни неща
|
Сря Ное 21, 2018 8:47 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
Това не го казвай повече, че пречи на мотивацията на тези които биха ти отговорили. atomic просто означава неделим. Когато 8 битов процесор го натовариш със задачата да обработва 32 битови числа той ще използва последователност от операции(машинни инструкции) и грубо казано ще прочете тази 32 битова променлива на части. По време на изпълнение на отделните операции може да се вмъкне прекъсването от таймера и да обнови стойността на Т. Разбира се това е въпрос на нацелване на точния момент, но се случва доста често Какъв е ефекта? Ето пример със псевдо код Така изпратената 32 битова стойност е: 0х12344321 вместо 0х12345678 или 0х87654321 ако процесора е 32 битов той ще прочете от паметта и зареди в регистър на ядрото цялата 32 битова променлива с една atomic операция(инструкция). И понеже това не се вижда явно когато четеш С код трябва да ползваш "добри практики". 2-3 може да стане и така: но по-добре да се пипне малко кода и да се избегне умножението. например: За 8 битово ядро може и да не е оптимално, но поне илюстрира идеята. А ако е необходимо може да се пипне малко и да се оптимизира и за Z8 Encore, но сорс кода ще стане малко по-нечитаем.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Ное 21, 2018 9:43 pm |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Благодаря за подробното обяснение ! Наистина е адски полезно Финални 2 въпроса: Благодаря !
|
Чет Ное 22, 2018 8:56 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
На този ред се прочита записаната в (PWMH, PWML) стойност и се присвоява на променливата T0_cnt. Прехвърля се от едно място на друго за да може да си готов за следващото прехващане. "Прехващача" на таймера копира (T0H,T0L) в (PWMH, PWML). Т.е. пак прехвърляне от едно място на друго за да имаш стойността на брояча на таймера (T0H,T0L) в момента на прехващането. да, ти си я избираш. Защо F излиза на дисплея със закъснение, когато я увеличиш, е блондински въпрос.
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Чет Ное 22, 2018 11:32 pm |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Благодаря, отново ! Всъщност изречението "Правих си опити и ако я сложа по-голямо число, стойността на F излиза малко със закъснение на дисплея ?" е съобщително, просто съзнателно или не съм сложил въпросителен знак Мисля, че темата може да бъде затворена
|
Съб Ное 24, 2018 12:54 am |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
Рано е да ми благодариш. И... в този форум затворена тема не съм видял. Ако освен мерене на честота с тази програмка решиш да правиш и нещо друго ще ти се наложи да помислиш и за други неща. Погледни промените тук:
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Съб Ное 24, 2018 11:21 am |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Прав си, сега искам да измеря коефициента на запълване, обаче нищо не става. С лог. анализатора, получавам едни стойности, а на дисплея съвсем други...какво се случва не знам. Имам закачен потенциометър, с който намалявам и увеличавам "к", но като пусна анализатора, той ми показва съвсем други стойности. Пак ли трябва да забранявам първото прекъсване на таймера...? Вече имам в предвид, твоите забележки относно atomic-a и константата...да, не съм ги приложил, но не мисля, че на това се дължи проблема ми в момента Many thanks !
|
Съб Ное 24, 2018 10:22 pm |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Zilog - Z8 Encore! F083A Series
В какъв режим е конфигуриран таймера?
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Съб Ное 24, 2018 10:50 pm |
|
|
Metyyy
Ранг: Минаващ
Регистриран на: Съб Ное 22, 2014 6:23 pm Мнения: 48
|
Re: Zilog - Z8 Encore! F083A Series
Capture/compare
|
Съб Ное 24, 2018 11:18 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|