|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:27 am
Въпрос относно ADC на ПИК
| Автор |
Съобщение |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Въпрос относно ADC на ПИК
Ще ползвам въпросното ADC, но покрай него контролерът трябва да прави и други неща и ми трябва малко помощ за някой функции. Използвам CCS v4.078. Знам как да настроя ADC-то, но ме интересуват някой функции, които открих в хелпа. Както споменах искам освен това преобразуване контролера да прави и други неща. Открих функцията ADC_done(). Според обяснението тя връща единица, когато АЦП модулът е приключил с работата си. Обаче в примерите за АЦП, които видях никъде не намерих функция за старт на преобразуването. Пример: setup_adc_ports(AN0); set_adc_channel(0); setup_adc(ADC_CLOCK_DIV_32);
while(1) { delay_us(20); //wait for the acquisition time value=read_adc(); delay_us(4); //A minimum wait of 2 TAD(=1,6µs) is //required before next acquisition starts. } Кога започва самото преобразуване??? Когато се извика value=read_adc() или още когато се настроят канала и източника на честота??? Мога ли да постоя програма, в която просто да проверявам дали АЦП е готово с ADC_done() и ако е прочета информацията примерно с value=read_adc()?? Благодаря!
_________________www.elkran.com
|
| Сря Яну 25, 2012 11:56 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
Първо кажи с кой ПИК точно мислиш да работиш.
Това е защото има такива, които сами (почти) всичко правят и такива, които не съвсем. Конкретно на въпроса ти : АЦП-то има прекъсване. Генерира го когато свърши с конверсията. Настройката е в някой от ADCON или PIE регистрите. В прекъсването само изчиташ стойността която е семплирало и толкова. Обаче ако е от по старите (16-ки и старите 18-ки) ще трябва ти да се грижиш за Aquisition time - а. Новите 18-ки (примерно 18F2520 и подобни) това го правят също автоматично. 24-ките пък са още по-добре - те могат да сканират определен брой канали и тогава да генерира прекъсване.
И забрави какво може компилатора - това е загуба на време. Много по елегантно стават нещата като се правят директно с регистрите. Компилатора само да ти генериа If, For, While, Case и някой по засукани сметки кооито не си заслужава да се правят чак ръчно.
|
| Сря Яну 25, 2012 4:35 pm |
|
 |
|
rumen65
Ранг: Новодошъл
Регистриран на: Чет Окт 06, 2005 2:06 pm Мнения: 194 Местоположение: Sofia
|
 Re: Въпрос относно ADC на ПИК
В хелпа на този компилатор е описано доста добре: read_adc( ) Syntax: value = read_adc ([mode]) Parameters: mode is an optional parameter. If used the values may be: ADC_START_AND_READ (continually takes readings, this is the default) ADC_START_ONLY (starts the conversion and returns) ADC_READ_ONLY (reads last conversion result)
read_adc( ) без параметър е равно на read_adc( ADC_START_AND_READ) , което стартира меренето, чака докато приключи и връща резултата. На повечето пикове преобразуването е няколко микросекунди, мисля до 20, но това е описано в документацията на процесора. Извикването на функцията с втория параметър само стартира мерене без да връща резултат от него, а с третия, връща само резултата от предното стартиране и измерване.
|
| Сря Яну 25, 2012 5:29 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
Винаги съм се дивял колко безумно може да изглеждат ADC, PWM и разни други хардуери на пик вкарани като функции в компилатора.
Всичко това нещо (ако е с по-новите ADC) се свежда до няколко команди. Всичките са сетване на регистри и две за изчитане на резултата в някъв буфер евентуално. Останалото автомат, с прекъсване и няма никаква загуба на микросекунди. При прилична честота на проца, едно измерване е около 200-300 цикъла. Дпълнително никой не знае тия инструкции колко овърхед код генерират.
|
| Сря Яну 25, 2012 6:28 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: Въпрос относно ADC на ПИК
Това за хелпа го видях и мисля, че го направих. Опитах да изтрия темата, даже писах на админ, но явно не е дало резултат. Но след като си стой, искам да попитам още нещо. Понеже ще контролирам изключително бърз процес ме интересува, ако започна преобразуването и докато трае то се промени входната величина(напрежение), това ще се отрази ли на резултата???
_________________www.elkran.com
|
| Сря Яну 25, 2012 9:56 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
Колко бърз? А и не каза кой е пика. Повече могат да докарат 100kSp/s. Минималното време за Aquisition е от 2,5 до към 5 микросекунди. Ако през това време входния сигнал се промени, самплинг кондензатора ще го интегрира. С други думи ако към края на семплинга се измени драстично, кондензатора няма да може да се изравни с входното ниво. Също много голямо значени има изходното съпротивление на източника - препоръчително е да е под 5кОм, а най-добре да е буфериран с ОУ.
|
| Сря Яну 25, 2012 11:58 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: Въпрос относно ADC на ПИК
По принцип термини като изключително бърз, доста бавен и други подобни не дават полезна информация, защото има процеси където ти трябва милиони семпли в секунди, има и такива където е достатъчно да мернеш 1-2 пъти в секунда. Във всички случаи честотата на измерване трябва да ти е минимум 2 пъти по-голяма отколкото честотата на входния сигнал ... АЦП-то вътре има S/H ( Измери/Запомни ) схема преди същинския конвертор. Преди всяко измерване S/H схемата "записва" стойността на входното напрежение в един кондензатор, след като приключи "записа" входната верига се разкачва от кондензатора и към него се закача конвертора, след което следва процеса на преобрузаване на аналоговото напрежение върху кондензатора до цифров резултат. Така че стартираш ли конвертирането входното аналогово напрежение може да се променя колкото си иска - то вече не е свързано към схемата на АЦП-то. Отделно трябва да помислиш колко време трябва да продължи S/H процеса - при някои PIC-ове това се прави ръчно от програмиста, при други това се прави автоматично. Струва ми се, че трябва малко да почетеш за да ти се изяснят нещата кое в каква последователност се извършва вътре в АЦП-то.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Яну 26, 2012 12:38 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
При всички положения тези неща се правят най-добре с прекъсвания. Съвсем спокойно единия таймер може да се ползваза S/H ако ацп-то не го прави автоматично, а в прекъсването на ацп-то да се изчита резултата. Още повече, че ако е само за един канал ще е сууупер елементарно. Ще има 10-тина команди дето ще отработват целия процес, а през времето S/H и sampling процесора ще може да си прави каквото трябва. Stoyanoff - остави настрана ацп-то за сега - виждам, че много други неща по черната кутийка не са ти ясни. Хвани един даташийт и го прочети поне 10 пъти. Всяка една периферия може да работи самостоятелно (с малки изключения като I2C-то ама то е друга бира) и всяка периферия като си свърши работата сигнализира на ядрото за това чрез прекъсване. От там насетне нещата започват да изглеждат доста по-различно от това което ти си представяш. И не забравяй - това не е Core I7 с 8GB рам.
|
| Чет Яну 26, 2012 9:57 am |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Re: Въпрос относно ADC на ПИК
Благодаря за отговорите! Бяха доста изчерпателни. Само да поясня, че не харесвам варианта с прекъсването поради ред причини свързани с конкретното приложение. Като цяло системата не е толкова проста, колкото съм я представил тук.
_________________www.elkran.com
|
| Чет Яну 26, 2012 2:17 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
Не се заблуждавай - преноса на операции към прекъсвания много облекчава работата на чипа. В момента имам един логер който : мери 5 вътрешни аналогови канала + 2 външни АЦП-та, търкаля дисплей, смята ПИД-ове за регулировки, върти FAT16 (SD карта), комуникация с РС и комуникация с друго пикче. 18-ка на 20MHz - всички времезависими неща по един или друг начин минават през прекъсване. Дисплея, картата, отговорите на заявките на РС-то и други маловажни задачи се обработват когато не прави нищо друго. Така, че всичко е въпрос на разпределяне на задачите. На микроконтролерите именно прекъсванията са им силна страна. Инче вземаш микропроцесор на 2GHz и нямаш грижи...
|
| Чет Яну 26, 2012 9:10 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Re: Въпрос относно ADC на ПИК
Cekins, а какво ще стане, ако в система като твоята : 1.Настъпят две прекъсвания едновременно? 2.По време на обработката на някое прекъсване постъпи заявка за едно или повече други прекъсвания?
_________________ Хайде де!
|
| Пет Яну 27, 2012 8:46 am |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Въпрос относно ADC на ПИК
Изпълнява се прекъсването с приоритет. Ако няма приоритет се изпълнява първото настъпило и веднага след RETFIE се влиза отново в прекъсване и се обслужва и следващото. Споко, програмата няма да кисне само в прекъсвания, като пиянде в кръчма.
|
| Пет Яну 27, 2012 9:59 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Въпрос относно ADC на ПИК
Да ползваш Read_adc() не е добра идея, така ще трябва да чакаш край на преобразуването, ADC_read_only пък ми се вижда безсмислена функция, може директно да четеш регистъра на ADC-то. Най-добрият вариант ако ти трябва фиксиран семпъл рейт е да стартираш ADC автоматично по таймер и прекъсването при комплийт да те вкарва в самото четене, така отнема най-малко ресурси.
|
| Пет Яну 27, 2012 7:56 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Въпрос относно ADC на ПИК
Е аз за какво говорих досега?
Dan, ако искаш чак таква прецизност в тайминга, АЦП-то на 24-ките може да постигне тази прецизност, без абсолютно никъв овърхед. Няколко команди. Оправяш си приоритетите и си готов.
|
| Пет Яну 27, 2012 8:35 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: Въпрос относно ADC на ПИК
Тази функция има смисъл, ако искаш кода който ще пишеш, да може да се изпълнява и на други процесори, така ще използваш един и същи сорс код.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Яну 27, 2012 9:42 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|