HT8970 特性測定

14_271_1ht.jpg
HT8970は、PT2399に似たデジタルディレイICです。2020年12月に生産終了していますが、しばらくはAliExpressで手に入ると思います。データシートによると、RAMサイズが20キロビットとなっており、PT2399(RAM44キロビット)よりディレイタイムが短くなります。



PT2399の時と同様に、下図の回路でC9 = C11の容量値を変えた場合の特性等を測定します。C7 = C8 = 100nF、入力レベルは-10dBu(約0.69Vp-p)です。比較のためPT2399のデータも掲載します。
※今回購入したものは何かしらの製品基板から取り外した中古品のようです(本物かどうか不明です)。

  • ディレイタイム(ミリ秒)
    R6PT2399HT8970
    03017
    4.7k8149
    10k14786
    22k280164
    もう少し短くなるのを予想していましたが、約0.58倍となっています。

  • 周波数特性 一つは入力レベル+10dB

    HT8970の100nF(黄色)はPT2399の100nF(水色)より少し高音域の下がり方が大きくなっています。HT8970のデータシートの回路例で47nFが使われているのは、こういった特性の違いを反映しているようです。

  • ノイズ・歪率(1kHz正弦波を入力)
    ▽R6 = 0Ω

    ▽R6 = 22kΩ

    PT2399よりHT8970の方が全体的に歪率・ノイズ共に大きくなっています。

  • 分圧用抵抗
    IC内部のアナログ基準電圧は抵抗分圧で生成されていると考えられています。HT8970はこの抵抗値が約2.9kΩでした(PT2399は約5.5kΩ)。PT2399の2番ピンを使ってコーラス回路を構成しているものをHT8970で置き換える場合、効き方が変わってくると考えられます。


HT8970はPT2399と特性が違っているということがわかりました。特に長めのディレイタイムで使うのは厳しいです。ディレイタイム最小でコーラスにするとしても、生産終了品なので新規設計に使いたくないところです。……ということで、残念ながらHT8970の使い道はあまりなさそうという結果になってしまいました。

PT2399 周辺コンデンサ検討

デジタルディレイIC PT2399の7~12ピンに接続するコンデンサの役割について調べ、最適な値を検討しました。

PT2399のデータシートは内容が少ないため、以下を参考にしました。
ElectroSmash - PT2399 Analysis
M50195PデータシートPDF(PT2395互換品)
M50199PデータシートPDF(同種IC)



PT2399のアナログ-デジタル変換方式は、Adaptive Delta Modulation(ADM)と呼ばれるものです。ADMはM50199Pのデータシートで解説されているので、以下に転載しておきます。

ADM変復調
 ADMとは、Adaptive Delta Modulation の略で、適応デルタ変調とも呼ばれます。これは、1ビット符号によりアナログ-ディジタルの変換を行うもので、多ビットによるものより装置を簡略化・低コスト化できます。
 ADMの原理は、信号周波数に対して十分に高い周波数でサンプリングすると、すべての隣接サンプル値間で、その変化値はほとんどある一定値以内になり、その変化値が正であるか負であるかの情報のみ(1ビット)符号化します。(図1参照)これがDM(デルタ変調)と呼ばれる方式です。しかし、このままでは図1の様な急激な立ち上がり信号のときでは、一定値だけの加減では追随できず(傾斜過負荷歪)、また、図2の様に無信号では大きな雑音源(粒子性雑音)となることがわかります。
 そこで一定値(デルタ)の幅を信号の状況に応じて適応的に制御し、図1の様な急激な傾斜をもつ信号のときは、デルタ幅を大きく、また図2の様な無信号時ではデルタ幅を小さくし、歪・S/Nを改善したものが、ADM方式と呼ばれます。


 M50199Pでは電流制御回路(CC1)、外付のコンパレータ、オペアンプ(OP1)で構成したミラー積分器によりADM変調(A-D変換)を行い、電流制御回路(CC2)、オペアンプ(OP2)で構成したミラー積分器により、ADM復調(D-A変換)を行います。




PT2399について、M50199Pと同様に考えます。


CC0とCC1(Current Control:電流制御)に繋ぐコンデンサはADMのステップ幅の予測器に使われ、9~12ピンに繋ぐコンデンサはADMの積分器を構成するものと考えられます。

