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

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Това не се пише така, while като цяло се избягва, камо ли пък в прекъсване. За проверката дали прекъсването е разрешено също вече ти писаха. Пишеш за прекъсване по отрицателен фронт, на RB0 а след това следиш флагове за on change, ако искаш да получаваш прекъсване само по файлинг на RB0, използвах INT, и го сетни за прекъсване по заден фронт : INTEDG на Option_reg, съответно го кнтролиращ с INTE и го поверяваш с INTF флага на INTCON.


Пон Авг 12, 2019 8:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Славчо, ще направя и тази проба.

@Stoimen, сега разбрах, какво имаш в предвид и по всичко личи, че в това е проблемът. :)

Благодаря ви, утре ще пиша, какви съм ги надиплил.


Пон Авг 12, 2019 8:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
гледам че продължаваш в посока с прекъсване по промяна, някъде грижиш ли се да няма други прекъсвания по промяна, може да е всеки друг бит от тоя порт, и докато не го изчистиш тоя флаг ще стои висок. Ако само това ти е хандлера, т.е. нямаш други прекъсвания трий целия регистър, не само флага на PB0,IOCBF имам в предвид.


Пон Авг 12, 2019 9:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
lcr написа:
Славчо, ще направя и тази проба.

@Stoimen, сега разбрах, какво имаш в предвид и по всичко личи, че в това е проблемът. :)

Благодаря ви, утре ще пиша, какви съм ги надиплил.


RB4 стои устойчиво в 0 (според китайския осцилоскоп).

Действително това, което предположи Стоимен, се оказа "ключът от бараката" :D

Преправих ISR така:

Код:
void __interrupt() INTERRUPT_InterruptManager (void)
{
    // interrupt handler
   if(INTCONbits.IOCIE == 1 && INTCONbits.IOCIF == 1)
    {
    TMR1H=0;
    TMR1L=0;
 
    while(RB0==0 &&((TMR1H << 8) | TMR1L)<32760)
    {
    T1CONbits.TMR1ON = 1;
   
    }
   
    T1CONbits.TMR1ON = 0;
    P=((TMR1H << 8) | TMR1L);
   
    TMR1H=0;
    TMR1L=0;
 
    while(RB0 &&((TMR1H << 8) | TMR1L)<32760)
    {
       
      T1CONbits.TMR1ON = 1;
     
    }
   
     T1CONbits.TMR1ON = 0;
     T=((TMR1H << 8) | TMR1L);   
 
    IOCBFbits.IOCBF0 = 0;
     }
}


Всичко е "ток и жица" :D

Само не разбрах, защо реално таймерът се пълни до 32767 (15 бита).

Тони, как могат да се мерят времената на импулсите по този способ и без цикли в ISR?


Благодаря на всички Ви!


Вто Авг 13, 2019 9:49 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Ако искаш да мериш време на импулса RB0 не е най-удачният вход, всъщност на тоя конкретно не знам, ако може да го мапнеш с CCP ама .. то мапване и ПИК не са много за в едно изречение, в смисъл там нема крос бар .. Без CCP има различни варианти, въпросът е каква е продължителността на импулсите и каква е честотата на таймера съответно каква точност гониш. Самото мерене става по същият начин, като в зависимост дали изпозлваш on change или INT имаш два варианта :
1. С он чейндж, проверяваш дали флага на он чейндж се е вдигнал, проверяваш дали тоя пин е източника, т.е. дали се е променил, и в зависимост на какво се е променил нулираш или четеш таймера.
Да речем мериш продължителност на 0-та, понеже говореше за падащ фронт, предполагам това те вълнува. Ако имаш прекъсване от от тази периферия, и този пин е променил стейта си :
1.1. нулираш таймера
1.2. сетваш новият стейт за следваща проверка
1.3. излизаш
След това предполагаме че пак влизаш когато се промени на 1-ца,
1.4 четеш таймера / това ти е продължителността на ниското ниво
1.5 сетваш новият стейт на изхода за следваща проверка
1.6 излизаш

2. INT
Проверил си че прекъсването е от този флаг
2.1 нулираш таймера
2.2. сетваш прекъсването да е по райсинг
2.3 излизаш
идва райсинг пак си вътре. знаеш че е от тоя флаг
2.4 четеш таймера - това е времето на нулата
2.5 сетваш прекъсване по падащ
2.6 излизаш

Ако не променяш по кой фронт да прекъсва ще мериш период. Лично аз бих предпочел този вариант пред on change. on change предполага още една проверка за да занеш че прекъсването е от съответният пин, както и изисква да пазиш състояние за да можеш да определеиш дали от тоя пин е било прекъсването. Също така ако мериш период на сигнал с малко запълване това може и да не работи, защото до де стигнеш да провериш дали този вход е генерирал прекъсване импулса може и да го няма. С INT това не е така, там колкото и да са къси импулсите, стига да са в спецификацията на входа ще имаш ендозначно прекъсване и си сигурен че е от този вход и че е по преден или заден фронт.
Мисля имаше някакви по-нови техни чипове при които всеки вход си имаше флаг за on change, тогава вече нещата са по-бързи, но при теб не е така, а може и да съм го сънувал но така ми се върти в главата.


