| Автор |
Съобщение |
|
dgeorgiev92
Ранг: Минаващ
Регистриран на: Вто Яну 20, 2015 11:26 pm Мнения: 23 Местоположение: Габрово/Любимец
|
 Играчка закачка с PIC16F887
Привет на всички. Нов съм във форума и ако правя грешно моля да ми кажете за да се поправя. Начинаещ съм със Microchip микроконтролерите имам повече опит със Arduino средата та стига съм ви занимавал с мен. Имам задача с въпросния контролер която се състой в следното, с два потенциометъра да задавам честота на два канала. Аз използвах един таймер но може й двата да се използват. Програмата която успях да сътворя работи но честотата се изменя по логаритмичен закон а на мен ми трябва да е линейно. давам кода който съм сътворил й моля кажете от къде идва това явление и как да го оправя. Поздрави Деян.
|
| Сря Яну 21, 2015 1:19 am |
|
 |
|
vesko_hard
Ранг: Ориентиран
Регистриран на: Сря Фев 08, 2006 3:32 pm Мнения: 253 Местоположение: Благоевград
|
 Re: Играчка закачка с PIC16F887
А сигурен ли си дали потенциометрите не са логаритмични ?
|
| Сря Яну 21, 2015 10:05 am |
|
 |
|
rumen65
Ранг: Новодошъл
Регистриран на: Чет Окт 06, 2005 2:06 pm Мнения: 194 Местоположение: Sofia
|
 Re: Играчка закачка с PIC16F887
Нормално да е така. Задаваш периода пропорционално на напрежението, а ти трябва честотата. За да го направиш, първо от напрежението сметни нужната ти честота, а след това периода за тази честота. И тъй като ще има и деление, не е подходящо за този процесор сметките да ги правиш в прекъсването, а в главната програма.
|
| Сря Яну 21, 2015 10:24 am |
|
 |
|
dgeorgiev92
Ранг: Минаващ
Регистриран на: Вто Яну 20, 2015 11:26 pm Мнения: 23 Местоположение: Габрово/Любимец
|
 Re: Играчка закачка с PIC16F887
Потенциометрите са линейни. Да аз променям периода защото не е важно колко е продължителноста на импусите. Важно е да не се изменя логаритмично периода и със прескачания между отделните честоти (колкото се може по плавно да става). Опитах се да направя както каза rumen65 но като преместя изчисленията в майна и не иска изобщо да цъка изхода.
|
| Сря Яну 21, 2015 4:35 pm |
|
 |
|
rumen65
Ранг: Новодошъл
Регистриран на: Чет Окт 06, 2005 2:06 pm Мнения: 194 Местоположение: Sofia
|
 Re: Играчка закачка с PIC16F887
Последно, кое трябва да се променя линейно - периода или честотата. Защото връзката между тях не е линейна F=1/T. Ако едното се променя линейно, другото няма.
|
| Сря Яну 21, 2015 5:01 pm |
|
 |
|
dgeorgiev92
Ранг: Минаващ
Регистриран на: Вто Яну 20, 2015 11:26 pm Мнения: 23 Местоположение: Габрово/Любимец
|
 Re: Играчка закачка с PIC16F887
Периода трябва да се изменя линейно.
|
| Сря Яну 21, 2015 5:29 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: Играчка закачка с PIC16F887
По-скоро мисля, че имаш проблем с програмата, а не с алгоритъма, след като изобщо не иска да цъка! А може и с двете! Пусни един дебъгер и виж какво става!
_________________www.elkran.com
|
| Сря Яну 21, 2015 10:46 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Играчка закачка с PIC16F887
Според това което си дал импулсите STEP които генерираш ще са дълги по няколко наносекунди. Опитай ето така:
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Яну 21, 2015 11:14 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Играчка закачка с PIC16F887
Точно така се получава. Скоро правих абсолютно същата постановтка. Просто си сметнах една табличка в ексел с 1024 стойности и чета от нея периода. По късно ще дам подробности, че сега пиша от телефона. уф... чак сега успях да седна на нормална клавиатура... Значи примерно ей това : 13000000/(200+{adc_input}) дава от около 76 до 470 херца напълно линейно (колкото е възможно при 10 бита де). Аз го направих единия таймер (8 битов) изключва изхода, прелоудва друг 16 битов таймер с някоя от стойностите и го пуска. 16 битовия таймер като изтече включва малкия таймер и съответния изход. На практика малкия таймер, който генерира пулса вкарва лееека нелинейност в честотата. В моя случай се управляват драйвери на стъпкови мотори и мога да си позволя пулса да е много кратък. В ексела като се поиграе малко с числата могат да се докарат всякакви честоти (е ествествено в рамките на възможностите на таймера), после се вкарват в една таблица и няма никакъв овърхед от постоянна аритметика. А за още по-лесно едни от най-новите 16-ки имат NCO - какво повече му трябва на човек 
|
| Чет Яну 22, 2015 8:18 am |
|
 |
|
rikotech
Ранг: Минаващ
Регистриран на: Пон Авг 15, 2011 5:37 pm Мнения: 12
|
 Re: Играчка закачка с PIC16F887
Много сложно ми се вижда решението на толкова проста задача. Така няма ли да стане. Всеки път като влизаме в ISR то превключваме състоянието на изхода. Като задаваме стойност на таймера (вътре в ISRто) според прочетената стойност на ADCто променяме периода му на прекъсване. Колкото по висока стойност задаваме на регистрите на таймера толкова по скоро ще настъпи следващото прекъсване респективно ще расте и честотата на изхода.
|
| Нед Яну 25, 2015 2:17 pm |
|
 |
|
dgeorgiev92
Ранг: Минаващ
Регистриран на: Вто Яну 20, 2015 11:26 pm Мнения: 23 Местоположение: Габрово/Любимец
|
 Re: Играчка закачка с PIC16F887
Точно това правя rikotech но когато започна да увеличавам таимера с потенциометъра изменението на честотата става логаритмично и как да компенсирам това изменение и да се движи линейно честотата
|
| Чет Яну 29, 2015 12:00 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: Играчка закачка с PIC16F887
най-лесно ми се вижда с таблица, от която при дадена стойност на ацп, взимаш нужната стойност за таймера.
|
| Чет Яну 29, 2015 12:11 pm |
|
 |
|
rikotech
Ранг: Минаващ
Регистриран на: Пон Авг 15, 2011 5:37 pm Мнения: 12
|
 Re: Играчка закачка с PIC16F887
|
| Съб Яну 31, 2015 9:56 pm |
|
 |
|
dgeorgiev92
Ранг: Минаващ
Регистриран на: Вто Яну 20, 2015 11:26 pm Мнения: 23 Местоположение: Габрово/Любимец
|
 Re: Играчка закачка с PIC16F887
В крайна сметка го направих с масив от променливи и стана доста гладко. Но сега имам нова задача да чета един сензор по I2C и успах но когато тръгна да дебъгвам и рестартрам програмата не иска да стартира I2C шината и трябва да спирам захранването. от какво може да е този проблем.
|
| Пон Мар 23, 2015 3:15 pm |
|
|