Ac voltage and current measuring with PIC.

Status
Not open for further replies.

bobx

Junior Member level 3
Joined
Jan 11, 2010
Messages
29
Helped
3
Reputation
6
Reaction score
3
Trophy points
1,283
Location
TEHRAN
Activity points
1,531
Hello,everybody.I want to measure Ac currents and voltages with the following specifications;

My circuit & program code specifications;

Applied AC voltage 100Vpeak via a 1/20 resistor network attenuator to AN0/pin2 of PIC18F452/XTAL;20MHZ.

I wrote a program to show 25000Vrms/35355Vpeak,so we have a factor of;250x20x0.707xVadc=3535Vadc.[The followings are all detailes; my software].

But it shows only 0 on the LCD.For diagnosis I added this instruction to my program;
adclong0 =25000;then it showed on the LCD correctly.I even test my prog with LTC1966 chip[DC to RMS converter] or bridge or super rectifire[op-amp rectifier] or op-amp for voltage signal input conditioning but it does not work and just shows 0000000V.

Would you please tell me what is wrong with my program?

**My program;
/*
MCU: PIC18F452.

Oscillator: HS, 20.0000 MHz

GLCD: PG24064F [ T6963C driver/display 240x64 pixels ].

SW: mikroC PRO for PIC.
*/
#include "__T6963C.h"

unsigned long int adclong0=0,adclong1=0;
unsigned int ti=0,tn=0,t0=0,t1=0;
unsigned int xp,xl,yp,yl,xpos=0,ypos=0;
unsigned char ch0=0,ch1=0;
char *message;

//Voltage input calculations

void Display_Adcz(unsigned char ch0) {

extern unsigned int ypos;//To use a Zener at input so we have half wave
//and two zero points possibilities for Ac wave input.


//Get Vpeak from input voltage wave.

LADCV1:ti=ADC_Read(0);//Get ADC value from channel0;read until ti=0.
if(ti==0)goto LADCV2
else goto LADCV1
LADCV2:ti=ADC_Read(0);//1st sample;initial[previous].
tn=ADC_Read(0);//2nd sample;next.
if(tn>ti)goto LADCV2
else t0=ti;


adclong0 = (long)t0 * 5000;//Convert adc reading to milivolts.
adclong0 = adclong0 / 1023;// 0..1023 -> 0-5000mV.

//20=resistor network of input attenutor.
//Vrms = 0.707 Vpeak,[1/1.4142=0.707.].
//Input Transformer conversion index;[250=25000/100.].
//Peak input voltage= 35355v [2500Vrms.] at the primary
//converted to 141.42Vpeak[100Vrms.] peak at the secondary.

adclong0 = adclong0 * 3535;//0.707x20x250=3535.
...
....


Thanks & Regards,
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…