1

Тема: LGT8F328 КОМПАРАТОР

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

void setup() {
  Serial.begin(9600);
  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
  */
}

void loop() {
 Serial.println((C0SR >> 5) & 1, BIN);
 delay(1000);
}

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

2

Re: LGT8F328 КОМПАРАТОР

void setup() {
  Serial.begin(9600);
  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
  */

  C0SR |= (1<<C0IE); // РАЗРЕШИТЬ ПРЕРЫВАНИЯ
  C0SR |= (1<<C0IS1)|(1<<C0IS0); // Режим прерывания - Нарастающий фронт

  C0XR |= (1<<C0FEN)|0B11;
  // Разрешить управление цифровым фильтром компаратора
  // Установка ширины цифрового фильтра компаратора 11 = 96us
  
}

void loop() {
 Serial.println((C0SR >> 5) & 1);

 delay(1000);

}

ISR(ANALOG_COMP_0_vect){
  Serial.println("YYYY");
  }

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

3

Re: LGT8F328 КОМПАРАТОР

volatile int x;
float f;
bool w;


void setup() {
  Serial.begin(9600);
  TCNT1 = 0;
  TCCR1A = 0;
  TCCR1C = 0;
  TCCR1B = 1;
  TIMSK1 |= (1 << TOIE1);
  
  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
  */

   C0SR |= (1<<C0IE); // РАЗРЕШИТЬ ПРЕРЫВАНИЯ
   C0SR |= (1<<C0IS1)|(1<<C0IS0); // Режим прерывания - Нарастающий фронт
}

void loop() {
   Serial.print(f/32,0); 
   Serial.println(" uS");
   delay(1000);
}

ISR(ANALOG_COMP_0_vect){f = x * 65535 + TCNT1;x=0;TCNT1=0;}
ISR(TIMER1_OVF_vect){x++;}

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

4

Re: LGT8F328 КОМПАРАТОР

#define CALL   58.00
#define CALL_0 26.50

volatile int x;
long f;

void setup() {
  Serial.begin(9600);
  DDRD |= (1<<PD7);
  
  TCNT1 = 0;
  TCCR1A = 0;
  TCCR1C = 0;
  TCCR1B = 1;
  TIMSK1 |= (1 << TOIE1);
  
  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
  */
  ADMUX |= 1 << REFS0;
  ADCSRA |= 1 << ADEN | 1 << ADSC | 1 << ADATE | 0b111;
}

void loop() {
  PORTD &=~ (1<<PD7);
  while((ADCSRA & (1 << ADIF)) == 0);
  while((ADCL|ADCH << 8)>10);
   
  PORTD |= (1<<PD7); TCNT1=0;x=0;
  
  while(((C0SR >> 5) & 1)==1){f = x * 65535 + TCNT1;}
  Serial.print(f/CALL-CALL_0,1);Serial.println(" pF");
  delay(1000);
}

ISR(TIMER1_OVF_vect){x++;}

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