MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

АЦП в PIC16F676

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 АЦП в PIC16F676
Автор: airens ()
Дата:   12/07/2006 20:38

Здравствуйте! Возникла необходимость отследить падение напряжения на Ni-Mh аккумуляторе (2.5 - 7мВ). Каким
образом это можно сделать при опорном U=2500мВ и разрядности АЦП 10 бит и возможно-ли это вообще? Ведь там счет идет
на единицы и не будет-ли сильно влиять погрешность АЦП?

P.S> Хотелось бы сделать сделать ИОН на 2В (верхнее) и 1В(нижнее), что решило бы задачу, но интегральных
стабилизаторов на такие напряжения не существует. Есть-ли несложные схемы таких стабилизаторов?


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   12/07/2006 23:39

airens писал(а):

> P.S> Хотелось бы сделать сделать ИОН на 2В (верхнее) и
> 1В(нижнее), что решило бы задачу, но интегральных
> стабилизаторов на такие напряжения не существует. Есть-ли
> несложные схемы таких стабилизаторов?

вряд ли получится
посмотрите в конце даташита на ваш пик - там есть параметр Vref min (Vref+ - Vref-)
сколько помню, одному Вольту он никогда не равнялся


 
 Re: АЦП в PIC16F676
Автор: URY ()
Дата:   13/07/2006 06:27

Если использовать 16F876, то возможно использование ИОН компараторов
и настройка его на любое(почти любое) напряжение до Vcc.


 
 Re: АЦП в PIC16F676
Автор: back ()
Дата:   13/07/2006 07:58

Операционником усилить и перенести на более удобный диапазон.
Потом уже АЦПить...


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   13/07/2006 09:14

URY писал(а):

> Если использовать 16F876, то возможно использование ИОН
> компараторов
> и настройка его на любое(почти любое) напряжение до Vcc.

развейте мысль - не очень понятно что же дальше делать с этим "почти любым" напряжением ИОН?
(напомню задачу - требуется уверенно отслеживать изменения 2.5 мВ от уровня 1.4...1.5 Вольт)



Отправка отредактированного (13/07/2006 09:16)


 
 Re: АЦП в PIC16F676
Автор: evc ()
Дата:   13/07/2006 09:25

Я бы попробовал цифровое интегрирование. Ведь у вас быстродействие не нужно...


 
 зарядное устройство делаем?
Автор: dynaco ()
Дата:   13/07/2006 09:51

?

-----------------------------------------------------------

http://www.dynaco.h10.ru/cap_bug.html - очередной черновичок. Если будут мысли и соображения... буду рад конструктивной критике


 
 Re: АЦП в PIC16F676
Автор: mchipic ()
Дата:   13/07/2006 10:33

В PIC16F876/877 можно задать диапазон оцифровки напряжения с помощью подстроечных резисторов,
подключённых к ИОН (-Vref; +Vref). Исходя из условия задачи - "...уверенное измерение 2,5 В...",
предположим, что достаточно измерять с точностью 0,5 мВ. 10-разрядный АЦП МК может обеспечить такую
точность, если диапазон будет 0,5 мВ х 1024 = 0,512 В. Т.е. достаточно установить -Vref=2,5 В, а
+Vref=3 В, задача будет решена.


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   13/07/2006 10:58

mchipic писал(а):

> предположим, что достаточно измерять с точностью 0,5 мВ.
> 10-разрядный АЦП МК может обеспечить такую
> точность, если диапазон будет 0,5 мВ х 1024 = 0,512 В. Т.е.
> достаточно установить -Vref=2,5 В, а
> +Vref=3 В, задача будет решена.

это все в теориях :)

во-первых, у исходного 16F676 нет входа Vref-
во-вторых, если бы и был, еще раз перечитайте
http://www.microchip.ru/phorum/read.php?f=2&i=136580&t=136571

у 876 эта штука (параметр A20) равна 2.0 В.

с этими зарядными устройствами на одну банку на практике все получается не так просто.
по нынешним временам получается проще ставить внешний АЦП (благо он может быть медленным).



Отправка отредактированного (13/07/2006 11:02)


 
 Re: АЦП в PIC16F676
Автор: airens ()
Дата:   13/07/2006 19:13

Каким образом? Подробнее пожалуйста


 
 Re: зарядное устройство делаем?
Автор: airens ()
Дата:   13/07/2006 19:27

Да


 
 Re: АЦП в PIC16F676
Автор: mchipic ()
Дата:   14/07/2006 10:05

Так я писал о PIC16F876/877 (см. моё сообщение). У них есть такой вход, потому и рекомендовал его.
Посмотрел его даташит в части параметров АЦП. Действительно,разность напряжений Vref-... Vref+ минимум
2 В. А я в своём проекте (PIC16F876) на Proteus установил 0,5 В и всё работает на первый взгляд
правильно. Теперь править придётся. А сколько я ломал голову, размышляя о том, что не может не быть
ограничения на точность пробразования! Оказывается всё так просто. Значит, максимальная точность преобразования
АЦП 2 мВ, поэтому о "...уверенном измерении 2,5 мВ..." речи идти не может, поскольку точность должна
составлять минимум 1/3 от измеряемой величины.


 
 Re: АЦП в PIC16F676
