Отговори на тема  [ 43 мнения ]  Отиди на страница 1, 2, 3  Следваща
Кратък импулс и pIC 
Автор Съобщение
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Кратък импулс и pIC
Много тъп проблем но вече останах без идеи. Най-общо имам кодеиране, период 1.25 uS импулси под 500 nS са нули, над са 1-ци. В конкретният случай нулите са около 100 nS. Процесора е 12F1571 ако има значение. Първоначално имах идея да изпозлвам таймер 1 и импулс да е гейт на таймера, не става, твърде много код и докато се орпавя с единия идва втори.
След това отидох на полиране, да но трябва да определям къде е фронта, т.е. чакам да стане 1-ца след което отново проверявам дали е 1-ца, ако е пиша 1-ца, да ама не, докато полирам изтървам импулси, 100 ns при 125 nS цикъл не става.
Прекъсване, обаче шибня, точно външното е на еидн пин с PWM3, и точно тоя PWM не се мести, т.е. забравям за външно.
Айде IOC, да ама не, флага на порта е на майка си у ... в 7-ма банка, аз хубаво проверявам глобалния флаг който е в 0-ва, обжаче не чистя ли и този на конкретният вход не става, от тук още инструкции и пак отиваме в началото, не стига време.

Не ми остават много варианти, съмняваме компаратора да се оправи с такива кратки импулси. Гейта на таймер 1 има прекъсване, стандартно е по задния фронт на гейт сигнала, но ако го инвертирам, т.е. му сменя поляриетета ще ми дойде по предния фронт на моя сигнал, да но блоковата схема е твърде блокова, не е ясно дали и къде се синхронизира по някой системен клок, и колко ще се измести....

Та ако някой има идея да пише, не остана периферия ... ако имаше някой SPI или подобно можеше нещо да се измисли сигурно ама няма ...


Съб Яну 14, 2017 11:34 pm
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
.... с гейта на таймера се хваща импулса, хубавото е че флага му е в първа банка, сега да видим обаче как е във времето :)


Съб Яну 14, 2017 11:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: Кратък импулс и pIC
Ами това, което на мен ми идва е да използваш някакъв чакащ външен мултивибратор с ресет. Подаваш сигнал за 1-ца и нулираш за 0-ла или въобще не подаваш. Така задаването ще ти е в рамките на сетването на 1 пин и цялото ти време ще е за сметки. Не знам дали можеш да добавяш периферия...

_________________
www.elkran.com


Съб Яну 14, 2017 11:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Кратък импулс и pIC
Идеята на stoyanoff е добра според мен.
Има и вариант с някакво усредняване на импулсите (интегрираща верига) и после с компаратора да ги мериш. Другия вариант на входа на брояча да гейтваш някаква висока честота например 32 MHz и да броиш импулсите. Тей както гледам може на брояча на таймера директно да се подаде Fosc което си е 32 MHz. Ако пишеш на асемблер след една инструкция трябва да си натрупал поне 4 импулса в брояча за над 125 ns или 3 импулса за 93.75ns което ти е 0лата. 1.25 uS са 10 инструкции, не стигат ли да се Handlе това ?

_________________
https://github.com/slav4ocom/


Нед Яну 15, 2017 2:07 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
Тригер искаш да кажеш предполагам, но освен да занам кога е дошъл импуса трябва да знам и колко е дълъг, т.е. само фронт не върши работа.
Като че ли импулса се засича стабилно от прекъсването на гейта на брояча, чийто флаг е в банка 0 и не ми хаби инструкции. Все пак се върнах на идеята с брояча, написано на асемблер кода всъщност е доста оптимален, в основни линии пробелма е решен. Тъй като се върнах на това да изпозлвам гейта и самият брояч за да смятам продължителността гейта си работи както е първоначално, инкрементва брояча при високо ниво, получавам прекъсване по падащ фронт на гейта.
Това което изниква е че трябва почти веднага хем да изтриеш прекъсването за да можеш да получиш следващото, при 1-ца до следващо можеш да имаш 300 нс или около 3 цикъла и хем да провериш стойността на таймера колко се е инкрементнал за да сметнеш дали е 0 или 1. Тъйкато няма време за сметки гледам да наместя клока на таймера така че да мина с битова проверка, в случая на 3-ти ли 4-ти бит. Да обаче самото полиране на флага на прекъсването яде време, в най-лошия случай 4 инструкции докато го хванеш имаш btfss което е две и goto още две. Горе долу за това време може да е дошъл следващият преден фронт.
В моента работи но някъде застъпва, изтървам май първия бит .. продължавам да го мъча :)

