Как видно из схемы все подключения стандартные и из даташита. Делитель напряжения 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 ();
};
};
}