Автор: evc ()
Дата:   14/07/2006 10:24

Например так:
char i;
long int res;
for (i=0;i<244;i++){
   get_ADCRES();//Чтение АЦП
   res+=ADCRES;
}
res=res/100;

При Vref=2500mV, одна единица АЦП = 2,44mV.
Т.е. в res вы получаете отфильтрированное Vin в mV.



Отправка отредактированного (14/07/2006 10:43)


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   14/07/2006 10:29

mchipic писал(а):

> правильно. Теперь править придётся. А сколько я ломал голову,
> размышляя о том, что не может не быть
> ограничения на точность пробразования! Оказывается всё так
> просто.

как я понял, вы эти Vref- и Vref+ выставляете
"с помощью подстроечных резисторов, подключённых к ИОН".
А ведь могут дать дополнительную погрешность из-за не бесконечного сопротивления
входов Vref+- (это тоже проявится в жизни, не в протеусе)
как бы не пришлось еще повторители на ОУ ставить.

посчитаешь - и опять может статься выгодней взять внешний АЦП


 
 Re: АЦП в PIC16F676
Автор: airens ()
Дата:   14/07/2006 14:36

Спасибо большое. Хорошая идея так и поступлю


 
 Re: АЦП в PIC16F676
Автор: mchipic ()
Дата:   15/07/2006 10:32

Могут теоретически. Но, как было уже сказано, минимальный диапазон Vref 2 В. Вносимая погрешность от
нестабильности подстроечников будет заведомо ниже цены младшего разряда этого диапазона. Более того, в моём
проекте дотаточна 8-бит точность АЦП, что я и делаю, отбрасывая два младших разряда результата
преобразования.
Кстати, по DS входные токи выводов Vref не более 10 мА. С учетом этой нагрузки и следует выбирать
подстроечники, или делители на постоянных резисторах (если уж применение подстроечников кажется
непрофессиональным).


 
 Re: АЦП в PIC16F676
Автор: Viael ()
Дата:   15/07/2006 16:14

Посмотрите http://atmel.com/dyn/resources/prod_documents/doc8003.pdf (AVR121: Enhancing ADC
resolution by oversampling)
Я реально достигал 16 бит на внутреннем АЦП(правда на атмеге, но думаю разницы особой нет),кроме
того этот алгоритм работает как фильтр и значения практически "не скачут".Если высокой скорсти не
требуется то это вариант, плюс опору на 2,5 вольта (MCP1525) повесить, тогда 2500мВ/65535=0,038мВ




 
 Добавлю
Автор: Viael ()
Дата:   15/07/2006 16:29

что никаких ухищрений как предложено в AVR121 с опорой делать не пришлось (вносить шумы) их обычно и
так хватает на линиях питания+ шумы от переключения на портах контроллера.




 
 Re: Добавлю
Автор: Greg ()
Дата:   15/07/2006 16:50

Viael писал(а):

> что никаких ухищрений как предложено в AVR121 с опорой делать
> не пришлось (вносить шумы) их обычно и
> так хватает на линиях питания+ шумы от переключения на портах
> контроллера.
>

да, эта тема тут регулярно всплывает

http://www.microchip.ru/phorum/read.php?f=2&i=75856&t=75856
http://www.microchip.ru/phorum/read.php?f=2&i=80506&t=80393


 
 Re: АЦП в PIC16F676
Автор: airens ()
Дата:   16/07/2006 12:22

Подскажите, почему у меня не хочет производить операцию деления?


long res = 0;
for (j=0;j=244;j++)
{
i=0;
while (i<1) {i++;}; //ждем 12мкС до зарядки Chold
GODONE = 1; //начинаем преобразование
while (GODONE != 0); //ждем окончания
res+= ((ADRESH<<8) | ADRESL); //прибавляем результат к функции
}
res = (res % 100);



Ошибку выдает следующую:"can't find 0xC words (0xc withtotal) for psect "text12" in
segment "CODE"
"
Причем если число на которое делю не 100, а, к примеру 128 или 256, все нормально. Видимо деление нацело
производится операцией сдвига...



Отправка отредактированного (16/07/2006 12:24)


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   16/07/2006 12:46

airens писал(а):

> Подскажите, почему у меня не хочет производить операцию
> деления?
>
>
> long res = 0;
> for (j=0;j=244;j++)
> {
> i=0;
> while (i<1) {i++;}; //ждем 12мкС до зарядки Chold
> GODONE = 1; //начинаем преобразование
> while (GODONE != 0); //ждем окончания
> res+= ((ADRESH<<8) | ADRESL); //прибавляем результат к
> функции
> }
> res = (res % 100);
>
>
>
> Ошибку выдает следующую:"can't find 0xC words (0xc withtotal)
> for psect "text12" in
> segment "CODE"
> "
> Причем если число на которое делю не 100, а, к примеру 128 или
> 256, все нормально. Видимо деление нацело
> производится операцией сдвига...
>

да, правильно думаете насчет сдвига.

