ファンクション・ジェネレータ このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.
Dependencies: Array_Matrix mbed SerialTxRxIntr MyTicker7
Diff: MSeq16.hpp
- Revision:
- 1:0430f1ed6c2c
- Parent:
- 0:53c0fa8a9aa2
--- a/MSeq16.hpp Thu Sep 09 08:50:21 2021 +0000 +++ b/MSeq16.hpp Wed Oct 06 12:20:04 2021 +0000 @@ -1,7 +1,7 @@ //--------------------------------------------------------- -// M 系列信号発生器(N = 16) +// M 系列信号発生器(N = 16) // -// 2021/08/23, Copyright (c) 2020 MIKAMI, Naoki +// 2021/09/28, Copyright (c) 2021 MIKAMI, Naoki //--------------------------------------------------------- #include "mbed.h" @@ -11,32 +11,25 @@ namespace Mikami { - class MSeq16 - { - public: - MSeq16() : reg_(1) {} + class MSeq16 + { + public: + MSeq16() : reg_(1) {} - // 戻り値: 1 => 1, 0 => -1 - float Execute() - { - if ((reg_ & B_M_) == B_M_) - { - reg_ = ((reg_ ^ XOR_) << 1) | 1; // 1 の場合の処理 - return 0.5f; - } - else - { - reg_ = reg_ << 1; // 0 の場合の処理 - return -0.5f; - } - } - private: - static const uint16_t XOR_ = (1 << (2-1)) - | (1 << (3-1)) - | (1 << (5-1)); // XOR の位置に対応する定数 - static const uint16_t B_M_ = 1 << (16-1); // 16 段目に相当するビットを調べる - - uint16_t reg_; - }; + // 戻り値: 0 => -0.5, 1 => 0.5 + float Execute() + { + msb_ = reg_ >> 15; + reg_ = ((reg_ ^ XOR_[msb_]) << 1) | msb_; + return RET_[msb_]; + } + private: + static const uint16_t XOR_[2]; // XOR の一方の入力 + static const float RET_[2]; // 戻り値として使用 + uint16_t reg_; // 16 段の D フリップ・フロップに対応 + uint16_t msb_; // 16 段目に相当するビット + }; + const uint16_t MSeq16::XOR_[2] = { 0, 0x16 }; + const float MSeq16::RET_[2] = { -0.5f, 0.5f }; } -#endif // MSEQ16_HPP \ No newline at end of file +#endif // MSEQ16_HPP \ No newline at end of file