Частотомер на LGT8F328P + 0,91″ I2C 128×32 OLED

0,91″ I2C 128×32 OLED — это компактный дисплей, который использует технологию OLED (Organic Light Emitting Diode) для отображения изображений. Дисплей имеет интерфейс I2C, который обеспечивает простое подключение к микроконтроллерам и другим устройствам.

Основные характеристики дисплея:

— Разрешение 128×32 пикселей.
— Размер дисплея 0,91 дюйма (около 2,3 см).
— Яркость до 150 кд/м².
— Контрастность 2000:1.
— Угол обзора 160 градусов.
— Поддержка интерфейса I2C с адресом 0x3C.

Дисплей 0,91″ I2C 128×32 OLED обеспечивает четкое и яркое отображение информации, которое может быть использовано в широком спектре приложений. Он легко подключается к различным устройствам, таким как Arduino, Raspberry Pi и другим микроконтроллерам.

Дополнительно, OLED-дисплей имеет низкое энергопотребление, что позволяет использовать его в батарейных устройствах. Он также обладает быстрым временем отклика и высокой контрастностью, что делает его идеальным для использования в приложениях, где требуется быстрое и точное отображение информации.

В целом, дисплей 0,91″ I2C 128×32 OLED является отличным выбором для тех, кто ищет компактный и яркий OLED-дисплей с простым подключением по интерфейсу I2C.

В частотомере используется плата разработчика LGT8F328P-LQFP32 MiniEVB, как использовать плату в среде программирования Arduino IDE рассказано в — http://rcl-radio.ru/?p=129966

LGT8F328P-LQFP32 MiniEVB — это плата разработки, основанная на микроконтроллере LGT8F328P с 32 выводами в корпусе LQFP32. Это мощный микроконтроллер, который обеспечивает высокую производительность и широкие возможности для разработки.

Основные характеристики платы LGT8F328P-LQFP32 MiniEVB:

— Микроконтроллер LGT8F328P с тактовой частотой до 32 МГц и 32 Кбайт памяти Flash.
— Поддержка интерфейсов SPI, I2C, UART, ADC и PWM.
— Встроенный USB-интерфейс для программирования и отладки.
— Низкое энергопотребление и поддержка режима сна.
— Поддержка работы от внешнего источника питания 5 В или от USB-порта.

LGT8F328P-LQFP32 MiniEVB — это отличная плата разработки для начинающих и опытных разработчиков, которые хотят создавать проекты на основе микроконтроллера LGT8F328P. Она обеспечивает легкую разработку и отладку приложений, поддерживает широкий спектр интерфейсов и имеет удобный USB-интерфейс для программирования и отладки.

Кроме того, плата LGT8F328P-LQFP32 MiniEVB имеет компактный размер и низкое энергопотребление, что позволяет использовать ее в различных приложениях, включая портативные устройства и системы автоматизации.

На вход D5 подается сигнал уровня TTL, а на выходе D11 присутствует импульсный сигнала (меандр) для тестирования работы частотомера.

Схема частотомера

При прошивке микроконтроллера рекомендую ознакомится со следующей статьей —  LGT8F328P-LQFP32 MiniEVB в Arduino IDE , версия платы не ниже 2.0.0

Перед загрузкой скетча необходимо правильно установить настройки платы:

Далее изменить файл библиотеки OLED_I2C, для этого необходимо открыть для редактирования файл OLED_I2C.cpp и изменить параметр как показано на скриншоте:

Значение выделенной строки 0х12 необходимо заменить на 0х02.

После чего можно загрузить скетч:

#define CAL 62502; //62499 = 1 sec 
#define LED 1
#include <Wire.h> 
#include <OLED_I2C.h>           // http://rcl-radio.ru/wp-content/uploads/2022/01/OLED_I2C.zip

  OLED  myOLED(SDA, SCL, 8);
  extern uint8_t SmallFont[],BigNumbers[];
  unsigned long f_out,tic,n;
 
void setup(){
  PORTD |= (1 << PD5); // подтягивающий резистор на PD5 (вход T1)
  DDRB |= (1 << PB3); // D11 OUTPUT 8 MHz
  delay(200);
  noInterrupts();
// 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
  TCCR3A = 0;
  TCCR3B = 0;
  TCNT3=0;
  TCCR3B = (1 << CS32) | (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;
  interrupts();
  Wire.begin();
  myOLED.begin();
  myOLED.setBrightness(100);
  myOLED.clrScr();
  myOLED.update();
  delay(1000);
  }

void loop(){
  myOLED.clrScr();
  myOLED.setFont(BigNumbers);
if(f_out>=10000000)  myOLED.printNumI(f_out/10000000%10, 0, 35);
if(f_out>=1000000)  myOLED.printNumI(f_out/1000000%10, 15, 35);
if(f_out>=100000)  myOLED.printNumI(f_out/100000%10, 35, 35);
if(f_out>=10000)  myOLED.printNumI(f_out/10000%10, 50, 35);
if(f_out>=1000)  myOLED.printNumI(f_out/1000%10, 65, 35);
if(f_out>=100)  myOLED.printNumI(f_out/100%10, 85, 35);
if(f_out>=10)  myOLED.printNumI(f_out/10%10, 100, 35);
  myOLED.printNumI(f_out/1%10, 115, 35);
  myOLED.update();
  delay(1000);
  if(LED==1){
  if(f_out==0){n++;}else{n=0;}
  if(n>=10){myOLED.setBrightness(0);}else{myOLED.setBrightness(100);}
  }else{myOLED.setBrightness(100);}
  }

ISR(TIMER1_OVF_vect) {tic++;}

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

При наличии очень точного импульсного генератора можно откалибровать частотомер при помощи значения счетного регистра:

#define CAL 62499; //62499 = 1 sec

Максимальная частота измерения мне не известна, так нет в наличии генератора с выходной частотой более 10 МГц.

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=7998#p7998

Comments

  1. Могу с уверенностью сказать, измеряет частоту до 24 МГц
    Проверил лично на GPS калибраторе, собранном по схеме широко известного в узких кругах радиолюбителя)

  2. Привет. Повторил проект частотомера , заработал. При подачи сигнала c d11 на d5 идет отображение частоты 8 000 228 . Как повысить точность ?

    1. #define CAL 62502; //62499 = 1 sec

      надо подобрать этот параметр, что бы время измерения было точно 1 секунда. Сама ардуина не может быть источником эталонной частоты, частота зависит от точности кварца, для калибровки лучше использовать генератор частоты.

Добавить комментарий

Войти с помощью: