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

Dependencies:   ACM1602NI DigitalSw Si5351A mbed

main.cpp

Committer:
suupen
Date:
2017-06-19
Revision:
0:443d2954b3c3

File content as of revision 0:443d2954b3c3:

#include "mbed.h"
#include "ACM1602NI.h"  //https://developer.mbed.org/users/takuo/code/ACM1602NI/docs/661827681a12/classACM1602NI.html
#include "DigitalSw.h"
#include "si5351a.h"    //https://developer.mbed.org/users/kenjiArai/code/Si5351A/file/af2d99cfb3f0/si5351a.cpp

//#define LPC1114
/*
#ifdef LPC1114
I2C i2c(dp5, dp27);  // sda, scl
#else
I2C i2c(p9, p10);
#endif
*/

 // I2C pins: p9 = sda, p10 = scl
ACM1602NI lcd(p9, p10);   // (sda, scl)
// ACM1602NI lcd(p28, p27);   // (sda, scl)

// Vout mesure
AnalogIn Vout(p20);

//**************************************************************
// Si5351a
SI5351A clk(p28, p27, 25000000UL);     // Base clock = 25MHz
 
 // Digital Sw
#ifdef LPC1114
 DigitalSw upSw(dp18);
 DigitalSw downSw(dp17);
 DigitalSw startSw(dp16);
#else
 DigitalSw upSw(p18);
 DigitalSw downSw(p17);
 DigitalSw startSw(p15);
#endif 

 int16_t frequency = 1;
 
DigitalOut myled(LED1);

void swProcess(void)
{
        if(upSw.getOnEdge() == 1){
           if(frequency < 50){frequency++;}
            clk.set_frequency(SI5351_CLK0, frequency * 1000000);    

           }

        if(downSw.getOnEdge() == 1){
           if(frequency > 1){frequency--;}
            clk.set_frequency(SI5351_CLK0, frequency * 1000000);    
           }
           
        if(startSw.getOnEdge() == 1){
           frequency = 25;
            clk.set_frequency(SI5351_CLK0, frequency * 1000000);    
           }

}


int main() {
            clk.set_frequency(SI5351_CLK0, frequency * 1000000);    

    while(1) {

    swProcess();

             lcd.printf("Vout = %3.2f [V]\n", Vout * 3.3);
     lcd.printf("%2d [MHz]\n",frequency);
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}