サンプリング周波数は、内部VCO(Voltage Controlled Oscillator)によって決定されます。VCOの発振周波数が低くなると、サンプリング間隔が長くなりディレイタイムが伸びます。それと同時に、量子化誤差が大きくなり音質が劣化します。



下図の最小限の回路で、コンデンサの静電容量値を変えた場合の特性等を測定します。入力レベルは-10dBu(約0.69Vp-p)です。
14_268_4pt2399s.png



【C9・C11】
積分器のコンデンサ容量を小さくすると、ADMのデルタ幅を大きくできるため波形追従能力が上がります。その半面、最小のデルタ幅も大きくなりノイズが増えると考えられます。→参考ページ:EEEGUIDE.COM - Delta Modulation(DM)
  • 波形 R6 = 0Ω C7 = C8 = 100nF C9 = C11 = 100nF
    各周波数の正弦波を入力した場合の出力波形です。
    14_268_5wav.png
    8kHzではほとんど波形追従できなくなり、三角波となっています。

  • スルーレート R6 = 0Ω C7 = C8 = 100nF
    今回の例でスルーレートと呼んでよいのかはわかりませんが、オペアンプでいうスルーレートにあたるものを算出してみます。1Vp-pの矩形波を入力しています(画像クリックで波形拡大表示)。
     C9 = C11 = 10nF 0.039 V/μs
     C9 = C11 = 47nF 0.014 V/μs
     C9 = C11 = 100nF 0.0080 V/μs
     C9 = C11 = 220nF 0.0041 V/μs
    NJM4558が1V/μsなので、増幅しないことを考慮してもかなり遅いです。

  • 周波数特性 R6 = 0Ω C7 = C8 = 100nF
    ディレイタイムを変えても周波数特性は変わらなかったので、最短ディレイタイムでのデータです。
    ▽C9 = C11 一つは入力レベル+10dB
    14_268_10f1.png
    音量またはコンデンサ容量増加で波形追従できなくなり、高音域が劣化しやすくなることがわかります。

    ▽C9 ≠ C11 の場合
    14_268_11f2.png
    低音域側と高音域側のバランスが崩れています。A-D変換とD-A変換の不整合が起こると考えられるので、無理にこの方法で音色を調整しない方がよいでしょう。

  • ノイズ・歪率(1kHz正弦波を入力) C7 = C8 = 100nF
    ▽R6 = 0Ω C9 = C11
    14_268_12n0.png
    ▽R6 = 22kΩ C9 = C11
    14_268_13n22k.png
    10nF以外は微妙な差ですが、コンデンサ容量を減らすとノイズレベルが上がることがわかります。



【C7・C8】
残念ながらADMの予測器というのがどのような回路かわかりません。容量値を変えた時の変化を確認してみます。
  • 周波数特性 C9 = C11 = 100nF C7 = C8

    特に差は認められませんでした。

  • ノイズ・歪率(1kHz正弦波を入力) C9 = C11 = 100nF
    ▽R6 = 0Ω C7 = C8
    14_268_15f4.png
    ▽R6 = 22kΩ C7 = C8
    14_268_16f5.png
    1μFと100nFはあまり差がありませんが、1nFだとノイズが増えて歪率が上がりました。

  • スルーレート C9 = C11 = 100nF (画像クリックで波形拡大表示)
     C7 = C8 = 1nF 0.0099 V/μs
     C7 = C8 = 1μF 0.0080 V/μs
    1nFだと改善がありましたが、あまり効果は大きくありません。



【まとめ】
  • 9・10ピン間、11・12ピン間のコンデンサ
    容量値を大きくするほど低ノイズ化、高音域カットとなります。ディレイタイム、入力レベルをどの程度で考えるかにもよりますが、概ね47nF~100nFがよいでしょう。

  • 7・8ピンに繋ぐコンデンサ
    ある程度大きい容量値が必要で、100nFあれば充分そうです。小型の積層セラミックコンデンサを使って問題ないと思います。



結局のところデータシート記載の回路例で問題ないという結果になりました。しかしながら、PT2399を使ったエフェクターを設計したいという方にとっては少しは有用なデータだったのではないかと思います。

ATtiny85 タップテンポ付LFO その2

