|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 2:33 pm
Проблем с АЦПто на PIC16F876A
| Автор |
Съобщение |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
 Проблем с АЦПто на PIC16F876A
Имам проблем с АЦПто на PIC16F876A ако може да момогне някой. Проблема е следния: от време на време АЦПто ми връща 0000 и немога да разбера от какво. Хардуера е наред.
Блягодаря ви предварително.
|
| Пон Мар 06, 2006 7:53 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
А изчакваш ли достатъчно преди да вземеш резултата?
|
| Пон Мар 06, 2006 8:42 pm |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
Да изчаквам. Проверявам бита GO/DONE и когато е преклучило конвертирането тогава взимам резултата
|
| Пон Мар 06, 2006 8:59 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Така поставен проблема, и да искаме не можем да ти помогнем. Поства се задължително част от кода, на прекъсване ли е , на полиране ли е, инициализация и т.н. Този процесор има и компаратори на крачетата на АЦП-то, забранени ли са ?
Сигурно ли е че на заден фон някой друг програмен сегмент не забърсва резултата от АЦП-то ( имах такъв тъп случай, загубих няколко часа, докато разбера какво правя). По време на конверсията бъзикаш ли TRISA и PORTA ?
Ако външната схема е някакъв бисер на схемотехниката, също можеш нещо от нея да постнеш. Така най-бързо ще може да ти се помогне. Иначе, ще отидат 2-3 дни във въпроси и отговори, докато разбереш къде е причината.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
Последна промяна ¶ на Пон Мар 06, 2006 9:23 pm, променена общо 1 път
|
| Пон Мар 06, 2006 9:21 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
мда
|
| Пон Мар 06, 2006 9:22 pm |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
ОК извинявайте ама съм нов в тия работи
Сега ще ви обясня. АЦПто не е на прекъсване но ползвам прекъсване от таймер0. Порт А го ползвам само за АЦПто. Използвам RA0 и RA1 за аналогови входове и външни Vреф+ и Vреф-. Другите пинове на порт А ми са свободни. Конфигурирам го по следния начин
 |  |  |  | Код: ADCconfig BSF ADCON0,0
BCF ADCON0,5 BCF ADCON0,4 ; ADCHS1=0 BCF ADCON0,3 ; ADCHS0=0
BCF ADCON0,7 ; ADCS1=0 BSF ADCON0,6 ; ADCS0=1
BSF STATUS,RP0 ; Bank1 clrf ADCON1 BSF ADCON1,0 BSF ADCON1,2 BSF ADCON1,3 BSF ADCON1,7 ; ADFM=1 BCF STATUS,RP0 ; Bank0 return
|  |  |  |  |
а резултата го получавам така
Възможно ли е при прекъсването от таймера да става нещо и резултата да се губи?
Последна промяна elmi на Вто Мар 07, 2006 9:26 pm, променена общо 2 пъти
|
| Пон Мар 06, 2006 9:46 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
На тоя сорс всичко ми изглежда прилично (е, като изключим многото BSF/BCF които могат да бъдат заместени с movwf...). В случая виждам, че мериш AD1, единственото за което се сещам в момента е че може да имаш някакъв проблем с хардуера, но ти го изключваш като вариант. Другото важно е, има едно време което трябва да изчакваш при превключване на каналите преди да вдигнеш Go/Done бита за да четеш
|
| Вто Мар 07, 2006 12:51 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Постни кода на запазване на служебните регистри, когато влизаш в прекъсването на TMR0. При влизане трябва да изглежда така ( това е на MicroChip код ):
, а при напускане на прекъсването така: Клетките Wtemp, STATUStemp,PCLATHtemp и FSRtemp ги разполагаш на симетрични адреси в банка0, банка1, банка2 и банк3. Най-удобно е така: Много е важно, преди да си запазил STATUS регистъра да не използваш инструкция movf, тъй като тя променя Z флага. Сега по инициализацията на ADC-то: още първата ти инструкция е проблематична, първо се инициализират регистрите на ADC-то и едва тогава се включва захранването на ADC модула. Даваш такт Fosc/8. Fosc/8 дали не превишава максимално допустимата за АЦП-то ? ADCconfig ти е направена като подпрограма. Сигурен ли си, че я извикваш от нулевата банка RAM ( RP0 = 0 ) ? Имаш едно времезакъснение преди стартирането на ново измерване. Това времезакъснение е технологично необходимо време на ADC-то за да се разреди вътрешния му запомнящ кондензатор. Виж в data sheet на професора, според твоята Fosc/8 колко трябва да бъде минимума на това време. Стабилни ли са ти опорните напрежения ? Да не би да има по някой пик в тях ? За друго не се сещам. П.П. И един безплатен съвет  , както ти каза и Predator_MF, не е прегледно да използваш толкова инструкции bsf и bcf при положение, че за ADCON1 можеш да напишеш примерно така:
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Мар 07, 2006 1:05 am |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
А направил ли си пина дето ползваш за вход на АЦП-то, вход? (съответния TRIS -> 1)
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Мар 07, 2006 9:31 am |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
Влизам в прекъсването на TMR0 така:
а излизането го правя
има разлика с това което казваш.
Fosc/8 не преминава максимално допостимата на АЦПто. Извиквам ADCconfig от нулева банка, обаче не правя това време закъснение преди новото измерване което казваш. Ще подледана data sheetа. Опорнито е стабилно ползжам TL431.
Благодаря за съсета за многото bsf i bcf 
|
| Вто Мар 07, 2006 9:44 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Значи всичко е ясно, АЦП-то ти работи, a проблема ти е в прекъсването, и по-точно във втората инструкция. Запазваш STATUS регистъра, но инструкцията променя _Z флага, така че запазваш променен STATUS регистър. Като излезне от прекъсването STATUS регистъра е с променен Z флаг. Оттук и това, че от време на време ти дава АЦП-то резултат 0. Използвай кода, който постнах по-горе, за влизане/излизане в/от прекъсване и ще се оправи работата.
Успех !
П.П. Сега погледнах кода на MicroChip за влизане в прекъсване, значи не е нужно 4--те клетки да са на симетрични адреси, достатъчно е само Wtemp, тъй като само при запазване нa WREG не е ясно в коя банка RAM сме. След като се запази WREG следва превключване в банка 0, така че STATUStemp, PCLATHtemp & FSRtemp може да са на произволно място в банка 0.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
Последна промяна ¶ на Вто Мар 07, 2006 9:54 am, променена общо 1 път
|
| Вто Мар 07, 2006 9:50 am |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
Като кажа че съотвентия пин го ползвам за аналогов вход не е ли достатъчно? TRISA не го променям.
|
| Вто Мар 07, 2006 9:50 am |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
Благодаря ти много
Ще го оправя
|
| Вто Мар 07, 2006 9:52 am |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Еми трябва да ти кажа, че не е достатъчно! Ако си го направил изход в "0" АЦП-то това и ще ти мери.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Мар 07, 2006 10:19 am |
|
 |
|
elmi
Ранг: Минаващ
Регистриран на: Пон Мар 06, 2006 7:47 pm Мнения: 43 Местоположение: Пловдив
|
ама то не мери постояно 0. Само от време на време ми връща 0. Мисля че проблема е точно от прекъсването на ТМR0 като казва ¶
|
| Вто Мар 07, 2006 10:39 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|