├── keywords.txt ├── library.properties ├── src ├── Geekble_Oscillator.cpp └── Geekble_Oscillator.h ├── examples └── Frequency_Sweep │ └── Frequency_Sweep.ino └── README.md /keywords.txt: -------------------------------------------------------------------------------- 1 | Geekble_Oscillator KEYWORD1 2 | Divide_8MHz_by KEYWORD2 3 | Run KEYWORD3 4 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=Geekble_Oscillator 2 | version=1.0.3 3 | author=SooDragon 4 | maintainer=SooDragon@geekble.kr 5 | sentence=Generate pulse from 31.25KHz to 8MHz 6 | paragraph=Generate 50% duty pulse from 31.25KHz to 8MHz. Other Functions/Library depend on Timer Counter 2 will affected. 7 | category=Timing 8 | url=https://github.com/geekbleofficial/Geekble_Oscillator 9 | architectures=avr 10 | -------------------------------------------------------------------------------- /src/Geekble_Oscillator.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Geekble_Oscillator.cpp - Library for generate high frequency pulses. 3 | Created by SooDragon @ Geekble Circuit Maker, April 19, 2021. 4 | Released into the public domain. 5 | */ 6 | #include 7 | #include "Geekble_Oscillator.h" 8 | 9 | Geekble_Oscillator::Geekble_Oscillator() 10 | { 11 | // Set Timer Counter 2 to default 12 | TCCR2A = 0; 13 | TCCR2B = 0; 14 | TCNT2 = 0; 15 | TIMSK2 = 0; 16 | 17 | // Waveform Generation Mode 7, Fast PWM, Top = OCRA 18 | TCCR2A |= (3 << WGM20); 19 | TCCR2B |= (1 << WGM22); 20 | } 21 | 22 | void Geekble_Oscillator::Divide_8MHz_by(uint16_t Divide_Variable) 23 | { 24 | // Output Frequency = 8MHz / Divide_Variable 25 | // Divide_Variable 1 ~ 256 26 | if (Divide_Variable < 1) 27 | { 28 | Divide_Variable = 1; 29 | } 30 | if (256 < Divide_Variable) 31 | { 32 | Divide_Variable = 256; 33 | } 34 | 35 | OCR2A = (Divide_Variable - 1); 36 | TCNT2 = 0; 37 | } 38 | 39 | // 40 | void Geekble_Oscillator::Run(uint8_t On_Off) 41 | { 42 | if (On_Off == 1) 43 | { 44 | DDRB |= (1 << PINB3); 45 | TCCR2A |= (1 << COM2A0); // Toggle OC2A on compare match 46 | TCCR2B |= (1 << CS20); // Run Timer Counter, No Prescaler 47 | } 48 | else 49 | { 50 | TCCR2A &= ~(3 << COM2A0); // Normal port operation, OC2A disconnected. 51 | TCCR2B &= ~(7 << CS20); // Stop Timer Counter 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/Geekble_Oscillator.h: -------------------------------------------------------------------------------- 1 | /* 2 | Geekble_Oscillator.h - Library for generate high frequency pulses. 3 | Created by SooDragon @ Geekble Circuit Maker, April 19, 2021. 4 | Released into the public domain. 5 | */ 6 | 7 | #ifndef Geekble_Oscillator_h 8 | #define Geekble_Oscillator_h 9 | 10 | #include "Arduino.h" 11 | 12 | class Geekble_Oscillator 13 | { 14 | public: 15 | // Construct Class, Initialize function. 16 | Geekble_Oscillator(); 17 | 18 | // Set output frequency, from 8MHz to 31.25KHz // 8MHz부터 31.25KHz 까지의 출력주파수를 설정합니다. 19 | // Output Frequency = 8MHz / Divide_Variable // 출력주파수 = 8MHz / Divide_Variable 20 | // ex: Geekble_Oscillator OSC (1); -> 8MHz // 예시: Geekble_Oscillator OSC (1); -> 8MHz 21 | // ex: Geekble_Oscillator OSC (10); -> 800KHz // 예시: Geekble_Oscillator OSC (10); -> 800KHz 22 | void Divide_8MHz_by(uint16_t Divide_Variable); 23 | 24 | // Set Oscilltor On or Off // Oscillator를 켜거나 끌지를 선택합니다. 25 | // If On_Off = 1, Output Frequency will generated on Digital pin 11 // On_Off = 1인 경우, Digital pin 11에서 출력주파수가 발생합니다. 26 | // If On_Off = 0, Timer Counter Stop, Digital pin 11 return to normal operation // On_Off = 0인 경우, 타이머카운터가 정지합니다. Digital pin 11은 기본 pin으로 동작합니다. 27 | void Run(uint8_t On_Off); 28 | private: 29 | }; 30 | 31 | 32 | #endif -------------------------------------------------------------------------------- /examples/Frequency_Sweep/Frequency_Sweep.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // Output Frequency = 8MHz / Divide_Variable // 출력주파수 = 8MHz / Divide_Variable 4 | // ex: Geekble_Oscillator OSC (1); -> 8MHz // 예시: Geekble_Oscillator OSC (1); -> 8MHz 5 | // ex: Geekble_Oscillator OSC (10); -> 800KHz // 예시: Geekble_Oscillator OSC (10); -> 800KHz 6 | // Divide_Variable from 1 (8MHz) to 256 (31.25KHz) // Divide_Variable의 범위는 1 (8MHz)에서 256(31.25KHz)까지입니다. 7 | // OC2A pin is used for Oscillator Output, which is Digital pin 11 // 출력포트로 OC2A핀을 사용합니다. 이는 Digital pin 11 핀입니다. 8 | 9 | // In this example, we are going to sweep output frequency // 이 예제에서, 우리는 출력주파수를 변화(Sweep)시킬것입니다. 10 | // Every 1 Sec, Devide_Variable will increase +1 // 매 1초마다, Divide_Variable이 1씩 증가할것입니다. 11 | // It will Sweep Frequency from 8MHz to 31.25KHz // 이는 출력주파수를 8MHz부터 31.25KHz까지 변화(Sweep)하게 합니다. 12 | // Let's get started. // 시작해봅시다. 13 | 14 | // Construct Freq_Sweep // Freq_Sweep을 생성합니다. 15 | Geekble_Oscillator Freq_Sweep; 16 | 17 | void setup() 18 | { 19 | // Initialize Freq_Sweep // Freq_Sweep을 초기화합니다. 20 | Freq_Sweep = Geekble_Oscillator(); 21 | 22 | // Set output frequency, Output Frequency = 8MHz / 1 = 8MHz // 출력주파수를 설정합니다. 출력주파수 = 8MHz / 1 = 8MHz 23 | Freq_Sweep.Divide_8MHz_by(1); 24 | 25 | // Run Oscilltor, Output Frequency now generated on Digital pin 11 // Oscillator를 동작합니다. 출력주파수가 이제 Digital pin 11에서 발생합니다. 26 | Freq_Sweep.Run(1); 27 | } 28 | 29 | void loop() 30 | { 31 | // Sweep Divide_Variable from 1 to 256 every seconds // Divide_Variable 값을 1초간격으로 1부터 256까지 변화시킵니다. 32 | for (int Divide_Variable = 1; Divide_Variable <= 256; Divide_Variable++) 33 | { 34 | Freq_Sweep.Divide_8MHz_by(Divide_Variable); 35 | _delay_ms(1000); 36 | } 37 | 38 | // Terminate Oscillator // 출력을 중단합니다. 39 | Freq_Sweep.Run(0); 40 | 41 | } 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to Geekble_Oscillator
2 | # Geekble_Oscilltor에 오신것을 환영합니다.
3 |
4 | Geekble_Oscillator generates pulse from 8MHz to 31.25KHz with fixed 50% duty ratio.
5 | Geekble_Oscillator는 50% 고정 Duty비를 갖는 8MHz 에서 31.25KHz까지의 펄스를 발생시킵니다.
6 |
7 | This Library occupies Timer Counter 2, which will affect the functions or library depend on Timer Counter 2.
8 | 이 라이브러는 Timer Counter 2를 사용합니다. 따라서 Timer Counter 2를 사용하는 다른 기능 또는 라이브러리에 영향을 미칩니다.
9 |
10 |
11 | 12 | 13 | *** 14 | ## Instruction
15 |
16 | 17 | // Construct Class, Initialize function. // Class를 생성하고 초기화합니다. 18 | Geekble_Oscillator(); 19 | 20 | // Set output frequency, from 8MHz to 31.25KHz // 8MHz부터 31.25KHz 까지의 출력주파수를 설정합니다. 21 | // Output Frequency = 8MHz / Divide_Variable // 출력주파수 = 8MHz / Divide_Variable 22 | // ex: Geekble_Oscillator OSC (1); -> 8MHz // 예시: Geekble_Oscillator OSC (1); -> 8MHz 23 | // ex: Geekble_Oscillator OSC (10); -> 800KHz // 예시: Geekble_Oscillator OSC (10); -> 800KHz 24 | void Divide_8MHz_by(uint16_t Divide_Variable); 25 | 26 | // Set Oscilltor On or Off // Oscillator를 켜거나 끌지를 선택합니다. 27 | // If On_Off = 1, Output Frequency will generated on Digital pin 11 // On_Off = 1인 경우, Digital pin 11에서 출력주파수가 발생합니다. 28 | // If On_Off = 0, Timer Counter Stop, Digital pin 11 return to normal operation // On_Off = 0인 경우, 타이머카운터가 정지합니다. Digital pin 11은 기본 pin으로 동작합니다. 29 | void Run(uint8_t On_Off); 30 | 31 | 32 | *** 33 | ## Example
34 |
35 | #include 36 | 37 | // Output Frequency = 8MHz / Divide_Variable // 출력주파수 = 8MHz / Divide_Variable 38 | // ex: Geekble_Oscillator OSC (1); -> 8MHz // 예시: Geekble_Oscillator OSC (1); -> 8MHz 39 | // ex: Geekble_Oscillator OSC (10); -> 800KHz // 예시: Geekble_Oscillator OSC (10); -> 800KHz 40 | // Divide_Variable from 1 (8MHz) to 256 (31.25KHz) // Divide_Variable의 범위는 1 (8MHz)에서 256(31.25KHz)까지입니다. 41 | // OC2A pin is used for Oscillator Output, which is Digital pin 11 // 출력포트로 OC2A핀을 사용합니다. 이는 Digital pin 11 핀입니다. 42 | 43 | // In this example, we are going to sweep output frequency // 이 예제에서, 우리는 출력주파수를 변화(Sweep)시킬것입니다. 44 | // Every 1 Sec, Devide_Variable will increase +1 // 매 1초마다, Divide_Variable이 1씩 증가할것입니다. 45 | // It will Sweep Frequency from 8MHz to 31.25KHz // 이는 출력주파수를 8MHz부터 31.25KHz까지 변화(Sweep)하게 합니다. 46 | // Let's get started. // 시작해봅시다. 47 | 48 | // Construct Freq_Sweep // Freq_Sweep을 생성합니다. 49 | Geekble_Oscillator Freq_Sweep; 50 | 51 | void setup() 52 | { 53 | // Initialize Freq_Sweep // Freq_Sweep을 초기화합니다. 54 | Freq_Sweep = Geekble_Oscillator(); 55 | 56 | // Set output frequency, Output Frequency = 8MHz / 1 = 8MHz // 출력주파수를 설정합니다. 출력주파수 = 8MHz / 1 = 8MHz 57 | Freq_Sweep.Divide_8MHz_by(1); 58 | 59 | // Run Oscilltor, Output Frequency now generated on Digital pin 11 // Oscillator를 동작합니다. 출력주파수가 이제 Digital pin 11에서 발생합니다. 60 | Freq_Sweep.Run(1); 61 | } 62 | 63 | void loop() 64 | { 65 | // Sweep Divide_Variable from 1 to 256 every seconds // Divide_Variable 값을 1초간격으로 1부터 256까지 변화시킵니다. 66 | for (int Divide_Variable = 1; Divide_Variable <= 256; Divide_Variable++) 67 | { 68 | Freq_Sweep.Divide_8MHz_by(Divide_Variable); 69 | _delay_ms(1000); 70 | } 71 | 72 | // Terminate Oscillator // 출력을 중단합니다. 73 | Freq_Sweep.Run(0); 74 | 75 | } --------------------------------------------------------------------------------