Что может врать - АЦП или Вльтметр?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Что может врать - АЦП или Вльтметр?

Сообщение zhu4er »

Дарова котярам! Возникла тут проблемка с АЦП на Тини26L . Вот схема вольтметра:
Изображение
Как видно из схемы все подключения стандартные и из даташита. Делитель напряжения 22кОм переменник и 100кОм на вход измеряемого напряжения. По мультиметру DT9208A выставляю такую картину: на входе допустим 15 вольт на выходе с делителя 1,5 вольта. Опорное напряжение внутреннее 2,56 вольта. Генератор МК на 8МГц внутренний. Преобразование АЦП ставлю 8 бит:
А вот текст программы:

Код: Выделить всё

Chip type           : ATtiny26L
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
External RAM size   : 0
Data Stack size     : 32
*****************************************************/

#include <tiny26.h>

#include <delay.h>

unsigned char adc_data;
#define ADC_VREF_TYPE 0xE0

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
// Read the 8 most significant bits
// of the AD conversion result
adc_data=ADCH;
}

// Read the 8 most significant bits
// of the AD conversion result
// with noise canceling
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
#asm
    in   r30,mcucr
    cbr  r30,__sm_mask
    sbr  r30,__se_bit | __sm_adc_noise_red
    out  mcucr,r30
    sleep
    cbr  r30,__se_bit
    out  mcucr,r30
#endasm
return adc_data;
}

// Declare your global variables here
unsigned char Dig[10], Disp1, Disp2, Disp3, adc;
unsigned int k, j = 0;

//подпрограмма выделения цифры из трёхзначного числа
void Display (int Num)
{
char Num1, Num2, Num3;
Num1=Num2=0;
while (Num >= 100)  //сотни
{
Num -= 100;
Num1++;
}
while (Num >= 10)  //десятки
{
Num -= 10;
Num2++;
}
Num3 = Num;        //единицы
Disp1 = Dig[Num1];
Disp2 = Dig[Num2];
Disp3 = Dig[Num3];
}

void indikator ()
{
if (k == 4) k = 0;
else
{
k++;
switch (k)
{
case 1: //Сотни
        PORTB = Disp1;
        PORTA.4 = 0;
        PORTA.5 = 0;
        PORTA.6 = 1;
        PORTA.7 = 1;
        delay_ms (4);

break;
case 2: //Десятки
        PORTB = Disp2;
        PORTA.4 = 0;
        PORTA.5 = 1;
        PORTA.6 = 0;
        PORTA.7 = 0;
        delay_ms (4);

break;
case 3: //Единицы
        PORTB = Disp3;
        PORTA.4 = 1;
        PORTA.5 = 0;
        PORTA.6 = 0;
        PORTA.7 = 1;
        delay_ms (4);

     };
      };
};



void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
// State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0xF0;

// Port B initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x00;
DDRB=0x7F;



// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSR=0x8B;

//ввод массива выводимых знаков
Dig[0] = 0b10000001;
Dig[1] = 0b11001111;
Dig[2] = 0b10010010;
Dig[3] = 0b10000110;
Dig[4] = 0b11001100;
Dig[5] = 0b10100100;
Dig[6] = 0b11100000;
Dig[7] = 0b10001111;
Dig[8] = 0b10000000;
Dig[9] = 0b10001100;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      adc=read_adc(0); //берём данные из АЦП(0)
      Display(adc); //данные на дисплей
      for (j=0;j<100;j++) {
      indikator ();      
      };
};
}
Программа начинает работать всё показывает, вычисляет. НО! Показания АЦП с показаниями мультиметра не сходятся. Причём АЦП всегда показывает меньше. На мультиметре 1,25В на индикаторе устройства 1,1В, на мультиметре 5В - на индикаторе 4.7В, на мультиметре 12В - на индикаторе 11,2В, на мультиметре 19В - на индикаторе 17,7В. Откуда такая разница??? Погрешность какая-то возрастающая с возрастанием напряжения. Помогите ребятки.
Вложения
Снимок.JPG
(117.11 КБ) 10460 скачиваний
Даже у стен есть уши...
Реклама
Bar_boss
Встал на лапы
Сообщения: 134
Зарегистрирован: Сб янв 09, 2010 22:21:24

Re: Что может врать - АЦП или Вльтметр?

Сообщение Bar_boss »

Получается, что погрешность НЕЛИНЕЙНАЯ. :? Очень странно..... А эта погрешность у тебя в реальном "железе" или в Протеусе?