14_229_1atLFO2.png
前回のLFOをさらに発展させました。主な変更点は下記の通りです。考え方は前回と同じで、一定間隔でPWMのデューティ比を変更します。
・1周期126分割→510分割(PWMの分解能8ビット分をフルに生かせる)
・PWM周波数31.25kHz→250kHz(出力ピンPB0→PB1)
・タイマー割り込みを使ってPWMデューティ比を変更、タップ時間計測

タイマー・割り込みに関する詳細説明は省きます。ATtiny85(日本語データシートpdf)は2つのタイマーがあり、Timer0でデューティ比変更時間の管理とタップテンポの時間計測をし、Timer1でPWMを使います。該当レジスタを変更することにより様々な設定を行うわけですが、見慣れないビット演算が出てくるので最初は戸惑うかもしれません。
参考ページ→C言語入門::付録 ビット演算びんずめ堂)・AVRでのタイマとPWMの使い方うしこlog)・AVRでの割り込みの使い方うしこlog

今回のスケッチでは三角波を生成しています。ATtiny85のPWMを最高速で動作させるため、Arduino IDEのツールメニューから「Timer1 Clock: "64MHz"」を選択し「ブートローダを書き込む」という操作を行っておく必要があります。

▽Arduinoスケッチ(94行)
const int PWMpin = 1;
const int POTpin = 3;
const int SWpin = 4;

volatile byte rateCount = 0; // Timer0用カウンタ = 割り込み回数
volatile byte rateCountNum = 0; // Timer0 割り込み回数決定値
volatile int pwmCount = 0; // PWM用カウンタ 0~509
volatile unsigned long timeCount = 0; // タップ時間取得用カウンタ

unsigned long tapTime = 0; // タップ間隔時間
unsigned long timeTemp = 0; // タップ間隔時間一時保存用
unsigned long swCount = 0; // スイッチ用カウンタ
const byte rateAdj = 99; // 周期補正率 % 実測して設定
int oldPOTvalue = 2000; // 前回ADC読取値
int newPOTvalue = 2000; // 今回ADC読取値

void setup() {
PLLCSR |= (1 << PLLE); // Timer1 PLL許可
delayMicroseconds(200); // Timer1 PLL許可後安定するまで待機
PLLCSR |= (1 << PCKE); // Timer1 PCK(64MHz)許可
TCCR1 = 0b01100001; // Timer1 PWM動作A 分周なし
OCR1A = 100; // Timer1 比較Aの値 = PWMデューティ比
TCCR0A = 0b00000010; // Timer0 CTCモード
TCCR0B = 0b00000010; // Timer0 クロック8分周
TIMSK |= (1 << OCIE0A); // Timer0 比較A割り込み許可
OCR0A = 100; // Timer0 比較Aの値 = 割り込み間隔 us
pinMode(PWMpin, OUTPUT);
pinMode(POTpin, INPUT);
pinMode(SWpin, INPUT_PULLUP);
sei(); // 全割り込み許可
}

// LFO(Timer0 比較A割り込み)---------------------------------------
ISR(TIMER0_COMPA_vect) {
if (rateCount == rateCountNum) {
rateCount = 0;
if (pwmCount == 510) pwmCount = 0;
if (pwmCount < 256) OCR1A = pwmCount; // 三角波(上昇)
else OCR1A = 510 - pwmCount; // 三角波(下降)
pwmCount++;
}
rateCount++;
timeCount++;
}

void loop() { // 1ループ約0.14ms
// タップテンポ ---------------------------------------------------
if (digitalRead(SWpin) == LOW) {
swCount++;
if (swCount == 70) { // チャタリング対策 10msスイッチ押下で検出
// 前回スイッチ検出から経過した時間を記録
tapTime = timeTemp + timeCount * OCR0A * 0.001;
timeTemp = 0; // 経過時間をリセット
timeCount = 0;
if ( 100 < tapTime && tapTime < 3000) { // 周期制限 0.1秒~3秒
// デューティ比変更間隔時間へ換算(*1000/510*周期補正率)
rateCalc(tapTime * 1.96078 * rateAdj * 0.01);
}
}
}
else swCount = 0;

// ADC ------------------------------------------------------------
newPOTvalue = analogRead(POTpin); // 読取値が4以上変化で変更
if (abs(newPOTvalue - oldPOTvalue) > 3) {
rateCalc((100 + 3 * newPOTvalue) * 1.96078 * rateAdj * 0.01);
oldPOTvalue = newPOTvalue;
}
}

