Вольтметр на PIC16F676 (или работа с АЦП микроконтроллера) old

В статье описан вольтметр, с пределом измерения 50 вольт, сделанный на PIC16F676 или как использовать АЦП этого микроконтроллера.

Схема вольтметра на PIC16F676


Резисторы R1 и R3 были подобранны мною не очень удачно, т.к. 2-ой сегмент индикатора светиться немного тускло, советую подобрать свои значения. Транзистор VT1 использовал КТ3102, его можно заменить на любой другой npn транзистор.

Исходник вольтметра, компилятор HI-TECH PICC 9.50:

#include< pic.h>
__CONFIG(0x031D4);

void low_init()
{

CMCON=0x07;

ADCON1=0b00110000;
/*
|        -
||       - ADCS2
|||      - ADCS1
||||     - ADCS0
|||||    -
||||||   -
|||||||  -
|||||||| -
*/

ADCON0=0b10001101;
/*
|        - ADFM -
||       - VCFG -
|||
||||     - CHS2
|||||    - CHS1
||||||   - CHS0: выбор вывода для АЦП
|||||||  - GO/DONE
|||||||| - ADON
*/
ANS4 = 1;    //    3 - анаологовый

TRISA=0b00010000;
TRISC=0x00;
}

void delay(unsigned int p)
{
unsigned int i;
for(i=0;i

}

void seg7(int c,int s)
{
unsigned char t=0;
PORTA=0b00000000;
switch(s)
{
case 1 :{    t=1;}break;
case 2 :{    t=2;}break;
case 3 :{    t=32;}break;
}
switch(c%10)
{
case 0 : {PORTC=0b00000000;PORTA=t+4;}break;
case 1 : {PORTC=0b00011110;PORTA=t+4;}break;
case 2 : {PORTC=0b00010001;PORTA=t;}break;
case 3 : {PORTC=0b00010100;PORTA=t;}break;
case 4 : {PORTC=0b00001110;PORTA=t;}break;
case 5 : {PORTC=0b00100100;PORTA=t;}break;
case 6 : {PORTC=0b00100000;PORTA=t;}break;
case 7 : {PORTC=0b00010110;PORTA=t+4;}break;
case 8 : {PORTC=0b00000000;PORTA=t;}break;
case 9 : {PORTC=0b00000100;PORTA=t;}break;
}
}

void main()
{
int i,v,v1;
long int v2;
float vf;
low_init();
delay(10000);
while(1)
{
GODONE=1;        //    Устанавливаем бит GO для того что бы сделать опрос АЦП
for(i=0;i < 200;i++)
{
seg7(v1/10,1);
delay(5);
seg7(v1%10,2);
delay(5);
seg7(v2/10,3);
delay(5);
}
delay(100);
while(GODONE){}
v=ADRESL;            //    читаем младший байт с АЦП
i=ADRESH;            //    читаем старший байт с АЦП (а именно 2 байта с него)
v=v+i*256;            //    складываем младщий и старший байт с АЦП

v1=(v*10/241)%100;    //    преобразуем
vf=1000/241;
v2=(int)((float)v/241*1000)%100;
}
}

Плата вольтметра на PIC16F676

В схеме применён красный индикатор с общим анодом — BA56-12GWA.
Все элементы на плате, кроме индикатора и штырьков, располагаются со стороны дорожек. Резисторы R6-R12 чип 0805, резистор R1 на 0.125Вт в обычном корпусе, все остальные детали 1206. Резистор R4 построечный, припаивается на две большие площадки в верхним левом углу. Панельку припаивают следующим образом: лишний вывод удалить, ножки отогнуть в стороны и немного укоротить, после чего всё залуживают и припаивают, отверстия в плате под панельку сверлить не обязательно; для контроллера же можно просверлить отверстия и припаивать как обычно, только со стороны дорожек.

Настройка вольтметра производиться путём подстройки резистора R4 и подборкой делителя (в статье делитель 241).

Данный архив содержит:

  • Исходники
  • Прошивку
  • Печатную плату в формате *.lay

Скачать

Вид выносного стабилизата

Данный вольтметр был собран как индикатор к одному из блоков питания (точнее выносному стабилизатору), в данной статье представлен только сам вольтметр, компоненты блока питания были удалены.

Статья обновлена 16 декабря 2010.

Дополнение к статье от Владимира

Схема вольтметра на PIC16F676

Скачать печатки под DIP14 и SO14

24 комментария на « Вольтметр на PIC16F676 (или работа с АЦП микроконтроллера) old»

  1. Алекс пишет 21.01.2011 в 15:32 #

    Почему у меня горят точки на всех трех знаках ?

  2. Alex_EXE пишет 21.01.2011 в 23:39 #

    Не знаю.
    Скорее всего – неправильно собранна схема. Смотрите транзистор VT1 и его обвязку.

  3. Тимо-ха пишет 28.01.2011 в 20:26 #

    А можно как-нибудь увеличить предел измерения до 99 в?

  4. Олег пишет 28.01.2011 в 20:37 #

    Собрал все работает нормально.Но тускло горит 2-ой индикатор-какие значения нужно подобрать резисторов?Мерцает с определенной частотой последний сегмент (после запятой) это нормально или нет.Спасибо.

  5. Alex_EXE пишет 29.01.2011 в 00:55 #

    А можно как-нибудь увеличить предел измерения до 99 в?

    Самый простой вариант, при увеличении предела измерения до 100В, — увеличить сопротивление делителя — R2 поднять где-нить до 200кОм. Не следует забывать, что настраивать следует на малом напряжении, т.к. если переменный резистор выкрутить на максимум то на вход контроллера попадёт большое напряжение, что выведет МК из строя.
    В феврале статья будет дополнена новыми решениями и схемами.

    Собрал все работает нормально.Но тускло горит 2-ой индикатор-какие значения нужно подобрать резисторов?Мерцает с определенной частотой последний сегмент (после запятой) это нормально или нет.Спасибо.

    Эти резисторы так и не были мной идеально подобранны, так что подбирать вам их придётся самим.
    Мерцание последнего сегмента в этой конструкции – нормально, он мерцает тогда, когда происходит опрос АЦП.

  6. Юрий пишет 30.01.2011 в 20:49 #

    А у меня не работает, что то с прошивкой(((

  7. Alex_EXE пишет 30.01.2011 в 23:57 #

    С прошивкой всё в порядке, смотрите схему.
    Также есть исходники, можете их подправить под свои нужды и (или) перекомпилировать.

  8. Юрий пишет 31.01.2011 в 01:49 #

    я все правильно зделал, оно совсем не работает.Я не впервые что то делаю

  9. Юрий пишет 02.02.2011 в 01:03 #

    Спасиба автору, все заработало отлично, я рад)))

  10. Тимо-ха пишет 22.02.2011 в 21:07 #

    Собрал работает но измеряет напряжение только до 42,4в и немного мерцает последний разряд индикатора, а так все ничего, автору спасибо за хорошую работу

  11. Alex_EXE пишет 22.02.2011 в 23:30 #

    Скоро схема и печатка будут обновлены.
    Будут расширены возможности, добавлена защита, постараюсь убрать мерцания.

  12. Юрий пишет 24.02.2011 в 15:27 #

    А мерцания последнего сегмента будут убраны за счет прошивки?

  13. Alex_EXE пишет 24.02.2011 в 21:46 #

    Если получится — то да.

  14. ejkot пишет 27.02.2011 в 16:02 #

    Я вот глядя на эту схему, пытаюсь создать совмещенный ампер-вольтметр, на двух трехразрядных индикаторах. Пока правда в протеусе. Есть пара вопросов:
    Нормально ли тянет PIC навешанный на него индикатор, без усилительных каскадов? Интересно, потянет ли у меня два индикатора, при условии что катоды у меня подключены через сдвиговый регистр 74AC164.
    И еще один вопросец: Никак не пойму, а на кой леший там транзистор для DP, если все остальное напрямки подключено?

  15. Юрий пишет 02.03.2011 в 04:22 #

    Про DP и я сразу понял.В прошивке нет точки а как выход его подключить к второму выходу анода и она белет гореть только там все время. Наверное из-за брака выводов микросхемы так сделано))

  16. ejkot пишет 04.03.2011 в 23:01 #

    2Юрий: А чем программировал 16F676, не можешь ткнуть в самый простой программатор?

  17. Юрий пишет 05.03.2011 в 03:34 #

    программатор

  18. Alex_EXE пишет 05.03.2011 в 20:39 #

    На сайте есть 2 схемы программаторов:
    Программатор EXTRA-PIC
    Простейший программатор для PIC

  19. Юрий пишет 07.03.2011 в 23:54 #

    НУ как там дела Алекс с прошивкой новой? где убрано мерцание последнего индикатора.

  20. Владимир пишет 09.03.2011 в 18:11 #

    СПАСИБО АВТОРУ!!! за хорошее устройство!!! С DP там всё прекрасно работает. Только я всётаки сразу поставил на аноды три транзистора.

  21. Владимир пишет 09.03.2011 в 18:16 #

    Как добавить рисунок или фото?

  22. Alex_EXE пишет 09.03.2011 в 21:56 #

    Вышлите мне ссылки на них через обратную связь, или ссылку на них в файлообменнике.
    Юрий — пока в разработке, схема и печатка тоже немного изменяться.

  23. Alex_EXE пишет 11.03.2011 в 00:24 #

    Владимир, спасибо за схему и печатки.

  24. Владимир пишет 18.03.2011 в 16:35 #

    Как успехи в плане прошивки?