Почитал.
Дали мне эту статью про принцип работы измерения сопротивления,попробовал на практике ,все равно приходиться домножать в ацп ,тоесть например на 2 ом покажет 2 ома на 50 омах покажет 60 ом уже приходиться умножать вот пример моего кода:
Код: Выделить всё
void function3(void)
{
char lcd_buffer[31];
label13:
while(1)
{
while(1)
{
PORTB.5=1;
delay_ms(5);
PORTB.3=1;
delay_ms(5);
i=140;
result1=((5.00*adc_data[2]*i)/1024.00);
sprintf(lcd_buffer," R(om)=%.2f ",result1);
lcd_puts(lcd_buffer);
if ((result1>50)&&(result1<=200))
{
i=150;
goto label4;}
if ((result1>200)&&(result1<=400))
{
i=250;
goto label4;}
if ((result1>400)&&(result1<=500))
{
i=350;
goto label4;}
label4:
lcd_clear();
result2=((5.00*adc_data[2]*i)/1024.00);
sprintf(lcd_buffer," R(om)=%.2f ",result2);
lcd_puts(lcd_buffer);
if (result1>500)
{ lcd_clear();
lcd_puts(" R>1(kom)");
}
while(PINB.1){};
break;
}
lcd_clear();
while(1)
{
PORTB.5=0;
delay_ms(5);
PORTB.3=1;
delay_ms(5);
i=140;
result1=((5.00*adc_data[2]*i)/1024.00);
sprintf(lcd_buffer," R(kom)=%.2f ",result1);
lcd_puts(lcd_buffer);
if ((result1>50)&&(result1<=200))
{
i=150;
goto label9;}
if ((result1>200)&&(result1<=400))
{
i=250;
goto label9;}
if ((result1>400)&&(result1<=500))
{
i=350;
goto label9;}
label9:
lcd_clear();
result2=((5.00*adc_data[2]*i)/1024.00);
sprintf(lcd_buffer," R(kom)=%.2f ",result2);
lcd_puts(lcd_buffer);
while(PINB.1){};
break;
}
while(1)
{delay_ms(10);
if (PINB.1==0)
{goto label13;}
while(PINB.0){};
goto label15; }
}
label15:
}
while(PINB.1){}; - переключение между 680 ом и 470 ком, 680 ом от 0 до 1000 ом ,а 470 ком выше 1 ком
приходиться писать вот такое
Код: Выделить всё
if ((result1>50)&&(result1<=200))
{
i=150;
goto label9;}
if ((result1>200)&&(result1<=400))
{
i=250;
goto label9;}
if ((result1>400)&&(result1<=500))
{
i=350;
goto label9;}
возможно ли сделать без i=150,250,350?
так можно сума сойти можно ли как то задать одну функцию или одно число чтобы сопротивл можно было мерить с точностью 1 процент или ниже
вот моя схема
на схеме не 12 вольт а 5!!!