Вто Авг 13, 2019 10:25 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Благодаря ти, Тони.

Ето и едно добро четиво по въпроса:

http://ww1.microchip.com/downloads/en/a ... 01473a.pdf


Вто Авг 13, 2019 10:52 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Да става като за хоракоито не са го правили, то начини много могат да се измислят, най-чисто е през таймера, но трбява да е свободен и да ти са свободни пиновете, иначе INT е най-добрият следващ вариант според мен, най-бързо влизаш. Отделно не помня вече на пиковете можеше ли таймера да с еманипулира по INT, това също е удобно, ама вече съм ги забравил, и ми е малко каша в главата между силабс и пик функционалности :)


Вто Авг 13, 2019 11:40 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение Re: ядове с вектор на прекъсване
С тоя пик най-лесния способ за мерене на дължина на импулс е чрез гейта на таймер1 - прочети хубаво PDF-а в раздела за таймера. Имаш вариант в който ще ти генерира T1GIF когато имаш измерена стойност в таймера. Мисля че можеше даже да е oneshot. С enhanced пиковете има много варианти.
Това да ползваш IOC е малко умряла работа, въпреки че са малко по добре от едно време - там прекъсването е едно за всички IOC пинове и трябва индивидуално да полваш IOCIFxxx за да знаеш кое точно е предизвикало прекъсването. После RB0 до RB2 избягвам да ги ползвам за IOC щото имат INT0 - INT2 на тях, които са индивидуални за конкретния пин.


Чет Авг 15, 2019 10:55 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Постановката с гейта на брояча я пробвах и действително работи добре. Исках да пробвам и варианта с ISR.

Конкретно в случая правя една индикация (10 сегментен led) на инжекторните времена на ДВГ (абсолютна продължителност в обхвата 2 - 20 ms. или коефициент на запълване).

При тая постановка и двата метода вършат доволно добра работа :)


Чет Авг 15, 2019 11:21 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: ядове с вектор на прекъсване
Чак пък 10 сегмента :)
Ами ако искаш да мериш точно чрез прекъсване :
Трябва да сложиш в ISR на първо място проверката за прекъсване от IOC (ако имаш и други прекъсвания) . Така може да изчислиш колко инструкции/време трябва на контролера да влезе в прекъсването и да нулира таймера.
2 ms. са предостатъчно време да влезеш в прекъсването. При теб кода е на С и малко трудно може да се каже колко са инструкциите. Нека някой да каже. Всъщност може да измериш със някакъв осцилоскоп и да калибрираш. Тук идва и един друг момент, че отчитането на таймера изисква отново влизане в прекъсване, което е напрактика същото време и двете се компенсират.
Става дума, че брояча почва да брои със малко закъснение, но то е същото и с което спира да брои.

Друго което се замислям, хубаво 10 сегмента ама те цифрите сигурно ще играят много последните 2-3, ако мериш всеки импулс. Може би някаво усредняване но то се изключва смисъла от толкова цифри.

_________________
https://github.com/slav4ocom/


Чет Авг 15, 2019 5:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Няма цифри. Това да не е атомен часовник :D
Говоря за стълбица от 10 светодиода.


Чет Авг 15, 2019 5:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: ядове с вектор на прекъсване
Аааа ясно :) Малко грубо идва. При това положение няма да има нужда от калибриране изобщо.

А може да сложиш чакащ мултривибратор К155АГ3 и след него стрелка или нивоиндикатор с 10бр. КТ315. :P

_________________
https://github.com/slav4ocom/


Чет Авг 15, 2019 5:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Е - то да мериш с 4us разделителна способност, пък да визуализираш с 2 ms такава, си е трепане на мухи с чук, ама пусто.... :D

КТ315 са любимите на Ицо. Аз щях да ползвам A277D :D


Чет Авг 15, 2019 7:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 1:21 am
Мнения: 10574
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
slav4o.com написа:
А може да сложиш чакащ мултривибратор К155АГ3 и след него стрелка или нивоиндикатор с 10бр. КТ315. :P

lcr написа:
...КТ315 са любимите на Ицо. Аз щях да ползвам A277D :D

Ехе, буржоата, къде дават така - 10бр. КТ315? По-скромно моля! Ще свършат и няма да останат за мен... :D


Чет Авг 15, 2019 10:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: ядове с вектор на прекъсване
Няма нужда от прекъсване по таймера, стига да ти върши работа това което можеш да настрои- без допълнителното му светване, т.е. само прескалери, постскалери и ако има аутолоад .
Въпросът е че on change прекъсването иска още няколко инструкции за разлика от ext int. Времето за обслужване на прекъсването може да се определи много точно, стига да няма други прекъсвания.


Пет Авг 16, 2019 2:02 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 54 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща

Кой е на линия

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


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

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