// デューティ比変更間隔時間(x)変更計算 x = p * q + r ----------------
void rateCalc(int x) {
byte q; // 商
byte r; // 余り
int pMin;
byte qMin;
byte rMin = 255;
for (int p = 255; p > 99; p--) { // 除数255から100まで計算
q = x / p;
r = x % p;
if (r < rMin) { // 余りrが最小値の時の値を記録
pMin = p;
qMin = q;
rMin = r;
}
}
// OCR0A変更前に経過した時間をtimeTempに代入した後、
// カウンタをリセットして新しいOCR0Aで再度カウント開始
timeTemp = timeTemp + timeCount * OCR0A * 0.001;
timeCount = 0;
OCR0A = pMin;
rateCountNum = qMin;
rateCount = 0;
}



<タップ時間計測について>
Timer0に比較A割り込みを設定している関係で、millis関数で時刻を取得しようとしてもうまくいきません。タップ時間の測定は割り込み回数をカウントすることにより行います。Timer0はクロック8MHz、8分周なので最小時間単位は1usです。OCR0Aを200にすると200usごとに割り込みが発生します。

【例】0.2msごとに割り込みが発生(OCR0A=200)→割り込みが50回発生(timeCount=50)→経過時間10ms(0.2ms×50)

OCR0Aを更新する時に、更新前の時間(timeTemp)を計算しておく必要があります(スケッチ最下部)。TCNT0も加味した方がより正確ですが、そこまでの精度は必要ないでしょう。タップについては1回目と2回目の区別はなく、毎回前回タップからの経過時間を計算します。経過時間が設定可能なLFO周期内であるときだけ、実際に周期を変更することになります。



<デューティ比変更間隔時間の計算処理について>
OCR0Aを200とし、割り込みが発生する度にデューティ比を変更すると、周期は102ms(0.2ms×510)です。OCR0Aは255まで(8ビット)なので、このままでは周期を長く設定できません。分周比を変えることも考えましたが時間分解能が悪くなります。そこで長い周期を得るために、何回か割り込みが発生した時にデューティ比を変更するようにします。

【例】0.2msごとに割り込みが発生(OCR0A=200)→割り込みが10回発生(rateCountNum=10)するごとにデューティ比変更→周期1020ms(0.2ms×10×510)

次は逆に周期から割り込み間隔と回数を計算します(上記スケッチのrateCalc関数)。ちょっと無理やり感がありますが、100~255usの割り込み間隔で割った商(=割り込み回数)と余り(=誤差)を全て計算し、余りが最小になる時を採用します。割り込み間隔はあまりに狭いと問題がありそうなので、100us以上としました。

【例】最適値計算:周期1030ms(1030000us)→デューティ比変更間隔時間2019us(1030000÷510切捨)→224us(割り込み間隔)×9(回数)+3us(誤差)
計算値設定後:0.224msごとに割り込みが発生(OCR0A=224)→割り込みが9回発生(rateCountNum=9)するごとにデューティ比変更→周期1028ms(0.224ms×9×510)


ほとんどの場合で周期の誤差は2ms以内に収まります。実は上記例では2019usを+1usして再計算したほうが誤差が減るのですが、そこまでの計算はしないことにします。

タグ : マイコン 

ATtiny85 タップテンポ付LFO その1

14_228_1atLFO.jpg
モジュレーション系のエフェクターを作る場合Low Frequency Oscillator(LFO)は必須となりますが、タップテンポ機能をつけたかったのでマイコンを利用しました。2ループスイッチャーのときと同じATtiny85で、接続は上図右です。参考サイト→Arduino: LFO Generator
上記サイトのスケッチもなんとなく理解したつもりですが、初心者(私)向けに自分でプログラミングしてみることにしました。※あまり高品質ではないと思います。

下図は周期126msの三角波の例です。PWMについての詳細説明は省略します。analogWrite関数でPWM出力のデューティ比を変更することにより、256段階の電圧が出力できると大雑把に考えておけばよいかと思います。
14_228_2atLFOs.png
1周期を126分割して考え、1ms経過するごとに4ずつデューティ比を変化させます。1msではなく1.024ms間隔にしたときは、1.024×126で周期129msです。このようにデューティ比変更間隔時間を変えることで周期を変化させます。実測では少しずれるので補正を入れます。