а сообщение означет, что кончилась память...
та, которая ПЗУ
у вас ее все-то 1024 слова.
очень даже немного (деление лонгов - это не так и безболезненно)


 
 пара замечаний
Автор: Greg ()
Дата:   16/07/2006 13:12

airens писал(а):

> Подскажите, почему у меня не хочет производить операцию
> деления?
>
>
> long res = 0;
> for (j=0;j=244;j++)
> {
> i=0;
> while (i<1) {i++;}; //ждем 12мкС до зарядки Chold
> GODONE = 1; //начинаем преобразование
> while (GODONE != 0); //ждем окончания
> res+= ((ADRESH<<8) | ADRESL); //прибавляем результат к
> функции
> }
> res = (res % 100);




код будет короче, если циклы делать do-while.
при этом все счетчики должны считать вниз до нуля.

j=244;

do {

   while (GODONE);
   GODONE = 1; 

//а здесь внутри вместо "ожидание зарядки chold" можно как раз прибавить эти ADRES
// успеете, он пока не преобразует, значения не изменит 

   res += ADRESL + (ADRESH<<8);
}

while (--j);  // это станет инструкцией decfsz. 


еще для укорачивания кода повыкидывайте где есть switch-case - замените на if-else-if-else.
кстати,с этими ифам надо быть вообще поаккуратней -
http://www.microchip.ru/phorum/read.php?f=2&i=59043&t=58895#reply_59043

и обычно просто так тупо не складывают. Может оказаться полезными суммировать на интервале,
кратном 20 мс.(есть такое вот магическое число в России и европейском зарубежье)



Отправка отредактированного (16/07/2006 13:47)


 
 Re: АЦП в PIC16F676
Автор: airens ()
Дата:   17/07/2006 13:29

Да, похоже память конилась...

Greg: насчет Chold так и поступлю

P.S> Кстати, а будет вообще толк от приведенного кода? Ведь
вместо операции деления я просто выполняб сдвиг...

int an_read(channel)
{
unsigned long res = 0;
CHS0 = channel; //установка канала АЦП
for (j=0;j<256;j++) //выполняем 256 раз считывание информации
с АЦП
{
i=0;
while (i<100) {i++;}; //ждем 12мкС до зарядки Chold
GODONE = 1; //начинаем преобразование
while (GODONE != 0); //ждем окончания
res+= ((ADRESH<<8) | ADRESL); //прибавляем результат к
функции
}
res = (int)(res >> 8);
return (res);
}



Отправка отредактированного (17/07/2006 13:36)


 
 Re: АЦП в PIC16F676
Автор: Greg ()
Дата:   17/07/2006 18:31

airens писал(а):

>while (i<100) {i++;}; //ждем 12мкС до зарядки Chold

это что за частота процессора у вас?
офигеть.

выполнение одной 1-cycle инструкции - частота генератора деленная на 4


 
 Re: АЦП в PIC16F676
Автор: airens ()
Дата:   17/07/2006 21:23

Да это я пока с запасом :) Вообще у меня там 1-2 стоять будет. Частота 4Мгц


 
 Re: зарядное устройство делаем?
Автор: URY ()
Дата:   18/07/2006 06:27

А силовую часть сам разрабатываешь, иль используешь готовый девайс?


 
 Re: зарядное устройство делаем?
Автор: airens ()
Дата:   18/07/2006 09:39

Свою использую. Да та схема-то 3 транзистор да обвязка ;)


 
 Re: зарядное устройство делаем?
Автор: URY ()
Дата:   18/07/2006 09:55

У тебя будет выполняться весь цикл зарядки что ли?
Разрядка(до 1V) - зарядка(-V/dt)?

А таймер,измерение температуры будет?


 
 Re: АЦП в PIC16F676
Автор: maagalex ()
Дата:   18/07/2006 14:01

a ne proshe vzat gotovi pic (ili max i td) dlja zarjadki acumulatorov?..


 
 Re: зарядное устройство делаем?
Автор: airens ()
Дата:   18/07/2006 17:13

maagalex: посчитай сколько будут стоить 2 max-а и поймешь почему я выбрал PIC

URY: По умолчанию начинается просто дозарядка -V/dt, но можно с помощью кнопки
выбрать режим с предварительной разрядкой до 1В. Таймер использую для отсчета
промежутков времени между измерениями и контролем напряжения на АК (сейчас стоит 5
секунд). На измерение температуры портов уже не хватило ;-)


 
 Re: зарядное устройство делаем?
Автор: maagalex ()
Дата:   18/07/2006 20:39

airens писал(а):

> maagalex: посчитай сколько будут стоить 2 max-а и поймешь
> почему я выбрал PIC
>
а что ты решил массовый выпуск зарядных устройств начать?..
не выйдет-этот продукт и так уже массовый и пробиваться бессмысленно..
..а для себя хоть 10 максов дешевле разработки алгоритмов и тд и тп


 
 Re: зарядное устройство делаем?
Автор: airens ()
Дата:   18/07/2006 21:36

Что значит дешевле разработки алгоритмов? Я сам их разрабатываю. А если бы для меня деньги не были важны я бы просто
купил себе ЗУ за 1к рублей