1

Тема: Измерить индуктивности на LGT8F328

Основная статья - http://rcl-radio.ru/?p=131780

http://forum.rcl-radio.ru/uploads/images/2024/03/353ab3492ec65495a376c0450c7b551b.png

http://forum.rcl-radio.ru/uploads/images/2024/03/20e8c52c6636d0e357e3466737d678a3.png

http://forum.rcl-radio.ru/uploads/images/2024/03/d2878214264dfc1e03aa05dc7ee63dc3.png

http://forum.rcl-radio.ru/uploads/images/2024/03/315a6cdae72e6d38cf755efa12ee766b.png


#include <Wire.h> 
#include <U8glib.h>            // https://github.com/olikraus/u8glib/
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 

#define CAL 31249; 
#define CAP    1000.0 // pF

extern uint8_t SmallFont[],BigNumbers[];
unsigned long f_out,tic;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  PORTD |= (1 << PD5); // подтягивающий резистор на PD5 (вход T1)
  // TIMER_1 INPUT T1
  TCCR1A = 0;TCCR1B = 0;TCNT1=0;
  TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10);
  TIMSK1 = (1 << TOIE1);
  TCKCSR = (1 << F2XEN) | (1 << TC2XS1);
// TIMER_3 1 SEC
// (32000000/((31249+1)x1024))=1 Hz
  TCCR3A = 0;
  TCCR3B = 0;
  TCNT3=0;
  TCCR3B = (1 << CS32) |(1 << CS30) | (1 << WGM32);
  TIMSK3 = (1 << OCIE3A);
  OCR3A = CAL;
// TIMER_2 OUTPUT 8 MHz
TCCR2A = 0;TCCR2B = 0;TCNT2=0;
  TCCR2A = 1 << COM2A0 |1 << WGM21;
  TCCR2B = 1 << CS20;
  OCR2A = 0;
  C0SR = 0;C0XR=0;
  C0XR |=(1<<C0OE); // C0OE[7] = 1, выход компаратора AC0 для внешнего порта PD2
  // ВЫБОР ИНВЕРСНОГО ВХОДА
  ADCSRB = 0b01000000;// ADMUX
  /*
  CME01[7] CME00[6] Источник входного сигнала AC0
  0        0        ACXN
  0        1        ADMUX
  1        0        DFFO
  */
  ADMUX = 0b00000000; // CHMUX[3:0] = 0000 Источник входного сигнала PC0 (A0)
  // ВЫБОР НЕИНВЕРСНОГО ВХОДА
  C0SR &=~(1<<C0BG);C0XR &=~(1<<C0PS0);
  /*
  C0BG C0PS0 Источник входного сигнала AC0
  0    0     AC0P
  0    1     ACXP
  1    0     DAO
  */
  delay(100);
}

void loop() {
 float l_iz = 1/(4*3.14*3.14*f_out*f_out*CAP*pow(10,-12))*1000000.0;
 if(l_iz>100000||l_iz<0){l_iz=0;}
 Serial.print(l_iz,2);Serial.println(" uH");
 Serial.print(f_out);Serial.println(" Hz");
  u8g.firstPage(); do {
  u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(0,25);
    if(l_iz<1000){u8g.print(l_iz,2);u8g.drawStr(97,25,"uH");}
    if(l_iz>=1000){u8g.print(l_iz/1000,2);u8g.drawStr(97,25,"mH");}
  }while( u8g.nextPage() );
 delay(1000);
}


ISR(TIMER1_OVF_vect) {tic++;}

ISR(TIMER3_vect) {
  if (TIFR3 & (1 << OCF3A)){
      TIFR3 = 1 << OCF3A;
      f_out = tic*0xFFFF + TCNT1;
      tic=0;TCNT1=0;
  }}