#include #include #include #include #define pinFsync 10 #define pinSclk 13 #define pinSdata 11 AD9833 gen(pinFsync); LiquidCrystal_I2C lcd(0x27, 16,2); const byte radky = 4; const byte sloupce = 3; String frekvence = ""; int vlna = 0; int long frekvenceNum = 1000; int lcdPozice; int prep = 0; int nulace = 0; int led=2; int tl=A0; char keys[radky][sloupce] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pinyRadku[radky] = {8, 3, 4, 6}; byte pinySloupcu[sloupce] = {7, 9, 5, }; Keypad klavesnice = Keypad( makeKeymap(keys), pinyRadku, pinySloupcu, radky, sloupce); void sine() { byte sine0[] = {0b00001, 0b00110, 0b01000, 0b10000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte sine1[] = {0b11000, 0b00110, 0b00001, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte sine2[] = {0b00000, 0b00000, 0b00000, 0b00000, 0b10000, 0b01000, 0b00110, 0b00001 }; byte sine3[] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00001, 0b00110, 0b11000 }; byte sine4[] = {0b00001, 0b00110, 0b01000, 0b10000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte sine5[] = {0b11000, 0b00110, 0b00001, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; lcd.createChar(0, sine0); lcd.createChar(1, sine1); lcd.createChar(2, sine2); lcd.createChar(3, sine3); lcd.createChar(4, sine4); lcd.createChar(5, sine5); lcd.setCursor(10, 0); lcd.write(byte(0)); lcd.setCursor(11, 0); lcd.write(byte(1)); lcd.setCursor(12, 0); lcd.write(byte(2)); lcd.setCursor(13, 0); lcd.write(byte(3)); lcd.setCursor(14, 0); lcd.write(byte(4)); lcd.setCursor(15, 0); lcd.write(byte(5)); } void square() { byte square0[] = {0b11111, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000 }; byte square1[] = {0b11000, 0b01000, 0b01000, 0b01000, 0b01000, 0b01000, 0b01000, 0b01111 }; byte square2[] = {0b00111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11100 }; byte square3[] = {0b11110, 0b00010, 0b00010, 0b00010, 0b00010, 0b00010, 0b00010, 0b00011 }; byte square4[] = {0b00001, 0b00001, 0b00001, 0b00001, 0b00001, 0b00001, 0b00001, 0b11111 }; byte square5[] = {0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; lcd.createChar(0, square0); lcd.createChar(1, square1); lcd.createChar(2, square2); lcd.createChar(3, square3); lcd.createChar(4, square4); lcd.createChar(5, square5); lcd.setCursor(10, 0); lcd.write(byte(0)); lcd.setCursor(11, 0); lcd.write(byte(1)); lcd.setCursor(12, 0); lcd.write(byte(2)); lcd.setCursor(13, 0); lcd.write(byte(3)); lcd.setCursor(14, 0); lcd.write(byte(4)); lcd.setCursor(15, 0); lcd.write(byte(5)); } void triangle() { byte triangle0[] = {0b00000, 0b00000, 0b00000, 0b00001, 0b00010, 0b00100, 0b00000, 0b00000 }; byte triangle1[] = {0b01000, 0b10100, 0b00010, 0b00001, 0b00000, 0b00000, 0b00000, 0b00000 }; byte triangle2[] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b10001, 0b01010, 0b00100 }; byte triangle3[] = {0b00010, 0b00101, 0b01000, 0b10000, 0b00000, 0b00000, 0b00000, 0b00000 }; byte triangle4[] = {0b00000, 0b00000, 0b00000, 0b10000, 0b01000, 0b00100, 0b00010, 0b00001 }; byte triangle5[] = {0b00000, 0b00000, 0b00000, 0b00010, 0b00100, 0b01000, 0b10000, 0b00000 }; lcd.createChar(0, triangle0); lcd.createChar(1, triangle1); lcd.createChar(2, triangle2); lcd.createChar(3, triangle3); lcd.createChar(4, triangle4); lcd.createChar(5, triangle5); lcd.setCursor(10, 0); lcd.write(byte(0)); lcd.setCursor(11, 0); lcd.write(byte(1)); lcd.setCursor(12, 0); lcd.write(byte(2)); lcd.setCursor(13, 0); lcd.write(byte(3)); lcd.setCursor(14, 0); lcd.write(byte(4)); lcd.setCursor(15, 0); lcd.write(byte(5)); } void setup() { lcd.init(); lcd.backlight(); lcd.print(" DDS - AD9833 "); lcd.setCursor(0, 1); lcd.print("Signal Generator"); delay(2000); lcd.clear(); gen.Begin(); gen.EnableOutput(true); pinMode(1, OUTPUT); digitalWrite(1, LOW); pinMode(12, OUTPUT); // pipak digitalWrite(12, LOW); pinMode(led, OUTPUT); // bateria digitalWrite(led, LOW); pinMode(tl,INPUT_PULLUP); digitalRead(tl); lcd.setCursor(0, 1); lcd.print("Fr: "); lcd.setCursor(6, 1); lcd.print( "1000 Hz"); gen.ApplySignal(SINE_WAVE,REG0, 1000); define(); } static String format_number(String number) { String result = ""; for ( int i = 0; i < number.length(); i++ ) { if ( i % 3 == 0 && i ) result = " " + result; result = number[number.length() - 1 - i] + result; } return result; } void loop() { digitalWrite(led, digitalRead(tl)); char klavesa = klavesnice.getKey(); if (klavesa) { pip(); if (klavesa == 35) { AD_9833(); prep = 0; } if (klavesa == 42 ) { define(); } if (klavesa > 47 && klavesa < 58) { frekvence = frekvence + klavesa; frekvenceNum = frekvence.toInt(); lcdPozice = (frekvence.length()); lcd.setCursor(0, 1); lcd.print("Freq: "); lcd.setCursor(6, 1); lcd.print(format_number(frekvence) + " Hz "); } if (frekvence.length() == 1 && klavesa == 48) { lcd.setCursor (6, 1); lcd.print("- Hz "); frekvence = ""; } if (frekvenceNum >= 5000001L ) { prep = 0; lcd.setCursor(0, 1); lcd.print("OUT LIMIT "); pip3(); delay(100); lcd.setCursor(0, 1); lcd.print("max. 5 Mhz"); delay(1000); lcd.setCursor(0, 1); lcd.print("Freq: - Hz "); frekvenceNum = 0; frekvence = ""; } } } void define() { vlna++; delay(50); switch (vlna) { case 1: sine(); lcd.setCursor(2, 0); lcd.print("Sinus "); digitalWrite(1, LOW); delay(50); break; case 2: triangle(); lcd.setCursor(2, 0); lcd.print("Triangle"); digitalWrite(1, LOW); delay(50); break; case 3: square(); lcd.setCursor(2, 0); lcd.print("Square "); digitalWrite(1, HIGH); vlna = 0; delay(50); break; } } void AD_9833() { if (prep == 1) return; pip2(); if (vlna == 1) { gen.ApplySignal(SINE_WAVE, REG0, frekvenceNum); } if (vlna == 2) { gen.ApplySignal(TRIANGLE_WAVE, REG0, frekvenceNum); } if (vlna == 0) { gen.ApplySignal(SQUARE_WAVE, REG0, frekvenceNum); } frekvence = ""; } void pip() { lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); } void pip2() { lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(800); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); } void pip3() { lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); lcd.setCursor(0, 0); lcd.print("#"); digitalWrite(12, HIGH); delay(100); lcd.setCursor(0, 0); lcd.print(" "); digitalWrite(12, LOW); delay(100); }