下記スケッチでは予め計算した配列を用意し、正弦波を生成しています。ATtiny85を8MHzで動作させるため、Arduino IDEのツールメニューから「Clock: "8 MHz (internal)"」を選択し「ブートローダを書き込む」という操作を行っておく必要があります。

▽Arduinoスケッチ(69行)
const int PWMpin = 0;
const int POTpin = 3;
const int SWpin = 4;

unsigned long tapTime1 = 0; // 前回タップ時刻
unsigned long tapTime2 = 0; // 今回タップ時刻
unsigned long SWcount = 0; // スイッチ用カウンタ

int oldPOTvalue = 100; // 前回ADC読取値
int newPOTvalue = 100; // 今回ADC読取値

int i = 0; // PWM用カウンタ 0~125
unsigned long rate = 4000; // デューティ比変更間隔時間 us
int rateAdj = 24; // rate補正値 LFO周期: 126 * ( rate + rateAdj ) us
int rateMin = 760; // rate最小値 us
unsigned long preTime = 0; // 前回デューティ比変更時刻
unsigned long postTime = 0; // 現在時刻
byte sineTable[] = {
0, 0, 1, 1, 3, 4, 6, 8, 10, 13, 15, 19, 22, 26, 30, 34,
38, 43, 48, 53, 58, 64, 69, 75, 81, 87, 93, 99, 105, 111, 118, 124,
130, 136, 143, 149, 155, 161, 167, 173, 179, 185, 191, 196, 201, 206, 211, 216,
220, 224, 228, 232, 235, 239, 241, 244, 246, 248, 250, 251, 253, 253, 254, 254
};

void setup() {
TCCR0B = 0b00000001; // PWM高速化 64倍(分周なし) 31.25kHz
pinMode(PWMpin, OUTPUT);
pinMode(POTpin, INPUT);
pinMode(SWpin, INPUT_PULLUP);
}

void loop() {
// タップテンポ----------------------------------------------------------------
SWcount = 0;
while (digitalRead(SWpin) == LOW) {
SWcount++;
if (SWcount == 10) { // チャタリング対策 10msスイッチ押下で検出
tapTime2 = millis() / 64; // PWM高速化の影響でmillis時間が64倍になる
// タップ間隔制限 0.1秒~3秒
if ( 100 < tapTime2 - tapTime1 && tapTime2 - tapTime1 < 3000) {
rate = (tapTime2 - tapTime1) * 7.9365 - rateAdj; // タップ間隔換算
}
tapTime1 = millis() / 64;
}
delayMicroseconds(625); // 1ms待機(約1.6倍になる?)
}

// ADC-------------------------------------------------------------------------
newPOTvalue = analogRead(POTpin);
if (abs(newPOTvalue - oldPOTvalue) > 2) { // ADC読取値が3以上変化でrate変更
rate = rateMin + 24 * newPOTvalue;
oldPOTvalue = newPOTvalue;
}

// LFO-------------------------------------------------------------------------
if (i == 126) i = 0;
while (micros() / 64 - preTime > rate - 300) {
// 普段はスイッチ検出待ちのためメインループを繰り返すが、
// デューティ比変更予定時刻の300us前になったらこのループ内に入り待機する
postTime = micros() / 64;
if (postTime - preTime >= rate) {
if (i < 64) analogWrite(PWMpin, sineTable[i]); // 正弦波(上昇)
else analogWrite(PWMpin, sineTable[126 - i]); // 正弦波(下降)
preTime = postTime;
i++;
break;
}
}
}
タップテンポについては、単純にスイッチを押した間隔を計算します(間隔が長すぎる場合は設定変更されません)。delayMicrosecondsはPWM高速化の影響なのか実測すると待機時間が1.6倍程度になっていました。割り込み機能も考えたのですが、いろいろと制約があるので今回は使いませんでした。

PWM出力に2.2kΩ抵抗器と1μFコンデンサのローパスフィルター(カットオフ周波数72Hz)を通し、オシロスコープで波形を確認しました。
14_228_3atLFOw.png
遠目に見るとよさそうなのですが、拡大すると結構ギザギザです。このままエフェクターに利用できるのかどうかは不明です。

<時間分解能を上げるには>
micros関数での時刻取得には0.01ms程度時間がかかってしまうため、 これが時間計測の最小単位となります。やはり参考サイトにあるようにタイマー割り込みを使うべきでしょう。さらにできれば8ビットではなく16ビットタイマー付きのマイコンを使いたいところです。

