1
Dependencies: mbed freq_counter
Revision 1:5bb7cf57b763, committed 2021-03-07
- Comitter:
- sunghunKim
- Date:
- Sun Mar 07 11:59:28 2021 +0000
- Parent:
- 0:8a21ee76eb7d
- Commit message:
- wind speed
Changed in this revision
diff -r 8a21ee76eb7d -r 5bb7cf57b763 freq_counter.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/freq_counter.lib Sun Mar 07 11:59:28 2021 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kenjiArai/code/freq_counter/#9a726b997366
diff -r 8a21ee76eb7d -r 5bb7cf57b763 main.cpp --- a/main.cpp Sun Mar 07 11:42:55 2021 +0000 +++ b/main.cpp Sun Mar 07 11:59:28 2021 +0000 @@ -1,16 +1,228 @@ +/* + * mbed Application program / Frequency Counter + * + * Copyright (c) 2014,'15,'20 Kenji Arai / JH1PJL + * http://www7b.biglobe.ne.jp/~kenjia/ + * https://os.mbed.com/users/kenjiArai/ + * Created: October 18th, 2014 + * Revised: August 4th, 2020 + */ + +//#define USE_TEXT_LCD // use Text LCD/I2C Interface + #include "mbed.h" +#include "freq_counter.h" + +#define GATE_TIME_10SEC 10000000 +#define GATE_TIME_1SEC 1000000 +#define GATE_TIME_100MS 100000 +#define GATE_TIME_10MS 10000 + +#define GATE_TIME GATE_TIME_1SEC + +//extern void print_revision(void); + +// LPC1768 --------------------------------------------------------------------- +//#if defined(TARGET_LPC1768) -DigitalOut myled(p5); +// LPC1768 Frequency example +// Ref Clock output -> "PWM6" pin to 96MHZ/19 = 5.052MHz (Approx) +# define CLK_REFRENCE() PWM6_SETCLK(19) +// Outout mbed's "PWM6" pin to 96MHZ/96 = 1.000MHz (Approx) +//#define CLK_REFRENCE() PWM6_SETCLK(96) + +//DigitalOut led_gate(LED1); +//I2C i2cBus(p9, p10); // SDA, SCL +PwmOut fmclck(p21); // for RESERVE pin21 as PWM1[6] +F_COUNTER fc(p30); + +void PWM6_SETCLK(int div); + +/** +// LPC1114 --------------------------------------------------------------------- +#elif defined(TARGET_LPC1114) + +// LPC1114 Frequency example +// Ref Clock output -> "dp24" pin as CLOCKOUT + +DigitalOut led_gate(LED2); +I2C i2cBus(dp5,dp27); // SDA, SCL +F_COUNTER fc(dp14); + +void clock_out(void); +# define CLK_REFRENCE() clock_out() +# warning "Don't forget LPC1114 runs with internal clock." +# warning "Measurement data is not accurate!!" -int main() { - int i =1; - printf("Hello World ! \n"); - - while(1) { - myled = 1; - wait(2.2); - myled = 0; - wait(2.2); - +// STM32 / Nucleo -------------------------------------------------------------- +#elif defined(TARGET_NUCLEO_F401RE)\ + || defined(TARGET_NUCLEO_F411RE)\ + || defined(TARGET_NUCLEO_F446RE) + +// STM32 Frequency example +// Ref Clock output -> "PC_9" pin as MCO2 System clock / 4 + +DigitalOut led_gate(LED1); +I2C i2cBus(PB_9,PB_8); // SDA, SCL +F_COUNTER fc(PA_0); + +void port_mco2_set(void); +# define CLK_REFRENCE() port_mco2_set() + +// Other CPU's ----------------------------------------------------------------- +#else +# error "No support for your CPU" +#endif + +// Only for LCD control ------------------------------------------------------- +#if defined(USE_TEXT_LCD) +#include "TextLCD.h" // Std. lib./ LCD control +// LCD(Akizuki AQM0802A) +TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); +void lcd_onotialize(void); +void display_on_lcd(float freqency, uint32_t t_gate); +# define LCD_INITIALIZE() lcd_onotialize() +# define DISPLAY_ON_LCD(x,y) display_on_lcd(x,y) +#else +# define LCD_INITIALIZE() {;} +# define DISPLAY_ON_LCD(x,y) {;} +#endif +**/ +//------------------------------------------------------------------------------ +// Control Program +//------------------------------------------------------------------------------ +int main() +{ + float freqency; + uint32_t t_gate; + +// print_revision(); + printf("\r\nFrequency Counter by JH1PJL created on " __DATE__ "\r\n"); + // lcd +// LCD_INITIALIZE(); + // Set Internalclock for reference + CLK_REFRENCE(); + while(true) { +// led_gate = 1; + t_gate = GATE_TIME; + freqency = (float)fc.read_frequency(t_gate); +// led_gate = 0; +// printf("f= %9.0f [Hz], gate= %4.3f [Sec]\r\n", freqency, (float)t_gate / 1e6); + printf("f= %9.0f [Hz], wind_speed= %f\n", freqency, (0.062 *freqency) + 0.578); +// DISPLAY_ON_LCD(freqency, t_gate); } } + +#if defined(TARGET_LPC1768) + +// Clock Output From pin21(PWM6) +// Set Clock Freq with div. +// if mbed is running at 96MHz, div is set 96 to Get 1MHz. +void PWM6_SETCLK(int div) +{ + // 1)Reset counter, disable PWM + LPC_PWM1->TCR = (1 << 1); + LPC_SC->PCLKSEL0 &= ~(0x3 << 12); + // 2)Set peripheral clock divider to /1, i.e. system clock + LPC_SC->PCLKSEL0 |= (1 << 12); + // 3)Match Register 0 is shared period counter for all PWM1 + LPC_PWM1->MR0 = div - 1; + LPC_PWM1->MR6 = (div + 1)>> 1; + // 4)Start updating at next period start + LPC_PWM1->LER |= 1; + // 5)Enable counter and PWM + LPC_PWM1->TCR = (1 << 0) + (1 << 3); + printf("Set pin21(PWM6) for clock output\r\n"); +} + +#elif defined(TARGET_LPC1114) + +// CLOCKOUT from pin24(dp18) +// Freq = 48MHz/4 = 12MHz +void clock_out(void) +{ + LPC_SYSCON->CLKOUTCLKSEL = 3; // System clock + LPC_SYSCON->CLKOUTDIV = 4; // div 1/4 + LPC_IOCON->PIO0_1 = 1; // select CLKOUT to P0_1(pin24)/dp18 + LPC_SYSCON->CLKOUTUEN = 1; // enable output + printf("Set P0_1(pin24)/dp18 for clock output\r\n"); +} + +#elif defined(TARGET_NUCLEO_F401RE)\ + || defined(TARGET_NUCLEO_F411RE)\ + || defined(TARGET_NUCLEO_F446RE) + +void port_mco2_set(void) +{ + // PC9 -> MCO_2 + DigitalOut dumy1(PC_9); + uint32_t temp = + ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)9 & (uint32_t)0x07) * 4)) ; + GPIOC->AFR[9 >> 3] &= + ~((uint32_t)0xf << ((uint32_t)(9 & (uint32_t)0x07) * 4)) ; + GPIOC->AFR[9 >> 3] |= temp; + GPIOC->MODER &= ~(GPIO_MODER_MODER0 << (9 * 2)); + GPIOC->MODER |= (0x2 << (9 * 2)); + GPIOC->OSPEEDR |= (0x03 << (9 * 2)); // High speed + // Select output clock source + RCC->CFGR &= 0x009fffff; + // MCO_2 output SYSCLK 1/4 + // MCO2 MCO2PRE + RCC->CFGR |= (0x0 << 30) + (0x6 << 27); + printf("Set PC9 for clock output\r\n"); +} + +#else +# error "No support for your CPU" +#endif + + +/** +#if defined(USE_TEXT_LCD) +void lcd_onotialize(void) +{ + // Initialize LCD + lcd.locate(0, 0); // 1st line top + // 12345678 + lcd.printf("Fre-Cntr"); + lcd.locate(0, 1); // 2nd line top + // 12345678 + lcd.puts(" JH1PJL "); + lcd.setCursor(TextLCD::CurOff_BlkOff); + lcd.setContrast(0x16); + thread_sleep_for(5000); + lcd.locate(0, 1); // 2nd line top + // 12345678 + lcd.puts(" "); +} + +void display_on_lcd(float freqency, uint32_t t_gate) +{ + lcd.locate(0, 0); // 1st line top + lcd.printf("%8.0f", freqency); + lcd.locate(0, 1); // 2nd line top + switch (t_gate) { + case GATE_TIME_10SEC: + // 12345678 + lcd.printf("Hz x0.1"); + break; + case GATE_TIME_1SEC: + // 12345678 + lcd.printf("Hz x1"); + break; + case GATE_TIME_100MS: + // 12345678 + lcd.printf("Hz x10"); + break; + case GATE_TIME_10MS: + // 12345678 + lcd.printf("Hz x100"); + break; + default: + // 12345678 + lcd.printf("Hz gate?"); + break; + } +} +#endif +**/ \ No newline at end of file
diff -r 8a21ee76eb7d -r 5bb7cf57b763 mbed-os.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Sun Mar 07 11:59:28 2021 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#a2ada74770f043aff3e61e29d164a8e78274fcd4
diff -r 8a21ee76eb7d -r 5bb7cf57b763 mbed_app.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed_app.json Sun Mar 07 11:59:28 2021 +0000 @@ -0,0 +1,8 @@ +{ + "requires": ["bare-metal"], + "target_overrides": { + "*": { + "target.printf_lib": "std" + } + } +}