Renesas Community
Renesas Community
  • User
    Join or sign in
  • Site
  • Search Community
  • User
  • Renesas Engineering Community
  • FAQ
  • HELP
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
GR-ADZUKI WAVPを使うとPWMの周期が変わる
  • Forums
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 GR-SAKURA

 GR-KURUMI

 GR-COTTON

 GR-CITRUS

 GR-PEACH

 GR-KAEDE

 GR-ADZUKI

 GR-LYCHEE

 GR-ROSE

 GR-MANGO(*)

 SNShield

 Web Compiler

 IDE for GR

 TOPPERS関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • State Verified Answer
  • Replies 39 replies
  • Subscribers 429 subscribers
  • Views 49886 views
  • Users 0 members are here
  • GR-ADZUKI
Options
  • Share
  • More
  • Cancel
Related Tags
  • auzuki
  • azuki
  • BASIC
  • GR-ADZUKI
  • GR-ADZUKI Node.js Johnny-Five
  • GR-ADZUKI S4A モーター
  • GR-ADZUKI USB
  • WDT
  • デジタルコンパス
  • リセット
  • 省電力
Related

WAVPを使うとPWMの周期が変わる

maenoh!
maenoh! over 5 years ago

WAVPを使うとモーター用PWMの周期がかわってしまうようです。

パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。

void loop() {
    analogWrite(6,50);
 wavp.play("organ.wav");
 wavp.play("okoto.wav");
 wavp.play("jingle2.wav");
}

  • Reply
  • Cancel
  • Cancel
Parents
  • fujita nozomu
    +1 fujita nozomu over 5 years ago

    WAVPを使うとモーター用PWMの周期がかわってしまうようです。

    パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。

    GR-ADZUKI はどうだかわからないのですが、GR-KURUMI の標準のライブラリでのタイマ・アレイ・ユニットの各タイマの割り振りを今確認したところ

    チャネル 内容
    0 ハードウェア PWM のマスタ・チャネル
    1 3番ピン ハードウェア PWM 出力, MsTimer2
    2 5番ピン ハードウェア PWM 出力
    3 10番ピン ハードウェア PWM 出力
    4 9番ピン ハードウェア PWM 出力, Servo ライブラリ使用時のタイマ
    5 マイクロ秒タイマ
    6 ソフトウェア PWM 用タイマ
    7 6番ピン ハードウェア PWM 出力

    こんな感じで使用しており、恐らくは ADZUKI でも大して変わらないのではないかと思います。

    Wavp は TCR00 をマスタ・チャネルとして使用し、チャネル1 と チャネル2 を出力にして残りのタイマのハードウェア PWM の使用は考慮されていない感じです。

    http://gadget.renesas.com/ja/product/kemuri.html に GR-KURUMI のピンマップが掲載されておりハードウェア PWM とソフトウェア PWM に使用できるピンがわかりますが、実際この図は間違っており、ハードウェア PWM に割り当てられたピン以外は全てソフトウェア PWM に使用できるライブラリの作りとなっており、恐らくは ADZUKI でも変わらないと思うので、DC モーター制御程度ならソフトウェア PWM を試してみるというのも手だと思います。ソフトウェア PWM はハードウェア PWM の約490Hz の1/4、約122Hz で動作していたと思いますが DC モーター程度なら支障はないのでは。

    GR-KURUMI のライブラリでは gr_common/RLduino78/cores/pintable.h の中 PinTable[] というテーブルでハードウェア PWM/ソフトウェア PWM の定義を行っており、ハードウェア PWM に設定されているピンをこゝを変更することでソフトウェア PWM に変更することも可能だった筈です。恐らくは ADZUKI でも同様の手は使えると思います。

    • Cancel
    • Up 0 Down
    • Reply
    • Reject Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to fujita nozomu
    fujitaさん、ありがとうございます。モーター制御は(6,11)と(9,10)なのですが、”ソフトウェア PWM に変更することも可能"であれば、解決できるかもしれません。”TCR04 9番ピン ハードウェア PWM 出力、Servo ライブラリ使用時のタイマ”というのがちょっと心配ですが。そもそもWAVPの利用後に初期状態にタイマー設定を戻すライブラリがあればいいのかもしれません。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • @chobichan
    0 @chobichan over 5 years ago in reply to maenoh!
    BD6211の仕様書を読むと、本当はVREFにアナログ信号を入れるとPWMが出来るはず(笑)。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to @chobichan
    まずすみません、WAVPでハードPWMの周期が変わる仕様は明示してなかったですね(Readmeにタイマーのリソースだけ書いてありますが、それでは分からないですね)。周期が変わってもanalogWriteという機能自体は果たすとは思いますが、少なくともPlayが終わったら周期は元に戻すように変更しようかと思います。
    次にDCモーターとサーボの同時使用について、これは考慮が漏れてすみません。ADZUKIもKURUMIもタイマー使用状況はFujitaさんが書かれている通りですが、同時使用で機能しないのはダメですね。
    S4Aのサーボは、以下の通りにソフトで20ms周期を作っており、普通に同時に動いていたので気づくのが遅れました。ちょっと検討させていただきます。

    void servo(byte pinNumber, byte angle) {
    if (angle != 255)
    pulse(pinNumber, (angle * 11) + 560);
    }

    void pulse(byte pinNumber, unsigned int pulseWidth) {
    digitalWrite(pinNumber, HIGH);
    delayMicroseconds(pulseWidth);
    digitalWrite(pinNumber, LOW);
    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to maenoh!

    > モーター制御は(6,11)と(9,10)なのですが、

    GR-ADZUKI の回路図見てみましたが、モーターの制御が

    MOTOR1 F 6番ピン ハードウェア PWM 出力
    MOTOR1 B 11番ピン ソフトウェア PWM 出力
    MOTOR0 F 9番ピン ハードウェア PWM 出力、Servo ライブラリ使用時のタイマ
    MOTOR0 B 10番ピン ハードウェア PWM 出力
    

    こんな感じになっており、4つある信号の内の 3つがハードウェア PWM で、のこり 1つがソフトウェア PWM なのですね、ちょっと驚きました。

    モーター制御には安定したハードウェア PWM を優先して割り当てたいと考えるのが人情と思うのですがそうなっていないのは、恐らくはボード設計者が GR-KURUMI のピンマップ を参照し、11番ピンを他の PWM 出力可能なピンと同等と勘違いされたのではないかと推測します。

    んで、GR-KURUMI では ハードウェア PWM が 5ピン使えたので、それに該当する残り 2ピンはどうなっているかというと、

    SW1 3番ピン ハードウェア PWM 出力
    NC? 5番ピン ハードウェア PWM 出力
    

    こんな感じで、TCR01 は謎のスイッチに接続されており、スイッチが閉の状態では GND に接続されるため出力としての使用は考慮されていないようです。

    残りの 5番ピンはオンボードでは使用されておらずピンソケットとして信号が出ており自由に使えるようです。

    話を戻して、モーター制御の 4つの信号の内 1つがソフトウェア PWM であるということは、いっそのこと 4つ全部がソフトウェア PWM でも支障はないんじゃないかと。

    んで、ADZUKI はオンボードでハードウェア PWM の使用はモーター制御以外には考慮されていないため、モーター制御にハードウェア PWM の使用をやめると内部タイマーの使い方はもっと自由にできそうな感じですね。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to fujita nozomu
    fujitaさん、ありがとうございます。モーター関連のソフトウェアPWM化はうまくいきました。ただし、これに更にWAVPを追加すると6ピンのPWM制御やdigitalWriteがうまく機能しないようです。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    S4Aのアナログ出力が5,6,9で、デジタル出力が10,11,12,13。正転、逆転はデジタルのHIGH/LOWで制御でき、またWAVPが3,5のために、プロデューサーミーティングの結果から、現在のピンアサインになってますが、
    japan.renesasrulz.com/.../thread

    ADZUKIではピン10に使われているタイマーをサーボ用に割り当てたいと思います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to Okamiya Yuuki

    > S4Aのアナログ出力が5,6,9で、デジタル出力が10,11,12,13。正転、逆転はデジタルのHIGH/LOWで制御

    あゝ、成る程。モーター制御の PWM は

    19 P13/TxD2/SO20/(SDAA0)/(TI04)/(TO04)
    22 P10/SCK00/SCL00/(TI07)/(TO07)

    で、

    18 P14/RxD2/SI20/SDA20/(SCLA0)/(TI03)/(TO03)
     9 P72/KR2/SO21   D11(sPWM)(SO21)
    

    の HIGH/LOW 切り替えで正転と逆転ですか。勘違いしてました。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • fujita nozomu
    0 fujita nozomu over 5 years ago in reply to Okamiya Yuuki
    > WAVPが3,5

    3 のチャネル 1 のタイマーは attachMicroIntervalTimerHandler() や MsTimer2 で使用しているので

    > ADZUKIではピン10に使われているタイマーをサーボ用に割り当てたいと思います。

    と同様の考慮が必要でしょう。しかし タイマーの空きがないので機能のトレードオフが必要と思います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to fujita nozomu

    そうですね。悩ましいですがトレードオフになりますね。WAVPはチャネルを選べるようにしましたが、attachMicroIntervalTimerHandler() や MsTimer2をすでに使用している場合は5ピンだけの出力になるようにした方がよさそうですね。

    >Maenoさん

    Webコンパイラに以下のテストバージョンを用意しました。ピン10をソフトPWMにして、サーボ専用にタイマーを割り当てました。ちょっと試していただけないでしょうか?

    GR-ADZUKI_Sketch_e.101.zip

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    GR-ADZUKI_Sketch_e.101は、モーターとサーボの制御に関しては、正常に動作しました。更にGR-COTTONのサンプルプログラムから赤外線リモコン受信の部分を移植して組み合わせてみたのですが、リモコン受信時にサーボの波形が少し乱れます。あと、toneとnoToneが正常に動作していないようです。ロボット用途の場合はWAVPは一時的にピン5だけでいいです。もちろん音楽用途ではステレオ再生を希望しますが。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    Maenoさん、ご確認ありがとうございます。
    IRに関してですが、COTTONのサンプルでは割り込み処理が長いため、割り込み冒頭でinterrupts()を挿入する必要があります。ただ、これだけだと割り込み優先順位がサーボと一緒のため、動作しませんでした。サーボの優先順位をひとつ上げて動作確認したテンプレートを用意しましたので、確認していただけますでしょうか。

    GR-ADZUKI_Sketch_e.101b.zip

    それからtoneに関してですが、tone用のタイマーはピン3に割り当てられているものを使用しているため、ピン3に圧電スピーカーをつけている場合は音がなりません。私はピン5で確認しましたが音がなりました。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to Okamiya Yuuki
    Maenoさん、たびたびすみません。
    Toneライブラリの確認をしましたが、実装が中途半端で音程の変更とかDurationが正しく機能していませんでした。以下、テンプレートを更新しましたので、ご確認いただければ幸いです。

    GR-ADZUKI_Sketch_e.101c.zip

    Toneサンプル:

    void setup(){
    for(int i = 0; i < 500; i+=10){
    tone(5, 500 + i);
    delay(10);
    }
    for(int i = 0; i < 500; i+=10){
    tone(5, 1000 - i);
    delay(10);
    }
    noTone(5);
    delay(500);
    tone(5, 400, 200);
    delay(500);
    tone(5, 400, 1000);
    }

    void loop(){

    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    GR-ADZUKI_Sketch_e.101c、ありがとうございます。以下の結果でした。
    (1)リモコンボタンを押し続けた場合のサーボ波形は乱れがなくなりました。
    (2)toneはピン5だけでなくピン3でも正む常に鳴りました。
    (3)リモコンボタンを押し続けた場合のtoneは途切れ途切れになりました。(特に問題ありませんが)
    (4)ピン13でサーボ制御を試したのですが、servo.detach()のタイミングに依存してHIGH固定やLOW固定になりました。これは、このままの方がいいと思います。無理にLOW固定に強制するとサーボへのパルス幅が変わって誤動作するかもしれないからです。

    ...ということで特に大きな問題はありませんので、次はピン5でのWAVPを期待してます。急ぎませんが。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!

    Maenoさん、ご確認ありがとうございます。Toneを使った場合、ピン3のanalogWriteは多分乱れてしまうと思いますが、ピン3を使用したToneは大丈夫ですね。ちょっと紛らわしくてすみません。

    以下のwav_libライブラリを試してみていただきたいのですが、以下のように第2引数にenumマクロを指定すると5ピンだけの出力になります。

    Wavp wavp(44100, WAVP_OUTPUT_5);

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    Wavp wavp(44100, WAVP_OUTPUT_5)はうまくいきました。
    ただ、モーターのPWMの周期が720us程度に変わってしまうのはそのままなので、デューティ制御が正常にできません。パルス幅はanalogWriteの50で400us、75で600us程度なので正回転時は調整すればなんとかなりますが逆回転時の制御がが難しいです(下記のPWMMAXの値)。

    #define PWMMAX 255
    #define M1F 6
    #define M0F 9
    #define M0B 10
    #define M1B 11
    void drvMotorR(int pwm) {
    if (pwm >0) {
    digitalWrite(M0B,LOW);
    analogWrite(M0F,pwm);
    }
    else if (pwm < 0) {
    digitalWrite(M0B,HIGH);
    analogWrite(M0F,PWMMAX+pwm);
    }
    else {
    digitalWrite(M0B,LOW);
    pinMode(M0F, OUTPUT);
    digitalWrite(M0F,LOW);
    }
    }

    void drvMotorL(int pwm) {
    if (pwm >0) {
    digitalWrite(M1B,LOW);
    analogWrite(M1F,pwm);
    }
    else if (pwm < 0) {
    digitalWrite(M1B,HIGH);
    analogWrite(M1F,PWMMAX+pwm);
    }
    else {
    digitalWrite(M1B,LOW);
    pinMode(M1F, OUTPUT);
    digitalWrite(M1F,LOW);
    }
    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
Reply
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    Wavp wavp(44100, WAVP_OUTPUT_5)はうまくいきました。
    ただ、モーターのPWMの周期が720us程度に変わってしまうのはそのままなので、デューティ制御が正常にできません。パルス幅はanalogWriteの50で400us、75で600us程度なので正回転時は調整すればなんとかなりますが逆回転時の制御がが難しいです(下記のPWMMAXの値)。

    #define PWMMAX 255
    #define M1F 6
    #define M0F 9
    #define M0B 10
    #define M1B 11
    void drvMotorR(int pwm) {
    if (pwm >0) {
    digitalWrite(M0B,LOW);
    analogWrite(M0F,pwm);
    }
    else if (pwm < 0) {
    digitalWrite(M0B,HIGH);
    analogWrite(M0F,PWMMAX+pwm);
    }
    else {
    digitalWrite(M0B,LOW);
    pinMode(M0F, OUTPUT);
    digitalWrite(M0F,LOW);
    }
    }

    void drvMotorL(int pwm) {
    if (pwm >0) {
    digitalWrite(M1B,LOW);
    analogWrite(M1F,pwm);
    }
    else if (pwm < 0) {
    digitalWrite(M1B,HIGH);
    analogWrite(M1F,PWMMAX+pwm);
    }
    else {
    digitalWrite(M1B,LOW);
    pinMode(M1F, OUTPUT);
    digitalWrite(M1F,LOW);
    }
    }
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
Children
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!

    Maenoさん、WAVPでplay後にPWMの周期、デューティをもとに戻すようにしてみましたので、ちょっと確認いただけないでしょうか。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    モーターのPWMの周期が720us程度に変わってしまうのは改善されていないようです。音声再生後にノイズが出るようになりました(タイミングにより出なかったりします)。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!

    Maenoさん、お手数をおかけしてすみませんでした。

    WAVP再生中はピン6,9のPWM周期に合わせてデューティーを合わせるようにして、再生後はPWM周期を元に戻すように修正いたしました。

    なお、GR-ADZUKIのソフトウェアPWMピン10, 11とToneがONの場合、WAVP再生速度に影響が出てきます。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    Okamiyaさん、ありがとうございます。WAVPでの音声再生時にモーターのPWM(6,9)の周期が変わってもデューティ比が維持されているのが素晴らしいですね(再生しながら一定の速度でモーターを回すことができる)。ただし、少し問題が残っていて、モーターのanalogWriteを実行する前に音声再生をしてしまうとモーターのPWMが出ませんでした。あと、TONEのピンをWAVPのピンと重ねることができなかったので、TONEは3、WAVPは5にして正常動作しましたが、これだと圧電スピーカーが2個必要になります。そこで、1つの圧電スピーカーを3と5の間に接続することにしました。すると音がなりませんでした。noToneで3がHiZ状態になるようですね。今のところ、noToneの後で、3をOUTPUTにしてLOW固定することで回避しています。noToneで指定ピンがHiZ状態になるのはArduinoの仕様でしょうか?(LOW固定の方が良いのですが)
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    Maenoさん、ありがとうございます。ちょっと今日は時間が取れず何もできなかったのですが、明日修正を行います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to Okamiya Yuuki

    Maenoさん、すみません、きちんと問題を把握できているか分かりませんが、

    analogWriteの前にwavを再生したときに波形が出ない不具合を修正し、toneとwavp用のピンをシェアしていても大丈夫なようにしました。

    noToneはArduino仕様ではポート入出力は何もせず(出力のまま)、Timerを止めているだけでしたので、RL78もそのようにしようと思います。変更したTone.cppも添付します。

    幾度もデバッグにお付き合いいただいてすみません。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki

    ありがとうございます。もう少しでゴールですね。

    以下の問題がありました。

    (1)TONE_PINとWAVPをピン5に重ねた場合、WAVP再生後にTONEが出ません(HIGH固定後HiZになる)

    (2)TONE_PINをピン3、WAVPをピン5にしてその間に圧電スピーカーを接続した場合、

       WAVP再生後にピン5がHiZになり、TONEの音が出ません(ピン3は出てます)。

    →(2)に関してはWAVPピンもOUTPUT固定にして頂いた方がよいです。

     

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!
    Maenoさん、ありがとうございます。(2)についてちょっと教えてください。ピン3とピン5の間とはA7とGNDのことでしょうか?
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • maenoh!
    0 maenoh! over 5 years ago in reply to Okamiya Yuuki
    5番ピンだけでWAVPとTONEを鳴らすことができなかったので、圧電スピーカーの端子の一方を5、他方を3につないでいます。WAVPでピン5から出力する時はピン3をLOW固定にします。TONEでピン3を使う時はピン5をLOW固定にしたい訳です。ところがWAVP再生後ピン5がHiZになってしまうとそれ以降TONEが鳴りません。まあ、自分でLOW固定すればいいのですが。ただ、WAVPの出力ピンには普通は簡単なアンプがつながっていると思いますので、ノイズ等を避ける意味でも再生後はLOW固定の方が良いかなと思います。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to maenoh!

    Maenoさん、本件ご対応遅くなっておりすみません。LYCHEEとかいろいろと少し落ち着いたので開始しました。

    ただ、考えていたよりちょっと難航中です。WAVP再生後、SAUが何かしらの設定で1を出していると思うのですが、なかなか見つけきれてないです。もう少しお時間いただきます。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • エイジ
    0 エイジ over 5 years ago in reply to Okamiya Yuuki
    岡宮さん,RL78のSAUは未使用時にハイが正しい状態ですが。
    SAUがハイだから,ポートの出力が可能になります。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to エイジ
    あ、失礼しましたANDでしたね。
    実際のところ以下をコメントアウトしたりしなかったりするとP15のTO2が出たり出なかったりで、いまいち何が影響しているのか分からないのですよね。
    SO1.BIT.bit1 = 0;
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • エイジ
    0 エイジ over 5 years ago in reply to Okamiya Yuuki
    SO1.BIT.bit1が具体的にRL78/G13の何を指しているか分かりませんが,RL78の兼用ポートでSAU系の出力を使用する場合には,ポートの出力ラッチは1に,タイマの出力等それ以外の出力を使用するには出力ラッチは0に設定する必要があります。
    P15からTO02を出力するには,PIOR0ビットが1,P1.5が0,PM1.5が0,ついでに兼用機能のPCLBUZ1が0である必要があります。
    端子のブロック図ではSAU以外とひとまとめにされていますが,この場合にはTO02とPCLBUZ1がORになっているので,注意が必要です。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • エイジ
    0 エイジ over 5 years ago in reply to エイジ

    もしかして,P1.5が入力(Hi-Z)のときにP1.1をビット操作したのではありませんか?
    そうだとすると,ビット操作によってP1.5の出力ラッチが書き換わっている可能性が考えられます。P1.5をTO02に設定して,出力に設定する直前にP1.5をビット操作でクリアしてみてください。

    【修正】

    そうか,SO1はSAU1の出力のレジスタでしたね,P1.5とは関係ない信号だったので勘違いしていました。

    SO1レジスタは16ビットレジスタなので,リード・モディファイ・ライトでbit1をクリアしていると思いますが,そのときにbit8(CKO10:SCK20に相当)が変に書き換わっているのかもしれません。CKO10が0になれば,P1.5の値によらず,TO02は出せるかもしれません(P1.5を0にするのが正規の方法ですが)。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Okamiya Yuuki
    0 Okamiya Yuuki over 5 years ago in reply to エイジ

    エイジさん、本件アドバイスをいただきましてありがとうございました。

    まず、私にひとつ勘違いがありました。問題の発端としては①WAV再生(PWM)→②TONEでビープで②が動作しないというものなのですが、②はPWMでなく、タイマーによるポートパタパタで実現されていました。とはいえ、原因としては兼用機能の出力ラッチによる影響でした。

    問題は2つあり、一つ目はエイジさんにアドバイスいただいたSO1レジスタで、16ビット操作専用にもかかわらずプログラムがビット操作になっており、該当ビットだけを0にするはずが、すべてのチャネル用のビットが0になってしまっており、P1.5の出力にも影響を与えていました。

    二つ目は①WAV再生後にタイマー機能の出力TO0のビット2がクリアされておりませんでした。このため出力ラッチがORで入っているため、P1.5出力が固定され、正常に動作しませんでした。

     

    >Maenoさんへ、

    一応修正したwav_libを添付いたしますので、時間が経ってしまい恐縮ですが、試してみていただけるとありがたいです。

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2022 Renesas Electronics Corporation. All rights reserved.