Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с АДЦ на PIC 16F877A
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2519
Страница 1 от 1

Автор:  naskoialan [ Съб Юни 17, 2006 11:30 am ]
Заглавие:  Проблем с АДЦ на PIC 16F877A

Здравейте, от скоро се запалих да си направя миди контролер със PIC16F877A, използвах компилатор-а на CSS PicC и успях да го нпарвя само че имам проблем за който нямам никаква идея от къде може да идва, Най напред за момента тествам само с единия аналогов вход другите са на маса през резистори при ниски напрежения близки до нулата и при напрежение близки до 5 Волта стоиноста която прочитам от АДЦ-то се колебае с 1-2
(8- Bit Integer) работната честота на процесор-а ми е 4 MHz XT конфигурация на осцилатор-а, четенето от АДЦ-то го правя по този начин :
като за момента port = 0;


int1 updateAdcValue(int8 port)
{
int1 result = 0;
int8 value;

set_adc_channel(port);
delay_ms(10);
value = read_adc()>>1;
delay_ms(1);

if( value != adcPortValues[port] )
{
result = 1;
adcPortValues[port] = value;
}

return(result );
}

Чудя се дали ако намеря кварц на 20 Мегахерца и го пусна PIC-a на тази честота нещо ще се промени ?
Това са ми настройките сега на Pic-a :

#include <16F877A.h>
#define ADC=8
#use delay(clock=4000000)
#fuses XT,NOWDT

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_8);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);

Тъй като се занимавам съвсем от скоро и не съм наясно с доста неща може да съм объркал нещо.
Благодаря предварително !!

Автор:  Predator_MF [ Съб Юни 17, 2006 12:10 pm ]
Заглавие:  Re: Проблем с АДЦ на PIC 16F877A

A трудно ти се разбира кое е проблема, но ако е това:
naskoialan написа:
при ниски напрежения близки до нулата и при напрежение близки до 5 Волта стоиноста която прочитам от АДЦ-то се колебае с 1-2

... считай го за съвсем нормално. Последния бит винаги си играе, ако искаш малко по-голяма точност, направи 10 измервания и усредни резултата (в случая ще е много по-удобно ако правиш 8 или 16, щото деленето на толкова е просто шифтване). Освен това тия 10ms delay са ненужно много за ADC-то (освен ако не си написал 10 за да си забавиш програмата умишлено) :)

Автор:  naskoialan [ Съб Юни 17, 2006 12:41 pm ]
Заглавие:  Re: Проблем с АДЦ на PIC 16F877A

Predator_MF написа:
A трудно ти се разбира кое е проблема, но ако е това:
naskoialan написа:
при ниски напрежения близки до нулата и при напрежение близки до 5 Волта стоиноста която прочитам от АДЦ-то се колебае с 1-2

... считай го за съвсем нормално. Последния бит винаги си играе, ако искаш малко по-голяма точност, направи 10 измервания и усредни резултата (в случая ще е много по-удобно ако правиш 8 или 16, щото деленето на толкова е просто шифтване). Освен това тия 10ms delay са ненужно много за ADC-то (освен ако не си написал 10 за да си забавиш програмата умишлено) :)


Благодаря ти за отговора, за 10ms delay знам че са много просто исках да се убедя че дори при голямо изчакване пак го има това, ще използвам твоя метод :D .

Автор:  HCL [ Съб Юни 17, 2006 12:59 pm ]
Заглавие: 

Цитат:
Последния бит винаги си играе, ако искаш малко по-голяма точност, направи 10 измервания и усредни резултата


Само едно допьлнение, че по този метод по-голяма точност няма да постигнеш. Точността на едно измерване не се влияе от броя на проведениете проби.
Образуването на средна стойност би ти погнало при определянето на стандартното отклонение, но не би подобрило точността, lsb си е lsb независимо колко дьлго мериш.
Няма да е лошо да хвьрлиш един поглед и в книгите по измервателна техника, разделите за статистика и стохастика, ако имаш желание да задьлбаваш по-сериозно.
А конкретно по проблема, какво имаш предвид с това
стоиността която прочитам от АДЦ-то се колебае с 1-2, какво 1-2 и колко точно около нулата?

Автор:  Predator_MF [ Съб Юни 17, 2006 1:12 pm ]
Заглавие: 

@HCL, прав си, няма да е по-голяма точност...по скоро ще имаш по-сигурен резултат (поне по-малко ще плува последния бит).

PS: Според мен има в предвид, че като подаде напрежение 0.3V (примерно) ще получава стойност между 15-16, при едното замерване ще е 15, при другото 16

Автор:  naskoialan [ Съб Юни 17, 2006 1:52 pm ]
Заглавие: 

Predator_MF написа:
@HCL, прав си, няма да е по-голяма точност...по скоро ще имаш по-сигурен резултат (поне по-малко ще плува последния бит).

PS: Според мен има в предвид, че като подаде напрежение 0.3V (примерно) ще получава стойност между 15-16, при едното замерване ще е 15, при другото 16


Точно това имам предвид, целта ми е да предавам миди съобщения само ако имам промяна на входа т.е на АДЦ, а в случая при оределено напрежение при две различни замервания стойноста е различна и мисля, че само последния бит ми играе не съм сигурен.

Автор:  HCL [ Съб Юни 17, 2006 2:11 pm ]
Заглавие: 

Ако е последния бит не виждам кьде е проблема, освен ако си решил да "четеш" микроволтове. Какво пречи да си напаснеш долната и горната граници на стойностите, които получаваш.

Автор:  Predator_MF [ Съб Юни 17, 2006 2:25 pm ]
Заглавие: 

Ами избери си някой от двата метода, тоя който аз ти споменах или тоя на HCL... можеш просто да шифтнеш резултата един път вдясно и имаш твърд резултат, последния бит няма да те бърка :)

Автор:  naskoialan [ Съб Юни 17, 2006 2:38 pm ]
Заглавие: 

Много благодаря за помоща направих го с игнориране на последния бит и е наред ве4е :D.

Автор:  Dimiter [ Съб Юни 17, 2006 8:29 pm ]
Заглавие: 

@naskoialan
Ако не е тайна какво точно ще правиш с мидито - барабани?
или нещо друго?
Случайно се занимавам с нещо подобно в момента

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/