| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC18F1220 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=6307 |
Страница 1 от 1 |
| Автор: | iorgov [ Вто Ное 25, 2008 4:51 pm ] |
| Заглавие: | PIC18F1220 |
Здравейте. Имам малък проблем със разбирането на литературата към този определен ПИК. Предварително благодаря. |
|
| Автор: | Koleto [ Вто Ное 25, 2008 5:07 pm ] | |||||||||
| Заглавие: | Re: PIC18F1220 | |||||||||
|
||||||||||
| Автор: | iorgov [ Вто Ное 25, 2008 5:18 pm ] |
| Заглавие: | |
Благодаря за инфото. А "малкия" проблем е че не разбрах секцията от Datasheet-a в която е обяснено как се управлява АЦП-то понеже ми се налага да работя с АЦП за първи път. |
|
| Автор: | ¶ [ Вто Ное 25, 2008 5:26 pm ] |
| Заглавие: | |
Кажи какво не си разбрал, ще ти се обясни |
|
| Автор: | optron [ Сря Ное 26, 2008 12:11 pm ] |
| Заглавие: | |
Добрее - явно се иска малко обяснение. Приемам, че никога не си работил с АЦП на ПИК, затова ще започна от принципа на управление. Първо се намира кои са контролните регистри за АЦП-то на конкретния чип. Намира се кой е бита за включване на модула и се сетва, за да започне да работи. Намира се кой е регистърът, задаващ кои крачета от чипа ще са аналогови и кои цифрови. Сетват се съответните битове. Съответно, крачетата, които ще са аналогови, трябва да са конфигурирани като входове от съответния ТРИС. После от контролните регистри на АЦП се избира източника на тактовата му честота и времето за измерване. В общия случай за едно сравнително точно измерване на АЦП му трябва определено време, за да се зареди задържащия кондензатор и след това да се усредни напрежението. Поради тази причина си има и горен праг за импеданса на източника на измерваното напрежение. Ако твоя източник е с по-голям импеданс, добре ще е да го буферираш с някакъв повторител. За източник на такт може да се използва цикловата честота на микроконтролера, прекарана през делител или вграден независим осцилатор. В общия случай, вградения осцилатор се използва само ако чипът ще спи, докато се прави измерването. Щом приключи измерването, чипът се събужда, обработва резултата и после може да пусне ново измерване и пак да заспи. За събуждането, четеш регистрите за управление на прекъсванията. Също се избират и референтните напрежения, спрямо които ще се правят измерванията - това дава възможност да се зададе диапазон, различен от 0 до 5 волта, посредством подаване на еталонни напрежения на едно или две крачета на чипа. После се намира кой е битът за определяне на формата на резултата от измерването. За резултата са отделени два байта от оперативната памет, които се попълват веднага, щом приключи измерването. Докато трае следващото измерване, те не се променят, което дава сигурност при четенето. Обаче резултатът е десет-битово число, тоест то не запълва целите два байта. Има два варианта - ляво изравнен или дясно изравнен. При първия, старшите осем бита се записват в старшия байт, оставащите два бита са най-старши битове на младшия байт. При втория младшите осем бита се записват в младшия байт, оставащите два бита са най-младши на старшия байт. В общия случай за не съвсем точни и некапризни измервания, ляво изравнен резултат е удобен, защото така можеш да четеш директно от старшия байт, без конкатениране, при което получаваш осем-битов резултат. Дотук беше настройката. Следва начинът на работа. Намират се кои са битовете за избор на канал. Те задават кое краче ще е свързано в момента към АЦП, за да направи измерване от него. След като се настрои, се намира стартиращия бит - бита GO/DONE. Когато този бит се сетне, АЦП започва измерването. Щом приключи, той попълва двата байта с резултата, като съобразява формата, който си избрал и сам нулира стартиращия бит. Това е знак за теб, че измерването е приключило и можеш да си прочетеш резултата. Препоръчва се преди следващо измерване да се оставят четири чикъла почивка за АЦП. Не знам защо, но го пише в даташитите. За следващо измерване си настройваш друг канал (ако ползваш повече от един) и пак вдигаш стартиращия бит. Изчакваш той да се нулира и пак четеш резултата. И така, докато ти трябват измерванията. За удобство, може да се активира прекъсване при приключване на измерването и обслужващата ти подпрограма да прочита резултата и да го прави каквото си решил. Сега за конкретния чип: АЦП-модула има пет регистъра - три контролни и два за резултата. Контролните са наречени ADCON0, ADCON1 и ADCON2. Първия регулира работата на модула, втория задава ролята на крачетата на чипа, третия задава източника на такт, времето за измерване и формата на резултата. При инициализацията на фърмуера ти първо трябва да активираш модула от ADCON0<ADON>. След това задаваш еталонните напрежения от битове ADCON0<VCFG>. Ако ти трябват външни, ще видиш на картата на крачетата кои приемат еталонните напрежения. В общия случай тези напрежения не трябва да излизат извън диапазона на захранващото напрежение. След това в ADCON1 задаваш кои крачета ще са ти аналогови и кои цифрови. Както вече споменах, тези, които ще са аналогови, трябва да са конфигурирани като входове от съответния ТРИС. Справка - картата на крачетата. Накрая задаваш в ADCON2 източника ти на такт и времето за измерване. Малко по-надолу в даташита имаш таблица за препоръчителните стойности на времето за измерване, съобразено с тактовата честота на процесора. Пак оттам си настройваш и формата на резултата. Оттук нататък, когато ти трябва измерване, настройваш от кой канал да ти измери от битовете ADCON0<CHS> и после вдигаш бит ADCON0<GO/DONE>. Изчакваш GO/DONE да падне и си четеш резултата от регистрите ADRESH и ADRESL. За следващо измерване пак превключваш на съответния канал, вдигаш бит GO/DONE, изчакваш да падне и четеш. И така нататък. За този чип горния праг на импеданса е 2.5 килоома. Ако твоя източник на напрежение е с по-голям импеданс, измерването ще стане неточно. Може да увеличиш времето за измерване или да буферираш източника с повторител или усилвател. Айде и успешен прощъпулник! |
|
| Автор: | Cekins [ Сря Ное 26, 2008 3:58 pm ] |
| Заглавие: | |
И малко допълнение : Всички пикове съобщават за завършване на измерването чрез прекъсване, като вдигат съответният флаг (ADIF) и генерират прекъсване ако ADIE е вдигнат. По този начин не се налага постоянно полване на бита GO/DONE, а резултата се обработва веднага когато е готов. Това е важно когато ще се ползва ацп-то в sleep режим, тъй като контролера излиза от сън при прекъсване. |
|
| Автор: | iorgov [ Чет Ное 27, 2008 1:13 pm ] |
| Заглавие: | |
Благодаря хора златни сте |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|