|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:13 pm
PIC 16F Смяна между светлинни ефекти с бутон
| Автор |
Съобщение |
|
Nyakоi
Ранг: Минаващ
Регистриран на: Вто Дек 20, 2016 7:39 pm Мнения: 32 Местоположение: Русе
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Стигнах до тук. Ефекта работи по същия начин, само дето е написан 100 пъти по-просто. Огромни благодарности, ToHu! Продължавам напред с таймерите. П.п. delay-я е само за теста, ще го разкарам в най-скоро време 
_________________ Никола Богданов 16 години
|
| Вто Яну 10, 2017 6:56 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
само трябва да махнеш тоя дилей и да го направиш с таймер защото в момента всичко допълнително което правиш ще променя времето за изпълнение на ефектите коеот ще има визуално изражение, а реално над 99.99% от времето не правиш нищо, реално имаш 8 команди които са да речем 2-3 us не знам на колко си го наклочил, и 100 mS стоиш в този дилей, т.е. от една секунда извършваш работа само в някакви 10 uS през цялото останало време си заключен там заради дилея.
|
| Вто Яну 10, 2017 7:34 pm |
|
 |
|
Nyakоi
Ранг: Минаващ
Регистриран на: Вто Дек 20, 2016 7:39 pm Мнения: 32 Местоположение: Русе
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Дилея изчезна. Занимавам се с таймера, но пак греда. Тук е показан регистъра (същия като на 628A, може би един и същ за серия 16F), но въпреки това не зацепвам съвсем как трябва да станат нещата. А и какво ще рече: PS1=1; // are set to “111” ? Ако правилно се досещам, когато е PS1 е 0b000, прескалера е 1:2, когато е 0b001 е 1:4 и така до 0b111 - 1:256? А как стоят нещата със PS2 тогава? Разбрах само, че са 2 прескалерите и на мен ми трябва единия, но кой? Много станаха въпросите. Но като цяло взе да ми изсветлява полека.
_________________ Никола Богданов 16 години
|
| Вто Яну 10, 2017 8:09 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Майкрочип поне имат що годе читава документация, съветвам те за какъвто и да е процесора да гледаш блок схемите на перифериите, първо там и чак след това чети описанието на регистрите, един поглед на блок схемата казва много повече от 2 страници описания писани от индийци, особенно ако човек не е много добре с английския и не може да се сети какво са искали да напишат творците. Ако ще изпозлваш таймер 0, той дели общ прескалер с WDT, не разбрах на каква честота си но да речем че си на 8 Mhz и искаш да получиш интервал от 1 ms , т.е. на всяка една мс да имаш препълване . Периода на препълване ти е (4*(256-TM0)*PRESC)/Fosc където TM0 е стойността на таймера в случай че презареждаш, а PRESC ти е прескалера, ако го сметнеш без да презареждаш таймер 0 ще намериш най-малкия прескалер който ти върши работа, в случая 8. Ако си сметнеш периода на препълване ще получиш 1024 uS за да стане точно 1000 ще трябва да добавяш към таймер 0, 4 в прекъсването. Това го сетваш така : 1. Прескалера отива на ТМР0. PSA = 0 2. Прескалера го сетваш да дели на 8 : OPTION&=0xF8; OPTION|=0x02; 3. Избираш вътрешен сорс за клока TOCS = 0
Горе долу това е ... PS0-2 вместо побитово ги промених с маска, може и побитово да ги мениш, а ако сетваш целия OPTION на едно място може да сетнеш всичко с една команда.
п.с. ... сега като се замислям той май делеше и на две тоя таймер имаше нещо, т.е. това горе ще ти даде интервал 500 uS, трябва да го сложиш на прескалер 16
|
| Вто Яну 10, 2017 8:53 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
п.с. а това добавяне на 4 към таймер 0 се прави в прекъсването, след като си влязъл TMR0+=4;
TMR0 е съвсем условно де, не знам как са дефинирани в твоят компилатор.
п.с. 2 по-добра идея е да изпозлваш таймер 1, защото ползвайки таймер 2 WDT остава без прескалер, т.е. трбява да го чистиш на всеки 18 ms
|
| Вто Яну 10, 2017 8:54 pm |
|
 |
|
Nyakоi
Ранг: Минаващ
Регистриран на: Вто Дек 20, 2016 7:39 pm Мнения: 32 Местоположение: Русе
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Нищо не ми пречи да използвам таймер 2, ще послушам съвета. Работя с вградения осцилатор, защото съм се насочил към SMD, а забелязах, че няма голям избор на SMD кварцове. Само един въпрос, ако watchdog таймерът е disabled, важи ли пак същото? Досега не съм го оставял enabled, защото по едно време ми правеше проблеми с гадния JDM сериен програматор. Мисля крайно време е да си купя/направя USB такъв. Иначе схванах как стоят нещата с таймера, когато ми се отвори време ще поекспериментирам с него, и ще продължа работа по проектчето. Иначе с английския се оправям добре, поне достатъчно, за да усетя как индиеца на моменти не знае какво прави. В повечето случай малка неточност разваля целия пример. Иначе пък са ефектни като обясняват Благодаря отново!
_________________ Никола Богданов 16 години
|
| Вто Яну 10, 2017 9:09 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
WDT може и да не е включен, зависи дали искаш кучето да те реетва ако случайно се успиш. Ако не е активиран прескалера не му е нужен. По горе вместо исках да напиша таймер 1, то всеки таймер ти върши работа, но не съм сигурен 2 дали има достатъчно голям прескалер, не помня вече, но той пък трябва да има пост скалер ...
|
| Вто Яну 10, 2017 9:21 pm |
|
 |
|
Nyakоi
Ранг: Минаващ
Регистриран на: Вто Дек 20, 2016 7:39 pm Мнения: 32 Местоположение: Русе
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Подкарах таймера, доста трябваше да си поиграя, докато се сетя, че осцилатора ми е 4 мегахерца, следователно прескалера трябва да бъде 1:32, а не 1:16. Но както и да е, разбрах защо е така. В момента съм го настроил да цъка на ~1 секунда, предполагам не е нужно да е точно, или греша? Кода за сега изглежда ето така: Единственото неясно е защо трябва да има знак "&" преди равното и какво означава той освен логическо "и"? И защо само на реда със звездичката ми направи проблем (OPTION_REG &= 0xFC), след като и другите команди се отнасят до същия регистър?
_________________ Никола Богданов 16 години
|
| Вто Яну 10, 2017 11:25 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Ако осцилатора е на 4 Мхз прескалера трябва да е по-малък не по-голям, но ако целта е да цъка на 1 сек е друго. Като правиш &FC трябва да си сигурен че бит 3 ти е 1-ца, ако не е няма и да стане. & е функция И, т.е. там където в маската ти има 0-ла дестинейшъна ще стане нула, но обратното не е задължително, ако искаш нещо със сигурност да стане 1 изпозлваш ИЛИ операция |= . 1 секунда не е ли много дълго време, мен идеята ми беше да ти цъка на 1 ms, така че да можеш да правиш произволни интервали от време. п.с. и ако сикаш интервали по големи от 255 трябва да си декларираш променливата като int16 или каквото е там за този компилатор 16 битова променлива, може разбира се и long, но не виждам къде ще ти трябва такъв интервал а са излишни сметки и памет. п.с.2 short е по принцип 16 битово число, ама някои компилатори не са баш анси  и не забравяй да го правиш unsigned
|
| Вто Яну 10, 2017 11:35 pm |
|
 |
|
E1
Ранг: Почетен член
Регистриран на: Нед Юли 22, 2007 8:57 pm Мнения: 607 Местоположение: Белград
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Тони, в MikroC short е 8-битово число. Също така, ако не се укаже signed, компилаторът го приема за unsigned по подразбиране и не е нужно да се пише изрично. Двубайтов в МикроС е int(пак по подразбиране е unsigned). Nyakоi, вместо да се мъчиш, можеш да си изтеглиш Timer Calculator за МикроС на Микроелектроника, който директно ти дава кода за сетване на регистрите и код на interrupt. Само въвеждаш типа контролер(работи и с различни от PIC), таймера, времето и осцилатора. Примерен код за PIC16F..., генериран от Timer Calculator, с прекъсване 10ms(9.984 ms):
|
| Сря Яну 11, 2017 12:21 am |
|
 |
|
Nyakоi
Ранг: Минаващ
Регистриран на: Вто Дек 20, 2016 7:39 pm Мнения: 32 Местоположение: Русе
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Благодаря ти! Наистина много готина програмка, свърших си работата  . Не че и по формулата не стана, но периода не е точно число, а трудно се коригира, опитах се.
_________________ Никола Богданов 16 години
|
| Сря Яну 11, 2017 12:47 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Става точно но почти никога само с прескалери, обикновенно трябва да зареждаш, таймер 0 го зареждаш него, таймер 2 има компаратор и ауторелод май беше, таймер 1 не помня но и той май имаше някакъв режим, последните 10-на години пикове виждам от дъжд на вятър, то не че другите много повече но ако правя нещо в повечето случаи са силабси, та не помня вече съвсем точно.
|
| Сря Яну 11, 2017 1:13 am |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Избягвай го тоя ТМР0, при възможност ползвай ТМР2 - само го пускаш на инит, после дебнеш и чистиш флага (TMR2IF); даже прекъсване не ти трябва.
|
| Сря Яну 11, 2017 12:32 pm |
|
 |
|
E1
Ранг: Почетен член
Регистриран на: Нед Юли 22, 2007 8:57 pm Мнения: 607 Местоположение: Белград
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
В калкулатора можеш да избереш всеки от наличните таймери и получаваш всички настройки и прекъсването. Пести доста ровене по pdf-а.
|
| Сря Яну 11, 2017 1:17 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30685 Местоположение: София
|
 Re: PIC 16F Смяна между светлинни ефекти с бутон
Абе и на 0 нищо му няма, а може и по същия начин само да следиш флага стига да не са много на често прекъсванията и да изтърваш момента. Нали за това са сложени, аз го избягвам заради wdt прескалера не за друго.
|
| Сря Яну 11, 2017 2:09 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|