Вольтметр на 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. Владимир пишет 09.03.2011 в 18:16 #

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

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

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

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

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

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

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