| Автор |
Съобщение |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
 PIC16F870 ADC
Здравейте. Съвсем нов съм тук и като за начало имам един екзистенциален въпрос.
Значи, искам да ползвам вграденото АЦП на един PIC16F870. Проблемът е, че нещо не работи както трябва. Настроил съм го да ползва вътрешно опорно напрежение (Vss и Vdd), а цялата схема е със стабилизирано захранване (7805). С един делител на напрежение му подавам различни напрежения на AN0 (цифровия RA0) и ги изкарвам като десетично число на 4 7-сегментни индикатора. Всичко това работи без прекъсвания (ще си правя човешка програма, когато го подкарам както трябва). Та, когато повиша напрежението на входа до Vdd (примерно 4,95 волта, че не е точно 5), изобщо не излиза максималното число от АЦП-то (1023), ами нещо около 800-900 и много се колебае. При по-ниски напрежения пък изобщо не отлепва - чак към 400-500 миливолта дава първия LSB. Освен това се държи различно с различни настройки за clock. По документациите пише, че трябва външното съпротивление да е под 10 килоома, за да има достатъчно ток за зареждане на кондензатора на АЦП-то. Е, в случая външното съпротивление е доста малко. Но и през 10 килоомов резистор е пак същата работа. Засега не ме интересуват по-високи честоти за ползване на АЦП-то, просто искам чат-пат да меря един термистор или нещо подобно.
Някой има ли представа защо може да става така?
_________________ Manners maketh man.
|
| Съб Дек 10, 2005 11:59 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Просто като идея питам : проверяваш ли дали ADC е готово с резултатите. Обикновено конверторът се стартира и се чака да стане готов. За целта някъде има бит, който показа, дали ADC е готов или зает. Чакаш да стане готов, и чак тогава четеш резултата. Така ли го правиш?
|
| Съб Дек 10, 2005 12:16 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
Да, проверявам този бит с цикъл и продължавам, когато се е нулирал. Той е бит номер 2 в ADCON0.
_________________ Manners maketh man.
|
| Съб Дек 10, 2005 12:20 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Сложи 100nF палелно на входа ( към маса ) и пиши какво става.
|
| Съб Дек 10, 2005 12:38 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
Пак същата работа... Пробвах с няколко различни кондензатора. Започвам да подозирам, че пика нещо не е наред.
_________________ Manners maketh man.
|
| Съб Дек 10, 2005 12:45 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Пусни го вътрешен генератор RC. Ако и това не помогне : Комет
Между другото : имаш ли блокиращи кондензатори в захранването? 100nF от двете страни на 7805 и един на пиновете на процесора.
|
| Съб Дек 10, 2005 12:49 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
И с RC-то пробвах. Дава по-голямо число, но пак не пълни ADRESL.
Имам кондензатори на захранването, ще сложа и на пика.
Ще взема да пробвам някой друг PIC с АЦП. Сигурно точно на този нещо му има. По форумите и по документациите на МикроЧеп нищо не намерих...
_________________ Manners maketh man.
|
| Съб Дек 10, 2005 12:55 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 Hm
Защо не пробваш с 16F676 , при мен бачкаше перфектно , даже е със вътрешен так 
|
| Съб Дек 10, 2005 4:26 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Поиграй си малко с битовете ADCS1:ADCS0 на ADCON0. Може пък да тръгне.
|
| Съб Дек 10, 2005 8:22 pm |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
Обикновено няма проблем с АЦП то я провери дали си дал дясно или ляво ориентирани данни и как го четеш и дали си конфигурирал както трябва АЦП то а и не напоследно място програмата !!!!!
|
| Съб Дек 10, 2005 9:51 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
Проверявах всичко много пъти, всякаквите настройки (дясно подреждане, clock...). Всички комбинации извъртях и... не би.
_________________ Manners maketh man.
|
| Нед Дек 11, 2005 1:25 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Кондензаторът на пиновете на контролера? Важен е!
|
| Нед Дек 11, 2005 1:33 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
Има си кондензатори и на аналоговия вход, и между Vdd и Vss, и на стабилизатора.
Сега поне спря да играе, установява се на една стойност, но пак е доста по-малка.
А има ли значение как е свързан MCLR с Vdd?
_________________ Manners maketh man.
|
| Нед Дек 11, 2005 2:12 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Значи ти хубаво го проверяваш тоя бит на АЦП-то, но това е бит за състоянието на конверсията, т.е. самото преобразуване на аналоговата величина, в случая напрежението на Sample&Hold кондензатора, в цифров код. А виж в PDF-а на ппрцесора, че е необходимо да се спази едно минимално време от превключването на входа на АЦП-то към избрания пин, до зареждане на този кондензатор, наречено Acquisition time. Т.е. подсигури се, че от включването на пина до стартирането на конверсията (със вдигане на ADCGO бита) има поне 20us. Вярно - съпротивлението на външната верига ти е ниско, но имаш и вътрешно, мисля към 5к, на аналоговия ключ.
|
| Нед Дек 11, 2005 8:23 pm |
|
 |
|
mountaineer
Ранг: Популярен
Регистриран на: Съб Дек 10, 2005 11:44 am Мнения: 326 Местоположение: Lake Geneva Shoreline
|
 |  |  |  | evc написа: Значи ти хубаво го проверяваш тоя бит на АЦП-то, но това е бит за състоянието на конверсията, т.е. самото преобразуване на аналоговата величина, в случая напрежението на Sample&Hold кондензатора, в цифров код. А виж в PDF-а на ппрцесора, че е необходимо да се спази едно минимално време от превключването на входа на АЦП-то към избрания пин, до зареждане на този кондензатор, наречено Acquisition time. Т.е. подсигури се, че от включването на пина до стартирането на конверсията (със вдигане на ADCGO бита) има поне 20us. Вярно - съпротивлението на външната верига ти е ниско, но имаш и вътрешно, мисля към 5к, на аналоговия ключ. |  |  |  |  |
Да, точно в това се оказа проблема. Сега е решен. Благодаря на всички за помощта!
_________________ Manners maketh man.
|
| Пон Дек 12, 2005 2:01 am |
|
|