Only for mbed LPC1768, mbed LPC1114FN28, Nucleo-F401 and Nucleo-F411. No way to change pin assign.
Dependencies: freq_counter TextLCD
Fork of 5MHzOSC by
Please refer following page.
http://developer.mbed.org/users/kenjiArai/notebook/simple-frequency-counter/
/users/kenjiArai/notebook/frequency-counters/
main.cpp@8:651bfebc5f39, 2015-05-17 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun May 17 04:20:22 2015 +0000
- Revision:
- 8:651bfebc5f39
- Parent:
- 7:0c09d29c4cf3
- Child:
- 9:0b84a8ce225a
F4x1RE -> added high speed output mode for PA8 and PC9
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 5:af9fa3d0731c | 1 | /* |
kenjiArai | 5:af9fa3d0731c | 2 | * mbed Application program / Frequency Counter |
kenjiArai | 5:af9fa3d0731c | 3 | * |
kenjiArai | 8:651bfebc5f39 | 4 | * Copyright (c) 2014-2015 Kenji Arai / JH1PJL |
kenjiArai | 5:af9fa3d0731c | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 5:af9fa3d0731c | 6 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 5:af9fa3d0731c | 7 | * Created: October 18th, 2014 |
kenjiArai | 8:651bfebc5f39 | 8 | * Revised: May 17th, 2015 |
kenjiArai | 5:af9fa3d0731c | 9 | * |
kenjiArai | 5:af9fa3d0731c | 10 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 5:af9fa3d0731c | 11 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 5:af9fa3d0731c | 12 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 5:af9fa3d0731c | 13 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 5:af9fa3d0731c | 14 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 5:af9fa3d0731c | 15 | */ |
mio | 0:c988614df67a | 16 | |
kenjiArai | 6:44c2bcbdd77b | 17 | #define USE_COM // use Communication with PC(UART) |
kenjiArai | 8:651bfebc5f39 | 18 | //#define USE_TEXT_LCD // use Text LCD/I2C Interface |
kenjiArai | 8:651bfebc5f39 | 19 | //#define USE_GRAP_LCD // use Grafic LCD/SPI interface |
kenjiArai | 6:44c2bcbdd77b | 20 | |
kenjiArai | 5:af9fa3d0731c | 21 | // Include --------------------------------------------------------------------------------------- |
mio | 0:c988614df67a | 22 | #include "mbed.h" |
kenjiArai | 6:44c2bcbdd77b | 23 | #include "freq_counter.h" |
kenjiArai | 6:44c2bcbdd77b | 24 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 25 | #include "TextLCD.h" // Std. lib./ LCD control |
kenjiArai | 6:44c2bcbdd77b | 26 | #endif |
kenjiArai | 6:44c2bcbdd77b | 27 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 28 | #include "ST7565_SPI_LCD.h" |
kenjiArai | 6:44c2bcbdd77b | 29 | #endif |
mio | 0:c988614df67a | 30 | |
kenjiArai | 5:af9fa3d0731c | 31 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 5:af9fa3d0731c | 32 | #ifdef USE_COM |
kenjiArai | 5:af9fa3d0731c | 33 | #define BAUD(x) pc.baud(x) |
kenjiArai | 5:af9fa3d0731c | 34 | #define GETC(x) pc.getc(x) |
kenjiArai | 5:af9fa3d0731c | 35 | #define PUTC(x) pc.putc(x) |
kenjiArai | 5:af9fa3d0731c | 36 | #define PRINTF(...) pc.printf(__VA_ARGS__) |
kenjiArai | 5:af9fa3d0731c | 37 | #define READABLE(x) pc.readable(x) |
kenjiArai | 5:af9fa3d0731c | 38 | #else |
kenjiArai | 5:af9fa3d0731c | 39 | #define BAUD(x) {;} |
kenjiArai | 5:af9fa3d0731c | 40 | #define GETC(x) {;} |
kenjiArai | 5:af9fa3d0731c | 41 | #define PUTC(x) {;} |
kenjiArai | 5:af9fa3d0731c | 42 | #define PRINTF(...) {;} |
kenjiArai | 5:af9fa3d0731c | 43 | #define READABLE(x) {;} |
kenjiArai | 5:af9fa3d0731c | 44 | #endif |
mio | 1:2a347c40b1da | 45 | |
kenjiArai | 6:44c2bcbdd77b | 46 | #if defined(TARGET_LPC1768) |
kenjiArai | 8:651bfebc5f39 | 47 | |
kenjiArai | 5:af9fa3d0731c | 48 | // LPC1768 Frequency example |
kenjiArai | 5:af9fa3d0731c | 49 | // Outout mbed's "PWM6" pin to 96MHZ/19 = 5.052MHz (Approx) |
kenjiArai | 7:0c09d29c4cf3 | 50 | #define CLK_REFRENCE() PWM6_SETCLK(19) |
kenjiArai | 5:af9fa3d0731c | 51 | // Outout mbed's "PWM6" pin to 96MHZ/96 = 1.000MHz (Approx) |
kenjiArai | 7:0c09d29c4cf3 | 52 | //#define CLK_REFRENCE() PWM6_SETCLK(96) |
kenjiArai | 8:651bfebc5f39 | 53 | |
kenjiArai | 7:0c09d29c4cf3 | 54 | #elif defined(TARGET_LPC1114) |
kenjiArai | 8:651bfebc5f39 | 55 | |
kenjiArai | 7:0c09d29c4cf3 | 56 | #define led_not_zero temp_ram |
kenjiArai | 7:0c09d29c4cf3 | 57 | #define led_01 temp_ram |
kenjiArai | 7:0c09d29c4cf3 | 58 | #define led_10 temp_ram |
kenjiArai | 7:0c09d29c4cf3 | 59 | #define CLK_REFRENCE() clock_out() |
kenjiArai | 7:0c09d29c4cf3 | 60 | #warning "Don't forget LPC1114 runs with internal clock. Measurement data is not accurate!!" |
kenjiArai | 8:651bfebc5f39 | 61 | |
kenjiArai | 6:44c2bcbdd77b | 62 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 8:651bfebc5f39 | 63 | |
kenjiArai | 6:44c2bcbdd77b | 64 | #define led_not_zero temp_ram |
kenjiArai | 6:44c2bcbdd77b | 65 | #define led_01 temp_ram |
kenjiArai | 6:44c2bcbdd77b | 66 | #define led_10 temp_ram |
kenjiArai | 7:0c09d29c4cf3 | 67 | #define CLK_REFRENCE() port_mco1_mco2_set() |
kenjiArai | 8:651bfebc5f39 | 68 | |
kenjiArai | 6:44c2bcbdd77b | 69 | #else |
kenjiArai | 6:44c2bcbdd77b | 70 | #error "No support for this CPU" |
kenjiArai | 6:44c2bcbdd77b | 71 | #endif |
kenjiArai | 6:44c2bcbdd77b | 72 | |
kenjiArai | 5:af9fa3d0731c | 73 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 6:44c2bcbdd77b | 74 | #if defined(TARGET_LPC1768) |
kenjiArai | 6:44c2bcbdd77b | 75 | |
kenjiArai | 5:af9fa3d0731c | 76 | DigitalOut led_gate(LED1); |
kenjiArai | 5:af9fa3d0731c | 77 | DigitalOut led_not_zero(LED2); |
kenjiArai | 5:af9fa3d0731c | 78 | DigitalOut led_01(LED3); |
kenjiArai | 5:af9fa3d0731c | 79 | DigitalOut led_10(LED4); |
kenjiArai | 5:af9fa3d0731c | 80 | DigitalIn sw_01(p19); |
kenjiArai | 5:af9fa3d0731c | 81 | DigitalIn sw_10(p20); |
kenjiArai | 5:af9fa3d0731c | 82 | Serial pc(USBTX, USBRX); |
kenjiArai | 5:af9fa3d0731c | 83 | I2C i2cBus(p9, p10); // SDA, SCL |
kenjiArai | 6:44c2bcbdd77b | 84 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 85 | TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 6:44c2bcbdd77b | 86 | #endif |
kenjiArai | 6:44c2bcbdd77b | 87 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 88 | ST7565 glcd(p5, p7, p19, p8, p20, ST7565::AD12864SPI); // mosi, sck, reset, a0, ncs |
kenjiArai | 6:44c2bcbdd77b | 89 | #endif |
kenjiArai | 5:af9fa3d0731c | 90 | PwmOut fmclck(p21); // for RESERVE pin21 as PWM1[6] |
kenjiArai | 5:af9fa3d0731c | 91 | F_COUNTER fc(p30); |
mio | 0:c988614df67a | 92 | |
kenjiArai | 7:0c09d29c4cf3 | 93 | #elif defined(TARGET_LPC1114) |
kenjiArai | 7:0c09d29c4cf3 | 94 | |
kenjiArai | 7:0c09d29c4cf3 | 95 | DigitalOut led_gate(LED2); |
kenjiArai | 7:0c09d29c4cf3 | 96 | DigitalIn sw_01(dp25); |
kenjiArai | 7:0c09d29c4cf3 | 97 | DigitalIn sw_10(dp26); |
kenjiArai | 7:0c09d29c4cf3 | 98 | Serial pc(dp16,dp15); // Communication with Host |
kenjiArai | 7:0c09d29c4cf3 | 99 | I2C i2cBus(dp5,dp27); // SDA, SCL |
kenjiArai | 7:0c09d29c4cf3 | 100 | #if defined(USE_TEXT_LCD) |
kenjiArai | 7:0c09d29c4cf3 | 101 | TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 7:0c09d29c4cf3 | 102 | #endif |
kenjiArai | 7:0c09d29c4cf3 | 103 | #if defined(USE_GRAP_LCD) |
kenjiArai | 7:0c09d29c4cf3 | 104 | ST7565 glcd(dp2, dp6, dp10, dp4, dp9, ST7565::AQM1248A); // mosi, sck, reset, a0, ncs |
kenjiArai | 7:0c09d29c4cf3 | 105 | #endif |
kenjiArai | 7:0c09d29c4cf3 | 106 | F_COUNTER fc(dp14); |
kenjiArai | 7:0c09d29c4cf3 | 107 | // dp24 uses for CLOCKOUT -> Clock output for checking |
kenjiArai | 7:0c09d29c4cf3 | 108 | |
kenjiArai | 6:44c2bcbdd77b | 109 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 6:44c2bcbdd77b | 110 | |
kenjiArai | 6:44c2bcbdd77b | 111 | DigitalOut led_gate(LED1); |
kenjiArai | 6:44c2bcbdd77b | 112 | DigitalIn sw_01(PC_0); |
kenjiArai | 6:44c2bcbdd77b | 113 | DigitalIn sw_10(PC_1); |
kenjiArai | 6:44c2bcbdd77b | 114 | Serial pc(USBTX, USBRX); |
kenjiArai | 6:44c2bcbdd77b | 115 | I2C i2cBus(PB_9,PB_8); // SDA, SCL |
kenjiArai | 6:44c2bcbdd77b | 116 | #if defined(USE_TEXT_LCD) |
kenjiArai | 6:44c2bcbdd77b | 117 | TextLCD_I2C_N lcd(&i2cBus, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 6:44c2bcbdd77b | 118 | #endif |
kenjiArai | 6:44c2bcbdd77b | 119 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 120 | ST7565 glcd(PB_5, PB_3, PA_10, PB_10, PA_9, ST7565::AD12864SPI); // mosi, sck, reset, a0, ncs |
kenjiArai | 6:44c2bcbdd77b | 121 | #endif |
kenjiArai | 6:44c2bcbdd77b | 122 | F_COUNTER fc(PA_0); |
kenjiArai | 6:44c2bcbdd77b | 123 | // PA8 & PC9 uses for MCO_1 % MCO_2 -> Clock output for checking |
kenjiArai | 6:44c2bcbdd77b | 124 | |
kenjiArai | 6:44c2bcbdd77b | 125 | #else |
kenjiArai | 6:44c2bcbdd77b | 126 | #error "No support for this CPU" |
kenjiArai | 6:44c2bcbdd77b | 127 | #endif |
kenjiArai | 6:44c2bcbdd77b | 128 | |
kenjiArai | 5:af9fa3d0731c | 129 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 5:af9fa3d0731c | 130 | float freqency; |
kenjiArai | 6:44c2bcbdd77b | 131 | double t_gate; |
kenjiArai | 5:af9fa3d0731c | 132 | uint8_t sw; |
kenjiArai | 5:af9fa3d0731c | 133 | |
kenjiArai | 6:44c2bcbdd77b | 134 | uint32_t temp_ram; // dummy ram (please keep it!) |
kenjiArai | 6:44c2bcbdd77b | 135 | |
kenjiArai | 5:af9fa3d0731c | 136 | // ROM / Constant data --------------------------------------------------------------------------- |
mio | 1:2a347c40b1da | 137 | |
kenjiArai | 5:af9fa3d0731c | 138 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 8:651bfebc5f39 | 139 | void read_sw_and_set_gate_time(void); |
kenjiArai | 8:651bfebc5f39 | 140 | #if defined(TARGET_LPC1768) |
kenjiArai | 8:651bfebc5f39 | 141 | void PWM6_SETCLK(int div); |
kenjiArai | 8:651bfebc5f39 | 142 | #endif |
kenjiArai | 8:651bfebc5f39 | 143 | #if defined(TARGET_LPC1114) |
kenjiArai | 8:651bfebc5f39 | 144 | void clock_out(void); |
kenjiArai | 8:651bfebc5f39 | 145 | #endif |
kenjiArai | 8:651bfebc5f39 | 146 | #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 8:651bfebc5f39 | 147 | void port_mco1_mco2_set(void); |
kenjiArai | 8:651bfebc5f39 | 148 | #endif |
kenjiArai | 5:af9fa3d0731c | 149 | |
kenjiArai | 5:af9fa3d0731c | 150 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 5:af9fa3d0731c | 151 | // Control Program |
kenjiArai | 5:af9fa3d0731c | 152 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 5:af9fa3d0731c | 153 | int main() |
kenjiArai | 5:af9fa3d0731c | 154 | { |
kenjiArai | 6:44c2bcbdd77b | 155 | PRINTF("\r\nFrequency Counter by JH1PJL created on "__DATE__"\r\n"); |
kenjiArai | 5:af9fa3d0731c | 156 | t_gate = 1.0; |
kenjiArai | 5:af9fa3d0731c | 157 | // Initialize LCD |
kenjiArai | 6:44c2bcbdd77b | 158 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 159 | lcd.locate(0, 0); // 1st line top |
kenjiArai | 5:af9fa3d0731c | 160 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 161 | lcd.printf("Fre-Cntr"); |
kenjiArai | 5:af9fa3d0731c | 162 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 5:af9fa3d0731c | 163 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 164 | lcd.puts(" JH1PJL "); |
kenjiArai | 5:af9fa3d0731c | 165 | lcd.setContrast(0x16); |
kenjiArai | 6:44c2bcbdd77b | 166 | #endif |
kenjiArai | 6:44c2bcbdd77b | 167 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 168 | glcd.cls(); |
kenjiArai | 6:44c2bcbdd77b | 169 | glcd.locate(0, 0); |
kenjiArai | 6:44c2bcbdd77b | 170 | glcd.printf("--- Frequency Counter --\r\n"); |
kenjiArai | 6:44c2bcbdd77b | 171 | glcd.printf(" Kenji Arai / JH1PJL\r\n" ); |
kenjiArai | 6:44c2bcbdd77b | 172 | glcd.printf(" \r\n"); |
kenjiArai | 6:44c2bcbdd77b | 173 | #if defined(TARGET_LPC1768) |
kenjiArai | 7:0c09d29c4cf3 | 174 | glcd.set_contrast(0x06); |
kenjiArai | 6:44c2bcbdd77b | 175 | glcd.printf(" Input: P30 PWM out: P21\r\n" ); |
kenjiArai | 6:44c2bcbdd77b | 176 | glcd.printf(" LED1:Gate LED2:signal \r\n" ); |
kenjiArai | 7:0c09d29c4cf3 | 177 | #elif defined(TARGET_LPC1114) |
kenjiArai | 7:0c09d29c4cf3 | 178 | glcd.set_contrast(0x01); |
kenjiArai | 7:0c09d29c4cf3 | 179 | glcd.printf(" LED2:Gate " ); |
kenjiArai | 6:44c2bcbdd77b | 180 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 7:0c09d29c4cf3 | 181 | glcd.set_contrast(0x06); |
kenjiArai | 6:44c2bcbdd77b | 182 | glcd.printf(" Input: PA0 PWM out: PA8\r\n" ); |
kenjiArai | 6:44c2bcbdd77b | 183 | glcd.printf(" LED1:Gate \r\n" ); |
kenjiArai | 6:44c2bcbdd77b | 184 | #else |
kenjiArai | 6:44c2bcbdd77b | 185 | #error "No support for this CPU" |
kenjiArai | 6:44c2bcbdd77b | 186 | #endif |
kenjiArai | 6:44c2bcbdd77b | 187 | #endif // defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 188 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 189 | wait(5.0); |
kenjiArai | 5:af9fa3d0731c | 190 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 5:af9fa3d0731c | 191 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 192 | lcd.puts(" "); |
kenjiArai | 6:44c2bcbdd77b | 193 | #endif |
kenjiArai | 7:0c09d29c4cf3 | 194 | // Set Internalclock for reference |
kenjiArai | 7:0c09d29c4cf3 | 195 | CLK_REFRENCE(); |
kenjiArai | 5:af9fa3d0731c | 196 | freqency = 0; |
kenjiArai | 5:af9fa3d0731c | 197 | while(true) { |
kenjiArai | 5:af9fa3d0731c | 198 | led_gate = 1; |
kenjiArai | 5:af9fa3d0731c | 199 | freqency = (float)fc.read_frequency(t_gate); |
kenjiArai | 5:af9fa3d0731c | 200 | led_gate = 0; |
kenjiArai | 5:af9fa3d0731c | 201 | wait(1.1 - t_gate); |
kenjiArai | 5:af9fa3d0731c | 202 | if (freqency == 0) { |
kenjiArai | 5:af9fa3d0731c | 203 | led_not_zero = 1; |
kenjiArai | 5:af9fa3d0731c | 204 | } else { |
kenjiArai | 5:af9fa3d0731c | 205 | led_not_zero = 0; |
kenjiArai | 5:af9fa3d0731c | 206 | } |
kenjiArai | 5:af9fa3d0731c | 207 | read_sw_and_set_gate_time(); |
kenjiArai | 6:44c2bcbdd77b | 208 | PRINTF("f= %9.0f [Hz], gate= %4.3f [Sec]\r\n", freqency/t_gate, t_gate); |
kenjiArai | 6:44c2bcbdd77b | 209 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 210 | lcd.locate(0, 0); // 1st line top |
kenjiArai | 5:af9fa3d0731c | 211 | lcd.printf("%8.0f", freqency); |
kenjiArai | 5:af9fa3d0731c | 212 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 6:44c2bcbdd77b | 213 | #endif |
kenjiArai | 6:44c2bcbdd77b | 214 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 215 | glcd.locate(0, 10); |
kenjiArai | 6:44c2bcbdd77b | 216 | glcd.printf(" \r\n"); |
kenjiArai | 6:44c2bcbdd77b | 217 | glcd.locate(10, 10); |
kenjiArai | 6:44c2bcbdd77b | 218 | glcd.printf("%8.0f Hz", freqency); |
kenjiArai | 6:44c2bcbdd77b | 219 | glcd.locate(10, 20); |
kenjiArai | 6:44c2bcbdd77b | 220 | #endif |
kenjiArai | 5:af9fa3d0731c | 221 | switch (sw) { |
kenjiArai | 5:af9fa3d0731c | 222 | case 0: |
kenjiArai | 6:44c2bcbdd77b | 223 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 224 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 225 | lcd.printf("x1000 Hz"); |
kenjiArai | 6:44c2bcbdd77b | 226 | #endif |
kenjiArai | 6:44c2bcbdd77b | 227 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 228 | glcd.printf(" x1000 "); |
kenjiArai | 6:44c2bcbdd77b | 229 | #endif |
kenjiArai | 5:af9fa3d0731c | 230 | break; |
kenjiArai | 5:af9fa3d0731c | 231 | case 1: |
kenjiArai | 6:44c2bcbdd77b | 232 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 233 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 234 | lcd.printf("x100 Hz"); |
kenjiArai | 6:44c2bcbdd77b | 235 | #endif |
kenjiArai | 6:44c2bcbdd77b | 236 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 237 | glcd.printf(" x100 "); |
kenjiArai | 6:44c2bcbdd77b | 238 | #endif |
kenjiArai | 5:af9fa3d0731c | 239 | break; |
kenjiArai | 5:af9fa3d0731c | 240 | case 2: |
kenjiArai | 6:44c2bcbdd77b | 241 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 242 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 243 | lcd.printf("x10 Hz"); |
kenjiArai | 6:44c2bcbdd77b | 244 | #endif |
kenjiArai | 6:44c2bcbdd77b | 245 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 246 | glcd.printf("x10 "); |
kenjiArai | 6:44c2bcbdd77b | 247 | #endif |
kenjiArai | 5:af9fa3d0731c | 248 | break; |
kenjiArai | 5:af9fa3d0731c | 249 | case 3: |
kenjiArai | 5:af9fa3d0731c | 250 | default: |
kenjiArai | 6:44c2bcbdd77b | 251 | #if defined(USE_TEXT_LCD) |
kenjiArai | 5:af9fa3d0731c | 252 | // 12345678 |
kenjiArai | 5:af9fa3d0731c | 253 | lcd.printf("x1 Hz"); |
kenjiArai | 6:44c2bcbdd77b | 254 | #endif |
kenjiArai | 6:44c2bcbdd77b | 255 | #if defined(USE_GRAP_LCD) |
kenjiArai | 6:44c2bcbdd77b | 256 | glcd.printf(" x1 "); |
kenjiArai | 6:44c2bcbdd77b | 257 | #endif |
kenjiArai | 5:af9fa3d0731c | 258 | break; |
kenjiArai | 5:af9fa3d0731c | 259 | } |
mio | 1:2a347c40b1da | 260 | } |
mio | 1:2a347c40b1da | 261 | } |
kenjiArai | 8:651bfebc5f39 | 262 | |
kenjiArai | 8:651bfebc5f39 | 263 | void read_sw_and_set_gate_time(void) |
kenjiArai | 8:651bfebc5f39 | 264 | { |
kenjiArai | 8:651bfebc5f39 | 265 | if (sw_10) { |
kenjiArai | 8:651bfebc5f39 | 266 | led_10 = 1; |
kenjiArai | 8:651bfebc5f39 | 267 | sw = 2; |
kenjiArai | 8:651bfebc5f39 | 268 | } else { |
kenjiArai | 8:651bfebc5f39 | 269 | led_10 = 0; |
kenjiArai | 8:651bfebc5f39 | 270 | sw = 0; |
kenjiArai | 8:651bfebc5f39 | 271 | } |
kenjiArai | 8:651bfebc5f39 | 272 | if (sw_01) { |
kenjiArai | 8:651bfebc5f39 | 273 | led_01 = 1; |
kenjiArai | 8:651bfebc5f39 | 274 | sw += 1; |
kenjiArai | 8:651bfebc5f39 | 275 | } else { |
kenjiArai | 8:651bfebc5f39 | 276 | led_01 = 0; |
kenjiArai | 8:651bfebc5f39 | 277 | } |
kenjiArai | 8:651bfebc5f39 | 278 | switch (sw) { |
kenjiArai | 8:651bfebc5f39 | 279 | case 0: |
kenjiArai | 8:651bfebc5f39 | 280 | t_gate = 0.001; |
kenjiArai | 8:651bfebc5f39 | 281 | break; |
kenjiArai | 8:651bfebc5f39 | 282 | case 1: |
kenjiArai | 8:651bfebc5f39 | 283 | t_gate = 0.01; |
kenjiArai | 8:651bfebc5f39 | 284 | break; |
kenjiArai | 8:651bfebc5f39 | 285 | case 2: |
kenjiArai | 8:651bfebc5f39 | 286 | t_gate = 0.1; |
kenjiArai | 8:651bfebc5f39 | 287 | break; |
kenjiArai | 8:651bfebc5f39 | 288 | case 3: |
kenjiArai | 8:651bfebc5f39 | 289 | default: |
kenjiArai | 8:651bfebc5f39 | 290 | t_gate = 1.0; |
kenjiArai | 8:651bfebc5f39 | 291 | break; |
kenjiArai | 8:651bfebc5f39 | 292 | } |
kenjiArai | 8:651bfebc5f39 | 293 | } |
kenjiArai | 8:651bfebc5f39 | 294 | |
kenjiArai | 8:651bfebc5f39 | 295 | #if defined(TARGET_LPC1768) |
kenjiArai | 8:651bfebc5f39 | 296 | |
kenjiArai | 8:651bfebc5f39 | 297 | // Clock Output From pin21(PWM6) |
kenjiArai | 8:651bfebc5f39 | 298 | // Set Clock Freq with div. |
kenjiArai | 8:651bfebc5f39 | 299 | // if mbed is running at 96MHz, div is set 96 to Get 1MHz. |
kenjiArai | 8:651bfebc5f39 | 300 | void PWM6_SETCLK(int div) |
kenjiArai | 8:651bfebc5f39 | 301 | { |
kenjiArai | 8:651bfebc5f39 | 302 | LPC_PWM1->TCR = (1 << 1); // 1)Reset counter, disable PWM |
kenjiArai | 8:651bfebc5f39 | 303 | LPC_SC->PCLKSEL0 &= ~(0x3 << 12); |
kenjiArai | 8:651bfebc5f39 | 304 | LPC_SC->PCLKSEL0 |= (1 << 12); // 2)Set peripheral clock divider to /1, i.e. system clock |
kenjiArai | 8:651bfebc5f39 | 305 | LPC_PWM1->MR0 = div - 1; // 3)Match Register 0 is shared period counter for all PWM1 |
kenjiArai | 8:651bfebc5f39 | 306 | LPC_PWM1->MR6 = (div + 1)>> 1; // |
kenjiArai | 8:651bfebc5f39 | 307 | LPC_PWM1->LER |= 1; // 4)Start updating at next period start |
kenjiArai | 8:651bfebc5f39 | 308 | LPC_PWM1->TCR = (1 << 0) || (1 << 3); // 5)Enable counter and PWM |
kenjiArai | 8:651bfebc5f39 | 309 | } |
kenjiArai | 8:651bfebc5f39 | 310 | |
kenjiArai | 8:651bfebc5f39 | 311 | #elif defined(TARGET_LPC1114) |
kenjiArai | 8:651bfebc5f39 | 312 | |
kenjiArai | 8:651bfebc5f39 | 313 | // CLOCKOUT from pin24(dp18) |
kenjiArai | 8:651bfebc5f39 | 314 | // Freq = 48MHz/4 = 12MHz |
kenjiArai | 8:651bfebc5f39 | 315 | void clock_out(void) |
kenjiArai | 8:651bfebc5f39 | 316 | { |
kenjiArai | 8:651bfebc5f39 | 317 | LPC_SYSCON->CLKOUTCLKSEL = 3; // System clock |
kenjiArai | 8:651bfebc5f39 | 318 | LPC_SYSCON->CLKOUTDIV = 4; // div 1/4 |
kenjiArai | 8:651bfebc5f39 | 319 | LPC_IOCON->PIO0_1 = 1; // select CLKOUT to P0_1(pin24)/dp18 |
kenjiArai | 8:651bfebc5f39 | 320 | LPC_SYSCON->CLKOUTUEN = 1; // enable output |
kenjiArai | 8:651bfebc5f39 | 321 | } |
kenjiArai | 8:651bfebc5f39 | 322 | |
kenjiArai | 8:651bfebc5f39 | 323 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 8:651bfebc5f39 | 324 | |
kenjiArai | 8:651bfebc5f39 | 325 | void port_mco1_mco2_set(void) |
kenjiArai | 8:651bfebc5f39 | 326 | { |
kenjiArai | 8:651bfebc5f39 | 327 | uint32_t temp = 0x00; |
kenjiArai | 8:651bfebc5f39 | 328 | |
kenjiArai | 8:651bfebc5f39 | 329 | // PA8 -> MCO_1 |
kenjiArai | 8:651bfebc5f39 | 330 | temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)8 & (uint32_t)0x07) * 4)) ; |
kenjiArai | 8:651bfebc5f39 | 331 | GPIOA->AFR[8 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(8 & (uint32_t)0x07) * 4)) ; |
kenjiArai | 8:651bfebc5f39 | 332 | GPIOA->AFR[8 >> 3] |= temp; |
kenjiArai | 8:651bfebc5f39 | 333 | GPIOA->MODER &= ~(GPIO_MODER_MODER0 << (8 * 2)); |
kenjiArai | 8:651bfebc5f39 | 334 | GPIOA->MODER |= (0x2 << (8 * 2)); |
kenjiArai | 8:651bfebc5f39 | 335 | GPIOA->OSPEEDR |= (0x03 << (8 * 2)); // High speed |
kenjiArai | 8:651bfebc5f39 | 336 | // PC9 -> MCO_2 |
kenjiArai | 8:651bfebc5f39 | 337 | temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)9 & (uint32_t)0x07) * 4)) ; |
kenjiArai | 8:651bfebc5f39 | 338 | GPIOC->AFR[9 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(9 & (uint32_t)0x07) * 4)) ; |
kenjiArai | 8:651bfebc5f39 | 339 | GPIOC->AFR[9 >> 3] |= temp; |
kenjiArai | 8:651bfebc5f39 | 340 | GPIOC->MODER &= ~(GPIO_MODER_MODER0 << (9 * 2)); |
kenjiArai | 8:651bfebc5f39 | 341 | GPIOC->MODER |= (0x2 << (9 * 2)); |
kenjiArai | 8:651bfebc5f39 | 342 | GPIOC->OSPEEDR |= (0x03 << (9 * 2)); // High speed |
kenjiArai | 8:651bfebc5f39 | 343 | // Select output clock source |
kenjiArai | 8:651bfebc5f39 | 344 | RCC->CFGR &= 0x009fffff; |
kenjiArai | 8:651bfebc5f39 | 345 | #if 0 |
kenjiArai | 8:651bfebc5f39 | 346 | // MC0_1 output HSE 1/4, MCO_2 output SYSCLK 1/4 |
kenjiArai | 8:651bfebc5f39 | 347 | // MCO2 MCO2PRE MCO1PRE MCO1 |
kenjiArai | 8:651bfebc5f39 | 348 | RCC->CFGR |= (0x0 << 30) + (0x6 << 27) + (0x6 << 24) + (0x3 << 22); |
kenjiArai | 8:651bfebc5f39 | 349 | #else |
kenjiArai | 8:651bfebc5f39 | 350 | // MC0_1 output HSE 1/1, MCO_2 output SYSCLK 1/2 |
kenjiArai | 8:651bfebc5f39 | 351 | // MCO2 MCO2PRE MCO1PRE MCO1 |
kenjiArai | 8:651bfebc5f39 | 352 | RCC->CFGR |= (0x0 << 30) + (0x4 << 27) + (0x0 << 24) + (0x3 << 22); |
kenjiArai | 8:651bfebc5f39 | 353 | #endif |
kenjiArai | 8:651bfebc5f39 | 354 | } |
kenjiArai | 8:651bfebc5f39 | 355 | |
kenjiArai | 8:651bfebc5f39 | 356 | #else |
kenjiArai | 8:651bfebc5f39 | 357 | #error "No support for this CPU" |
kenjiArai | 8:651bfebc5f39 | 358 | #endif |