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
Могу с уверенностью сказать, измеряет частоту до 24 МГц
Проверил лично на GPS калибраторе, собранном по схеме широко известного в узких кругах радиолюбителя)
Привет. Повторил проект частотомера , заработал. При подачи сигнала c d11 на d5 идет отображение частоты 8 000 228 . Как повысить точность ?
#define CAL 62502; //62499 = 1 sec
надо подобрать этот параметр, что бы время измерения было точно 1 секунда. Сама ардуина не может быть источником эталонной частоты, частота зависит от точности кварца, для калибровки лучше использовать генератор частоты.
Как умножить на 60 показания выводимые на дисплей?
Нужен тахометр об/мин
f_out = tic*0xFFFF + TCNT1;
>>>
f_out = (tic*0xFFFF + TCNT1)*60;
Спасибо)