|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:45 am
Ротационен енкодер. Как да чета движението му?
| Автор |
Съобщение |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Ами те почти всички възможни начини се изредиха, ама да ти кажа аз как съм го ползвал този енкодер : на портБ с прекъсване (портБ.0 или 1) само на единия изход. При прекъсване го дебоунсвам малко и после сменям фронта на прекъсването. Проверявам в какво състояние е другия пин и определям и посоката и това е. При следващото цъкване пак се генерира прекъсване. Дебоунсването в прекъсване е малко кьорава работа ама на мен ми вършеше работа.
|
| Пет Авг 24, 2007 5:39 pm |
|
 |
|
steve
Ранг: Минаващ
Регистриран на: Пон Авг 20, 2007 11:13 am Мнения: 13 Местоположение: Варна, България
|
В момента на платката имам вързан енкодера и на същите изводи и бутони. Така мога да пробвам и с двете. Пишейки леко тъп код за бутоните установих, че и енкодера работи. Не както би трябвало да бъде кода, но все пак е напредък. Главната програма проверява 3 бутона, 2 от които са вързани за енкодера.
Ето и програмката:
if (!PORTBbits.RB6)
{
if (curr_val<30)
{
curr_val += 1;
}
move_cursor(0x00);
itoa(curr_val,curr_val_txt);
write_rom_str("> ");
if (curr_val<10)
{
write_char(' ');
}
write_ram_str(curr_val_txt);
write_rom_str(".0");
write_char(0x00);
write_char('C');
while (!PORTBbits.RB6) // wait for button release
delay_ms(50);
}
if (!PORTBbits.RB7)
{
if (curr_val>0)
{
curr_val -= 1;
}
move_cursor(0x00);
itoa(curr_val,curr_val_txt);
write_rom_str("> ");
if (curr_val<10)
{
write_char(' ');
}
write_ram_str(curr_val_txt);
write_rom_str(".0");
write_char(0x00);
write_char('C');
while (!PORTBbits.RB7) // wait for button release
delay_ms(50);
}
Правят се и други работи (пише се това : > 12.0°C, като стойността в ляво от точката се мени при натискане на бутоните), но идеята е ясна. Въпросът е, че тези паузи заемат доста време и накрая може да се окаже, че нещата започват да стават бавно. Тоест трябва да помисля за прекъсвания на всяка цена и то с приоритет, че да не стават още проблеми.
_________________ "Има само две безкрайни неща, Вселената и човешката глупост. За първото не съм съвсем сигурен."
Алберт Айнщайн
|
| Пет Авг 24, 2007 5:54 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Абе човек - ти ме шашкаш!!!
При наличие на такъв процесор /за 18-ката говоря/ се занимаваш да правиш часовника с друг и т.н. Че той с лекота може да се справи с всичкото това дето казваш.
Значи часовник за реално време си правиш с пика - примерно с прекъсване на тимер 0 /с висок приоритет за да не се може нещо да му пречи/ и софтуерен брояч;
Всички останали времеви интервали които ти трябват - взимаш софтуерно от това прекъсване.
В него можеш да си четеш и енкодера - съвсем спокойно.
Серийния порт си го ползвай за каквото искаш - ама иначе ако само трябва да пращаш данни - направи си софтуерен порт - че пращането се прави лесно а хардуерния ти остава за по-сериозни задачи.
Абе изобщо - една 18-ка може да се справи с всичко това.
За пример!
Аз съм си направил контролер на парното и бойлера, с часовник, клавиатура и какво ли още не - и то с 16Ф684 - че тогава нямах 18-ки. Следи температурата в 4 точки, управлява помпа, клапани, захранване на бойлера и още един билюк работи... И при мене подсветката на дисплея намалява плавно като не го закачаш, ама не гасне напълно, че да можеш да погледнеш и вечер какви са температурите по дисплея. Пика е с отделно захранване с акомулаторче, така че и часа помни ако спре тока, че даже и в последната версия пише лог файл в ММЦ карта с малко компромиси де щото не му стига рама. Настройките се помнят е ЕЕПРОМ-а на чипа. Всичкото това с една келава 16ка на около 4 мХз, та затова хващай и чети, че да ползваш хардуера по-пълноценно.
|
| Пет Авг 24, 2007 7:41 pm |
|
 |
|
Yanek
Ранг: Новодошъл
Регистриран на: Пет Юни 29, 2007 10:59 pm Мнения: 113
|
Наистина не виждам какъв е проблема да имаш прекъсвания от енкодера. Да помислим: ако не използваш прекъсване, означава, че за да имаш 100% гаранция, че няма да изпуснеш импулс трябва да кибичиш постоянно на входовете от енкодера. Това води до почти 100% разход на времето за работа на процесора за почти нулева работа (точните пропорции можеш да си ги сметнеш). В това няма нищо лошо, ако няма друго за вършене и ПИК-а трябва да пие кафе. Обаче погледнато от професионална гледна точка, не е особено коректно, и дори леко обидно, освен ако няма друг начин. Обаче има и то доста по-удачен. Например с прекъсване по порт В при промяна на състоянията на някой от пиновете 4:7. В нормалния случай инкремент или декремент на 3 байтов брояч ще ти отнеме около 10-12 инструкции. Другото важно нещо е филтъра. В случая с енкодера ще ти е трудно да реализираш добър софтуерен. Ако това устройство наистина отговаря на името си, то производителя трябва да се е погрижил за относително добрата форма на импулсите, ако не е - ще ти се наложи да помислиш за хардуерен. Ето малко код на асемблер по начина по който съм го реализирал, макар не точно с този тип датчик. А и В са на ПОРТ В 5 и 6 (или обратно). На 7 имам бутон за нулиране на брояча, но орязвам кода за да не се пречка.
 |  |  |  | Код: movf PORTB,w movwf Temp ................... .................. .................. rlncf Temp,w xorwf Temp_old,w movff Temp,Temp_old btfsc WREG,6 bra Dec_Counter
