А на ногу процессора в реальной схеме ставится стабилитрон 4.7 вольта, и все там ОК!
Есть вот такой исходник на 3х фазный мож кто поможет переделать под схему что я выложил ранее...
Спойлер
Код: Выделить всё
// 1. АЦП на частоте 125 кГц цифрует сигнал. Обработчик прерывания Считает суммы отсчетов и их кол-во:
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
dword adc_data, temp;
// Read the AD conversion result
adc_data=ADCW&0xFFFE;
if(isU)
{ // U
temp=adc_data; //*adc_data;
sqr_summU+=temp;
countU++;
} // if
else
{ // I
temp=adc_data; //*adc_data;
sqr_summI+=temp;
countI++;
} // else
} // adc_isr
//2. Главная программа меряет по очереди ток и напряжение:
//.............
// Измерение напряжения
isU=1;
sqr_summU=0;
countU=0;
ADMUX&=0xFE; // ADC0 - канал напряжения
// Запуск АЦП
ADCSRA|=0x40; // ADCSC - Start ADC
startMs=ms;
// ожидание 21 мс (20мс - период 50 Гц)
while (abs (ms-startMs)<21);
// стоп АЦП
ADCSRA&=0xBF; // 10111111 = BF
//.............
//для тока также, только переменные другие. Переменная ms глобальная - TC1 по прерыванию считает миллисекунды.
//3. Когда оба померяли, вычисляем
// Расчет напряжения
// Среднеквадратическое
// Urms=sqrt(sum(u(i)^2)/N); u(i) - мгновенные отсчеты (с АЦП), i=1..N
f_sqr_summU = ((float)sqr_summU)/countU; // ср. арифм.
// f_sqr_summ=sqrt(f_sqr_summ); // Urms (отсчеты АЦП)
// Uацп=ADC*Vref/1024=ADC*0.005
U = f_sqr_summU*0.005;
// Uвх=Urms*109.52
U*=109.52;
// Расчет тока
// Среднеквадратическое
// Urms=sqrt(sum(u(i)^2)/N); u(i) - мгновенные отсчеты (с АЦП), i=1..N
f_sqr_summI = ((float)sqr_summI)/countI; // ср. арифм.
// f_sqr_summ=sqrt(f_sqr_summ); // Urms (отсчеты АЦП)
// Uацп=ADC*Vref/1024=ADC*0.005
I = f_sqr_summI*0.005;
// Iн=500*Uацп/148,86 =Uацп*3.359
I*=3.359;
// S - Полная мощность
S_temp=((dword)I*U);
S=S_temp;
}