п.с. Какво усредняване на импулсите, какво да ги правя да ги усреднявам, не става, външен тригер също не помага, освен аз ако не ви схващам идеята. Това за брояча е това което ми беше първоначланата идея, но едно че пробвах да го пиша на С, второ явно е имало някакво дърво със сетването на таймета, и трето с цикъл не става, няма време за цикли, трябва да се развие линейно за да има време за всичко.


Нед Яну 15, 2017 2:17 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Кратък импулс и pIC
Добре де щом нулите са около 100nS, защо да чакаш до 500nS за да сметнеш че е 1ца ? Според мен може да го направиш ако е повече от 125 nS да бъде единица. Демек циклиш / проверяваш (полваш) дали не е станало високо ниво. След това една инструкция (125 ns). Ако още е високо нивото на входа ->1ца. Алгоритъма ще е с точност 125 ns, това е времето на 1 инструкция (при 32MHz), което мисля, че ще е достатъчно.

_________________
https://github.com/slav4ocom/


Нед Яну 15, 2017 2:38 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
Хмм нещо времето не стига .....
G0: btfss TMR1GIF
goto G0
bcf TMR1GIF
movf TMR1L,W
clrf TMR1L
btfsc WREG,3
bsf G,0

Ето част от развития цикъл, това се повтаря за всички 8 бита, проблема е първата проверка, ако се направи точно преди да се вдигне флага, отиват много инструкции, докато изчистя флага са май 6 със самото чистене, което дори и в не толкова гранични времена е много. Или аз не ги броя както трябва или са си толкова, BTSFSS това е една да провери, и ако не е сетнат отива на GOTO, самото то са две инструкции, станаха 3 докато пак се върне на BTFSS, тук имаме още една за самата инструкция,станаха 4, един NOP ако условието е изпълнено и се скипне GOTO, станаха 5 и самата инструкция която чисти флага станаха 6 .... и дори да няма никаква вътрешна синхронизация само до тук са 6х125 или 750 ns ... следващият фронт вече е дошъл в някои от случаите и го изтървам.

Та някакви идеи :)


Нед Яну 15, 2017 2:43 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
п.с.
Не чакам да стане 500, просто самото циклене, полирането на флага отнема твърде много време и в определени случаи се изтърва следващият фронт. Както писах по-горе, за да получа следващото прекъсване трябва да изчистя флага, което е третатат инструкция.


Нед Яну 15, 2017 2:45 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
п.с.2 .. пиша инструкции имам в предвид цикли .... вече спя


Нед Яну 15, 2017 2:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Кратък импулс и pIC
Всъщност остави таймера. Пусни процесора на 32MHz, направо зацикли докато дойде високо ниво на входа. Веднага след това пак провери нивото на входа с други инструкции и ще получиш дали е 1 или 0.

_________________
https://github.com/slav4ocom/