Вот смотри, здесь я делал вольтметр, правда, на пике - http://electromost.com/index/termovoltmetr/0-40. Предел измерения тоже от нуля до 25В. Опорное напряжение равно напряжению питания - т.е. 5В. Попробуй может за опору тоже взять напряжение питания и посмотри, что получится.
Реклама
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: Что может врать - АЦП или Вльтметр?

Сообщение zhu4er »

Погрешность действительно нелинейная. Всё уже сделано в реальном железе. И вот такая вот засада. Наводки от транса не могут быть, тк транс - ТОР. Фиговина нездоровая получается. Пробовал разные режимы АЦП - один и тот же результат! А может у меня внутреннее опорное напряжение не 2,56В. Как проверить?
Даже у стен есть уши...
Bar_boss
Встал на лапы
Сообщения: 134
Зарегистрирован: Сб янв 09, 2010 22:21:24

Re: Что может врать - АЦП или Вльтметр?

Сообщение Bar_boss »

Ну а если всё же опорное изменить до +5? Запасного МК нет что бы подкинуть замену? И ещё подскажи - для чего на схеме конденсатор С2? Он никак не связан с АЦП?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: Что может врать - АЦП или Вльтметр?

Сообщение zhu4er »

Ларчик просто открывался! Потенциометром выставил нужное напряжение на индикаторе. Теперь максимальная разница на измеряемом диапазоне не превышает 4мВ, что для домашних условий просто зашибись. Тему мона закрыть!
А кондёрчик С2 это к АЦП как раз и относится. Если ты выставляешь внутреннее опорное напряжение на 2.56В, то кондёрчик от вывода AREF на землю ОБЯЗАТЕЛЕН!!! Можно конечно и без него, но надёжность и точность измерения упадёт.
В даташите всё на писано, правда на буржуйском, но общий смысл иногда понятен
Последний раз редактировалось zhu4er Вс фев 06, 2011 00:03:23, всего редактировалось 1 раз.
Даже у стен есть уши...
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Что может врать - АЦП или Вльтметр?

Сообщение md5sum »

Погрешность 0,93.
И она достаточно легко объяснима:

Код: Выделить всё

VINT Internal Voltage Reference min 2.4 typ 2.7 max 2.9 V
ATtiny26L Datasheet Rev. 1477K-08/10
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Аватара пользователя
zhu4er
Вымогатель припоя
Сообщения: 544
Зарегистрирован: Пт июн 04, 2010 17:40:13
Откуда: Непокорный город-герой Севастополь

Re: Что может врать - АЦП или Вльтметр?

Сообщение zhu4er »

md5sum писал(а):Погрешность 0,93.
И она достаточно легко объяснима:

Код: Выделить всё

VINT Internal Voltage Reference min 2.4 typ 2.7 max 2.9 V
ATtiny26L Datasheet Rev. 1477K-08/10
Я это уже понял и прочитал в ДШ - поэтому подстроил потцом на нужное напряжение.
ВСЕМ СПАСИБО!!!
Даже у стен есть уши...
Bar_boss
Встал на лапы
Сообщения: 134
Зарегистрирован: Сб янв 09, 2010 22:21:24

Re: Что может врать - АЦП или Вльтметр?

Сообщение Bar_boss »

zhu4er писал(а):Ларчик просто открывался! Потенциометром выставил нужное напряжение на индикаторе. Теперь максимальная разница на измеряемом диапазоне не превышает 4мВ, что для домашних условий просто зашибись. Тему мона закрыть!
Так обычно настройка вольтметров с этого и начинается, я считал это само собой разумеещимся :)) Только нелинейность с толку сбила. Ну что ж, поздравляю, главное разобрался что к чему.
Аватара пользователя
anatol378
Мудрый кот
Сообщения: 1833
Зарегистрирован: Вс окт 04, 2009 13:23:12
Откуда: н. новгород

Re: Что может врать - АЦП или Вльтметр?

Сообщение anatol378 »

Интересно. а какое напряжение на С2. и равно ли оно 2,56В?
Лучше умному тупить, чем тупому умничать
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: Что может врать - АЦП или Вльтметр?

Сообщение Roman Venom »

Теперь максимальная разница на измеряемом диапазоне не превышает 4мВ, что для домашних условий просто зашибись.
Какое совпадение! У меня на меге16 те же 4мв!!!! :))
Успех - императив!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»