#include #include //LiquidCrystal(rs, enable, d4, d5, d6, d7); LiquidCrystal lcd(8, 4, 0, 1, 2, 3); ///18=24....23=29pin #define PWMA 6 //19pin(OC1A)に接続 #define ADCYCLE A5 // A0=40pin #define ADDUTY A7 // A1=39pin unsigned long sclk = 24576000; //システムクロック24.576MHz long 符号無しの整数で、サイズが4byte unsigned long frq = 1024; // 周波数 96khz 24.576MHz/256 unsigned long frqd = 96000; // 周波数 96khz 24.576MHz/256 unsigned int duty = 127; unsigned int dutyd = 50; // 指定したいデューティ比 50% int 符号無しの整数で、サイズが2byte char str[17]; String txt; void setup() { pinMode(PWMA, OUTPUT); // DDRA = 0b01011111; ///PA lcd.begin(16,2); lcd.clear(); lcd.setCursor(0, 0); //analogWrite(PWMA, 127); /////////PWM タイマ1を使う ///// TCCR1A = _BV(COM1A1) | _BV(WGM10); TCCR1B = _BV(CS10) | _BV(WGM12); // OCR1A = 127; } void loop() { frq = analogRead(ADCYCLE); frq = frq/4; if(frq <= 51){TCCR1B = (TCCR1B & 0b11111000) | 0x01; frqd = 96000;} else{if(frq <= 102){TCCR1B = (TCCR1B & 0b11111000) | 0x02; frqd = 12000;} else{if(frq <= 153){TCCR1B = (TCCR1B & 0b11111000) | 0x03;frqd = 1500;} else{if(frq <= 204){TCCR1B = (TCCR1B & 0b11111000) | 0x04;frqd = 375;} else{if(frq <= 255){TCCR1B = (TCCR1B & 0b11111000) | 0x05;frqd = 94;} }}}} duty = analogRead(ADDUTY); duty = duty/4; dutyd = duty*100/256; sprintf(str, "Cycle= %6luHz ", frqd); txt = str; lcd.setCursor(0, 0); lcd.print(txt); sprintf(str, "Duty=%3d%% ", dutyd); txt = str; lcd.setCursor(0, 1); lcd.print(txt); OCR1A = duty; delay(1000); }