R метр на atmega8

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Подскажите пожалуста как можно реализовать на atmega 8 измерение сопротивления к пример от 1 ом до 1 мом
пробовал делать на делители, но возникают неточноти измерения меньше 1 ком не получалось делать,
также как и на усилители предварительном.
Наткнулся на прибор вот этот http://radiokot.ru/forum/viewtopic.php?f=2&t=84479 ,каким методом сдесь мериют ,можете расписать методы измерения сопротивления ,если возможно со схемами.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4752
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Вот тут http://radiokot.ru/forum/viewtopic.php?f=25&t=88489 кроме описания прибора есть ссылки, где описываются все принципы измерения.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

vem566 писал(а):Вот тут http://radiokot.ru/forum/viewtopic.php?f=25&t=88489 кроме описания прибора есть ссылки, где описываются все принципы измерения.
Почитал.
Дали мне эту статью про принцип работы измерения сопротивления,попробовал на практике ,все равно приходиться домножать в ацп ,тоесть например на 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 процент или ниже

вот моя схема
123.JPG
(102.72 КБ) 356 скачиваний
на схеме не 12 вольт а 5!!!
Ответить

Вернуться в «AVR»