incfsz counterl,f return incfsz counterh,f return incf counteru,f return Dec_Counter decf counterl,f incfsz counterl,w return decf counterh,f incfsz counterh,w return decf counteru,f return
|  |  |  |  |
Така орязан кода може малко да се оптимизира, но ви го поствам без корекции. На мястото на точките разбира се е премахнатия код.
|
| Пет Авг 24, 2007 10:05 pm |
|
 |
|
steve
Ранг: Минаващ
Регистриран на: Пон Авг 20, 2007 11:13 am Мнения: 13 Местоположение: Варна, България
|
И на мен ми е кеф да си играя с тия чипове и да чета и да се уча, но точно в момента се мъча просто да сътворя нещо дето работи, защото си имам доста по-важна работа, а именно дипломна  . След още 2 седмици се надявам да съм завършил и да ми остава малко повече време да уча PIC-овете. До тогава само ще си играя да подкарам това и онова по някакъв начин, защото до сега съм си играл да пускам светодиодчета и да чета бутони с процесори от 12-та и 16-та серия. Сътворил съм цяло едно работещо нещо (едни светлинни ефекти за лъскав вентилатор) и то на Асемблер. С програмиране на С се занимавам общо взето откакто почнах да си правя дипломната работа. И за РС не програмирам на С. Там ползвам Delphi. В началото като си взех компютър почнах на Pascal, а преди това съм си играл с Basic. Просто не харесвам тоя език, но за PIC-ове нямам голям избор. Пък и никога не е късно човек да научи нещо ново нали
П.П.
Ако някой има интерес към дипломната ми работа може да погледне ТУК. През повечето време работи непрекъснато схемата и ще продължи така поне до 5-ти септември, когато ми е защитата.
_________________ "Има само две безкрайни неща, Вселената и човешката глупост. За първото не съм съвсем сигурен."
Алберт Айнщайн
|
| Съб Авг 25, 2007 1:41 pm |
|
 |
|
Yanek
Ранг: Новодошъл
Регистриран на: Пет Юни 29, 2007 10:59 pm Мнения: 113
|
Нещо ти е счупен линка или при мен само не се отваря.
Освен ако това не е адреса на личното ти ПК, а ти си го изключил или нямаш нет. 
|
| Съб Авг 25, 2007 5:02 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Това използване на енкодера ми се струва излишно.Сложи си 2 бутона UP/DOWN.Реално погледнато е същата работа като енкодера - на енкодера му трябва един вход за такт и един за посока на такта,а в някой случаи и външни схеми.Вържи бутоните към прекъсване и си готов.Това да натискаш бутон,че след това да въртиш енкодера,.... абе не си усложнявай живота.
P.S. На изкуственно усложняване на схемаат не се гледа с добро око на дипломна защита - важното е оптималния инженерен поход.
|
| Съб Авг 25, 2007 5:16 pm |
|
 |
|
steve
Ранг: Минаващ
Регистриран на: Пон Авг 20, 2007 11:13 am Мнения: 13 Местоположение: Варна, България
|
Има и бутони вързани, но това е за експерименти. Просто го имам енкодера и искам да го ползвам, а и изглежда доста по-добре и е по-удобен за ползване. В крайния вариант ще има само енкодер и никакви бутони. Той има вграден бутон. Друго не ми трябва. И освен това този проект няма много общо с дипломната освен датчика. Дипломната е на тема "Дистанционно измерване на температура посредством Ethernet" като е указан датчик TCN75. Терморегулатора си е мой проект. Целта е да заменя един друг регулатор от подово отопление, който ползвам за радиатора в стаята. Абе дълга и широка стана с тоя регулатор ама нали трябва някъде да се упражнявам.
Сайта от дипломната не винаги бачка заради нета в университета. И при мен не се показва понякога. Не е свързано с комп. Всичко е на една платка (PICDEM.net 2 на Microchip). Направо към LAN кабела и толкова. Работи от време на време. Не съм слагал аз нет в кабинета и нищо не мога да направя повече, за да работи. Иначе е яко да гледам как в кабинета е 37-38 градуса по обед, докато в моята стая е "едва 32"  .
_________________ "Има само две безкрайни неща, Вселената и човешката глупост. За първото не съм съвсем сигурен."
Алберт Айнщайн
|
| Съб Авг 25, 2007 9:39 pm |
|
 |
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 1:41 am Мнения: 276 Местоположение: София
|
Понеже стана дума за различни начини... и ето какво сътвори братовчед ми който се учи на PIC-ове от скоро  ))
Тва чудо работи безотказно освен това  )) Можеш ей така за спорта да пробваш и него  ))
|
| Пон Сеп 03, 2007 5:09 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Остава братовчед ти да е в 5-ти клас  Направо ме разби, кода прилича на гърмяща змия!!!
|
| Пон Сеп 03, 2007 5:35 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
WOW  Абе и 5-ти клас да беше щеше поне да се сети да ползва for  Ползвайте прекъсванията бе хора, ползвайте таймерите и всяка периферия която има под ръка - затова са я сложили...ротационен енкодер може да се чете с два пина от старшата тетрада на PORTB (4-7) и да дава прекъсване, остава проста обработка от 10-ина реда 
|
| Вто Сеп 04, 2007 8:59 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Интересен подход към проблема. Три малки проблема:
1. Не е прегледно.
2. Не е оптимално по отношение на ресурсите ( и време, и обем памет ).
3. Има поне 2 ситуации, при които ще зависне трайно. Задача за домашно: кои са те?
|
| Вто Сеп 04, 2007 10:12 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|