Нед Яну 15, 2017 3:15 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
Нали това е направено, но не можеш да проверяваш високо ниво, то е 100 ns инструкцията е 125 ns, гарантирано го изтърваш. Дори и 150 nS да е импулса, отново шанса да го изтървеш е монго голям, да не кажа че изобщо с полиране при 125 nS инструкция шанса да хванеш нещо под 400-500 нс с полиране е малък, просто защото като полираш слд това имаш гото обранто, което само то е 2 цикъла, т.е. само там имаш 250 ns, ако импулса се появи дори след края на първата проверка трябва да е не по-малък от 300 nS за да го хванеш надеждно.
Това се решава с прексъване, проблема е че това прекъсване което ми върши работа не мога да го използвам, INT е на същият пина на който в PWM3, а той не може да се премести.
Трябва друг тригер който да хване фронта, имаш прекъсване по промяна, но регистрите са заврени в 7-ма банка, докато смениш банките отива твърде много време.
Регистър който е в банка 0, е прекъсването по гейта на таймер 1. Да но там прекъсването е по задния фронт на гейт импулса, който съответства или на задният фронт на импулса който меря, или на предни фронт на втория ми импулс.
Т.е ако изпозлвам този флаг инвертиран хващам началото но на вторият импулс, първия го губя. Тъй като данните ми се повтарят, вариант е да изчакам 23 импулса и да започна от следващата поредица.
Друг вариант е да изпозлвам флага по прекъсване по заден фронт на първия импулс. Ясно е че тогава е късно да меря колко му е импулса, но това става лесно със самият таймер.
Както обаче по-горе писах, зора е че докато полирам флага мога да изгубя достатъчно време за да не мога да го ресетна на време за следващият фронт.
Прекъсвания дори и без свапване и запазване не са вариант, самото рпекъсване яде много инструкции.
Ще разгледам какво друго има като периферия което да генерира прекъсване, може би сетнат брояч .. зависи обаче дали не синхронизира, ако не самия брояч то прекъсването му ...
Та до тук съм с изчерпани идеи.
Или ще му сложа нещо външно, но хич не ми се иска, например чакащ мултивибратор който да ми генерира импулс 300 ns, така полирайки него може и да успея да направя проверката в средата, но то отново идвамомента че не трябва да е полиране а прекъсване и пак завъртаме същият кръг :)

Имаше една тема за малки логики, цялото нещо е еидн 24 битов преместващ регистър подходящо клокнат .... може да разкарам процесора и да сложа малка логика, схемното изпълнение е супер елементарно.


Нед Яну 15, 2017 3:34 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Кратък импулс и pIC
Щом нулата е 100 ns, колко е единицата?


Нед Яну 15, 2017 11:15 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
В случая 590 ns. Това са времената от моята версия на управлението. По спецификация уж 400 нс е 0 и 800 нс е 1 като има +/-150 нс толеранс. Да обаче всеки китаец го е направил както му дойде клонинга, и за да работи със всички трябват хитрости. Реално 0 може да е произволно къса, затова съм я направил 100 нс, а единицата ми е 600, тя пък може да е произволно дълга, стига да имаш фронт при следващият бит.
Колко обаче е нулата няма значение, така или иначе с полиране директно не може да се хване.
Шанса е директно прекъсване за да работя по преден фронт и тогава ще има време да изчистя флага, инструкциите стават с две по-малко и всичко заспива. Само дето нямам прекъсване. Има един друг с 4 PWM и там мога да използвам 4-ти а пина на 3-ти да остане прекъсване, да ама е 200ns на инструкция.
Гледам че има някаква програмируема клетка бавния, но на пръв поглед няма да свърши работа. Щеше да е идеална ако имаше връзка с поне един таймер, т.е. да може да го пуска за да реалозирам нужното закъснение, да ама няма. Ще и ппгледна закъсненията, дали не мога да събера 400 нс но не ми се вярва да е толкова бавна.


Нед Яну 15, 2017 11:45 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Кратък импулс и pIC
Хм, при тези толеранси ми се струва, че или трябва да се смени подхода, или да се използва по-бърз проц...


Нед Яну 15, 2017 12:00 pm
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Кратък импулс и pIC
Ами сигурно ще го направя със силабс, има един малък който е до 25 MIPS и е SOIC, не е и много скъп, иначе с някой от по големите които са 48 или 50 ще стане със сигурност, но мисля и с малкия ще го докарам. Ще видя сега само с тази логическа клетка какво мога да измисля, върти ми се нещо, все ми е какъв е процесора, но ми се иска да го има на дип, това ще е нещо каот адон към съществуващи неща, да преконвертира от адресируеми към стандартни RGB светодиоди, и сигурно ще го убиват често, хубаво е да може да се сменя чипчето, не че цялото нещо ще е кой знае колко скъпо но .. ако не е дип да е на цокъл поне SOIC, имаме клиенти по разните азбутани държави които искат да си ремонтират нещата, ако не беше това вече да бях забучил онова малкото FPGA от другата тема, ама само в BGA го има.


Нед Яну 15, 2017 12:21 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 43 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни