あわせて読みたい


マイコン 目次
2022/10/23 EtherCATはここからジャンプできます。 マイコン記事の目次です。記事をお探しの場合は、この目次ページから目を通してみてください。 【RL78】 RL78の記事…
あわせて読みたい


RL78で思うこと
※2021/11にアップした記事を加筆・訂正したものです。 RL78で感じたことなどメモ。 数年前からポツポツとRL78を使う仕事が出てきたので、まとめた記事をこちらにアップ…
あわせて読みたい


RL78 メモ|開発環境など
RL78とCS+で気が付いた、細かいことのメモです。 ※ルネサスは例によって「リンク切れまくり」です(リダイレクトする気が無いようです)。ご容赦願います。 ルネサス内…

興味があるところを読む
RL78/G13の消費電流を測る
2019/4/4 どの程度の省エネCPUか調べてみた。 使ったCPUは秋月の R5F100LGAFB ROM128K, RAM12K, 64PIN 。 サブクロック発生用にEPSONのRX8900(2.5~5.5V/ 0.7μA)のFOUTを使ってる。 電圧:3V(低速メインモード1.8~5.5V)。 メインクロック(CPU・周辺用):オンチップOSC fCLK=1Mhz。 サブクロック(RTC・WDT・12bitIT用):RX8900のFOUTで fSUB=32.768KHz。 周辺はUART、AD(+コンパレータ)、IT12を使用(WDTはSTOP中はカウント停止)。 空きポートの処理はしてない。 G13内蔵のRTCの定周期(およびALARM)INTRで目覚める設定にして実験した。 周辺停止+stop中は1.8μA。 RTCで目覚め、UART+AD(+コンパレータ)+I2CをONにすると750μA。 ただ、何かの拍子に消費電流が多くなることがある(下図は自作の微少電流計で計測)。 ソースはこんな感じ。
void MyStop(void)
{
// 寝る前に電気食いを止める
R_UART0_Stop(); // uart
R_ADC_Stop(); // ad
R_ADC_Set_OperationOff(); // コンパレータも止める
R_IT_Stop(); // it12
// CPUをSTOP → RTCの定周期(およびALARM)INTRで目覚める
STOP();
// 目覚めたら電気食いを起こす
R_UART0_Start(); // uart
R_ADC_Start(); // ad
R_ADC_Set_OperationOn(); // コンパレータ動作許可
R_IT_Start(); // it12
R_WDT_Restart(); // wdtはリセットしておこう
}
微少電流を測る作戦
3.3Vに負荷50Kを繋いだときの消費電流は 3.3÷50.000K=0.066mA=66μA なはず。 この50Kに100Ωの抵抗を直列に入れて、テスターで①の電圧を測ると 6.6mVになった。分圧の自動計算ページより 3.3 - 3.2934 = 6.6mV・・・合ってる。ってことは 100Ωを使い①で電圧を測り、その値を10倍すれば電流値になる。 6.6mVと表示されたら66μA 10.0mVと表示されたら100μA 100.0mVと表示されたら1000μA=1mA もし10Ωを使うなら 0.6mVと表示されたら60μA 6.0mVと表示されたら600μA 60.0mVと表示されたら6000μA=6mA と読み取る。だよね。 ※このテスターの最小レンジは0.1mVなので 100Ωが良さげ。 10Ωだと 0.6mV=60μA 0.1mV=10μA・・・最小レンジ以下は測れない 100Ωだと 6.6mV=66μA 1.1mV=11μA ・・・ これなら1μA単位まで読み取れる ※シャント抵抗の 値がでかいけど、負荷との差が大きいからOKってことで。 もし100Ωを繋いだとしても 3.3÷50.100K=0.0658mA=65.8μAだから大差無く測れる。 負荷の抵抗値が大きいなら(=消費電流が微少なら)、シャント抵抗をでかくすれば測れる。 ※シャント抵抗と負荷の消費電流による電圧低下について。 100Ωだと 100 × 0.001(1mA) = 0.1V低下・・・1mA以下を測るなら100Ωを使う。 10Ωだと 10 × 0.01(10mA) = 0.1V低下・・・10mA 〃 10Ωを使う。 1Ωだと 1 × 0.1(100mA) = 0.1V低下・・・100mA 〃 1Ωを使う。
ADを一番簡単に使う
「単純に電圧を読み出したいだけ」と言う使い方なら、割込みも要らないし変換完了フラグを調べる必要も無い。 プログラムでAD変換を開始して、少し待って読み出すだけ・・・こんな使い方も結構ありますよね。
UARTの速度
微少電流計を作ったので、G10で試しに2Mbpsを試したら、普通に通信できてる。 ↓以下の記事では800Kbpsと書いてますが、実験では2Mbpsまで大丈夫なようです。 2019/7/17 秋月の R5F100LGAFB (RL78/G13: ROM128K,RAM12K,64PIN)を使ってUARTの速度を調べた。 PCとの接続には秋月のシリアル変換ケーブル TTL-232R の5Vタイプを使った。 このケーブルに内蔵されているRS232ドライバの限界速度が900Kbps近辺らしいんで、G13から送信可能な最高速度で選べるのは800Kbps(内蔵OSC8MHz時)。 800Kbpsってことは、10bit/1byteとして80Kbyteだから、1秒間に80,000byte送信できるって事かな。 G13側のコードはこれだけど、50byteずつ連続送信してるだけ(100~200byteにしても転送速度に変わりはなかったが、10byteにすると速度がバラつく)。
#define CNT 50
void test(void)
{
uint8_t tx[CNT], i;
for (i=0; i<CNT; ++i) tx[i] = i;
while (1) {
MF_R_UART0_Send(tx, CNT);
while (MF_IsTxEnd() == FALSE) NOP();
// メインクロック8MHzでUART=800Kbps
// この速度でPC側は問題無く受信可能だ(実験済み)
// ↓Delayナシで7000~7250byte、有りで3000byteを送信する
//DelayMsec(1);
}
}
PC側は100msのインターバルタイマーによる連続読み出しで、100ms毎に7,000~7,250byteを受信してる。 ってことは、1秒間に約70,000byte、設定したボーレートに結構近い値だから、G13は頑張ってる感じかも。 なおRTS制御はナシ、受信エラーハンドラは追加してるが、エラーは発生していない。
// Timer1(100msインターバル)
private void timer1_Tick(object sender, EventArgs e)
{
if (serialPort1.IsOpen == true) {
int rxcnt = serialPort1.BytesToRead;
if (rxcnt > 0) {
serialPort1.Read(rxbuf, 0, rxcnt);
ListDisp(rxcnt.ToString());
}
}
}
無線センサ
こちらに移動しました。

コメント