Si5351Aを使用したクロックジェネレータ1MHzから1MHz単位で任意のパルスを出力できる。出力電圧はLM317で変更可能

Dependencies:   ACM1602NI DigitalSw Si5351A mbed

Committer:
suupen
Date:
Mon Jun 19 11:09:29 2017 +0000
Revision:
0:443d2954b3c3
??;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:443d2954b3c3 1 #include "mbed.h"
suupen 0:443d2954b3c3 2 #include "ACM1602NI.h" //https://developer.mbed.org/users/takuo/code/ACM1602NI/docs/661827681a12/classACM1602NI.html
suupen 0:443d2954b3c3 3 #include "DigitalSw.h"
suupen 0:443d2954b3c3 4 #include "si5351a.h" //https://developer.mbed.org/users/kenjiArai/code/Si5351A/file/af2d99cfb3f0/si5351a.cpp
suupen 0:443d2954b3c3 5
suupen 0:443d2954b3c3 6 //#define LPC1114
suupen 0:443d2954b3c3 7 /*
suupen 0:443d2954b3c3 8 #ifdef LPC1114
suupen 0:443d2954b3c3 9 I2C i2c(dp5, dp27); // sda, scl
suupen 0:443d2954b3c3 10 #else
suupen 0:443d2954b3c3 11 I2C i2c(p9, p10);
suupen 0:443d2954b3c3 12 #endif
suupen 0:443d2954b3c3 13 */
suupen 0:443d2954b3c3 14
suupen 0:443d2954b3c3 15 // I2C pins: p9 = sda, p10 = scl
suupen 0:443d2954b3c3 16 ACM1602NI lcd(p9, p10); // (sda, scl)
suupen 0:443d2954b3c3 17 // ACM1602NI lcd(p28, p27); // (sda, scl)
suupen 0:443d2954b3c3 18
suupen 0:443d2954b3c3 19 // Vout mesure
suupen 0:443d2954b3c3 20 AnalogIn Vout(p20);
suupen 0:443d2954b3c3 21
suupen 0:443d2954b3c3 22 //**************************************************************
suupen 0:443d2954b3c3 23 // Si5351a
suupen 0:443d2954b3c3 24 SI5351A clk(p28, p27, 25000000UL); // Base clock = 25MHz
suupen 0:443d2954b3c3 25
suupen 0:443d2954b3c3 26 // Digital Sw
suupen 0:443d2954b3c3 27 #ifdef LPC1114
suupen 0:443d2954b3c3 28 DigitalSw upSw(dp18);
suupen 0:443d2954b3c3 29 DigitalSw downSw(dp17);
suupen 0:443d2954b3c3 30 DigitalSw startSw(dp16);
suupen 0:443d2954b3c3 31 #else
suupen 0:443d2954b3c3 32 DigitalSw upSw(p18);
suupen 0:443d2954b3c3 33 DigitalSw downSw(p17);
suupen 0:443d2954b3c3 34 DigitalSw startSw(p15);
suupen 0:443d2954b3c3 35 #endif
suupen 0:443d2954b3c3 36
suupen 0:443d2954b3c3 37 int16_t frequency = 1;
suupen 0:443d2954b3c3 38
suupen 0:443d2954b3c3 39 DigitalOut myled(LED1);
suupen 0:443d2954b3c3 40
suupen 0:443d2954b3c3 41 void swProcess(void)
suupen 0:443d2954b3c3 42 {
suupen 0:443d2954b3c3 43 if(upSw.getOnEdge() == 1){
suupen 0:443d2954b3c3 44 if(frequency < 50){frequency++;}
suupen 0:443d2954b3c3 45 clk.set_frequency(SI5351_CLK0, frequency * 1000000);
suupen 0:443d2954b3c3 46
suupen 0:443d2954b3c3 47 }
suupen 0:443d2954b3c3 48
suupen 0:443d2954b3c3 49 if(downSw.getOnEdge() == 1){
suupen 0:443d2954b3c3 50 if(frequency > 1){frequency--;}
suupen 0:443d2954b3c3 51 clk.set_frequency(SI5351_CLK0, frequency * 1000000);
suupen 0:443d2954b3c3 52 }
suupen 0:443d2954b3c3 53
suupen 0:443d2954b3c3 54 if(startSw.getOnEdge() == 1){
suupen 0:443d2954b3c3 55 frequency = 25;
suupen 0:443d2954b3c3 56 clk.set_frequency(SI5351_CLK0, frequency * 1000000);
suupen 0:443d2954b3c3 57 }
suupen 0:443d2954b3c3 58
suupen 0:443d2954b3c3 59 }
suupen 0:443d2954b3c3 60
suupen 0:443d2954b3c3 61
suupen 0:443d2954b3c3 62 int main() {
suupen 0:443d2954b3c3 63 clk.set_frequency(SI5351_CLK0, frequency * 1000000);
suupen 0:443d2954b3c3 64
suupen 0:443d2954b3c3 65 while(1) {
suupen 0:443d2954b3c3 66
suupen 0:443d2954b3c3 67 swProcess();
suupen 0:443d2954b3c3 68
suupen 0:443d2954b3c3 69 lcd.printf("Vout = %3.2f [V]\n", Vout * 3.3);
suupen 0:443d2954b3c3 70 lcd.printf("%2d [MHz]\n",frequency);
suupen 0:443d2954b3c3 71 myled = 1;
suupen 0:443d2954b3c3 72 wait(0.2);
suupen 0:443d2954b3c3 73 myled = 0;
suupen 0:443d2954b3c3 74 wait(0.2);
suupen 0:443d2954b3c3 75 }
suupen 0:443d2954b3c3 76 }