---以下2018年8月25日追記---

途中で(おそらくオーバーフロー時)止まる不具合がありましたが、LFO部分の条件式を以下のように修正したところ解決したようです。参考ページ→millis()のオーバーフローの実験
micros() / 64 > preTime + rate - 300

micros() / 64 - preTime > rate - 300

タグ : マイコン 

MOS FETリレー G3VM-21GR 特性測定

SPSTモーメンタリースイッチでエフェクトのバイパスをする場合、リレーとマイコンを使うのが簡単だと思います。しかしながらメカニカルリレーは入手性や電力消費の点でイマイチかなと考え、MOS FETリレーを試すことにしました。

MOS FETリレーはソリッドステートリレーの一種で、各メーカーで同様の商品がありますが名称が違います(フォトリレー、Photo MOSリレー等)。参考ページ→オムロン リレー 技術解説
通常のものはオン抵抗RONや端子間容量COFFが大きいため、バイパスに使用する場合はバッファーが必要となってしまいます。そこで今回は低オン抵抗・低端子間容量タイプのG3VM-21GR(RON=5Ω、COFF=1pF)というMOS FETリレーを選びました。エフェクターでよく使われる青い3PDTフットスイッチと比較検討します。
14_222_1G3VMp.jpg
G3VM-21GRは表面実装部品なので丸ピンソケットにはんだづけしました。フットスイッチは同じ大きさの黒いものも測定しましたが、青のフットスイッチと大差なかったので結果からは省いています。

ハイインピーダンス条件下での使用を考慮し、以下の接続としました。
  [擬似ギター出力]→[リレーG3VM-21GR]または[フットスイッチ]→[バッファー(入力インピーダンス1MΩ)]→[PCマイク入力]

スイッチオン時に音質が変化しないのはもちろん重要ですが、スイッチオフ時も下図のようにハイパスフィルターを形成して高域が漏れることが考えられるので、そのあたりについても確認します。
14_222_2G3VMs.png
※配線が近いだけでも容量が増加してしまうので注意が必要です。

▽結果
14_222_3G3VMd.png

<スイッチオン時の特性変化>
周波数特性はほとんど重なっていますが、よく見るとリレーでは高域が下がっています。まぁごくわずかなので大丈夫でしょう。歪率についてはほぼ変化はありません。

<スイッチオフ時の音漏れ>
リレーではオンオフの差が-21dB(10kHz)となっており、ブースターやハイゲインエフェクターでは問題が出てくるかもしれません。エフェクターに組み込んだ後、どの程度影響があるか測定する予定です。フットスイッチでもわずかに漏れがあることがわかりましたが、実際のトゥルーバイパス配線ではオフ時にエフェクト回路の入力をアースに落とすので、問題になることはないと思います。

---以下2018年6月14日追記---
14_222_4G3VMb.png
まず上図上側のバイパス方法を試しましたが、音漏れがあり発振しやすい上、切替時に少しポップノイズが出ました。その後下側の回路に変え音漏れや発振はなくなりましたが、ポップノイズは消えませんでした。スイッチングの順番をいろいろ変えてみましたがダメなようです。バッファーを入れて考え直すことにします。

タグ : 周波数特性 歪率 擬似ギター出力 

管理人

管理人

自己紹介のページ
記事一覧
X(旧Twitter)
Instagram
GitHub
BOOTH

ブログ内検索
カテゴリー
タグ

回路図   自作エフェクター   歪み   周波数特性   市販エフェクター   レイアウト   マイコン   波形・倍音   PureData   RaspberryPi   エレキギター   アンプ   歪率   エレキベース   エフェクター自作方法   コーラス   真空管   ピックアップ   静音ギター   SansAmpBDDI   ヘッドフォンアンプ   擬似ギター出力   ブースター   アコースティックギター   ソロギター   イコライザー   ポールピース   コンデンサ   コンプレッサー   ディレイ   TAB譜   DIY_Layout_Creator   ビブラート   フェイザー   トレモロ   バッファー   ワウ   オートワウ   

最近の記事
最新コメント
RSS
メールフォーム
当ブログに関するお問い合わせはこちらからお願いします。 ※FAQ(よくある質問)もお読みください。

お名前
メールアドレス
件名
本文

アクセスカウンター