質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.58%

シフトレジスタ(NJU3711)をArduino Pro Miniで動作させたいのですが困っています。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,905

score 9

前提・実現したいこと

最終的にArduino Pro Mini(3.3V版)にシフトレジスタ(NJU3711)を接続して4つのモータを動作させるのが目標。今はマイコンからシフトレジスタに指定した順番で8つのLEDを光らせたいと思っています。

発生している問題・エラーメッセージ

エラーメッセージは出ていないのですがシフトレジスタのP1~P8(パラレル変換データ出力端子)から出力がでてこない、指定したパターンで出力されません。

該当のソースコード

_#define CLK 13 // クロック信号出力ピン
_#define STB 10 // ラッチ動作出力ピン
_#define DATA 12 // データ信号出力ピン
_#define CLR 9 // リセット出力ピン

void setup() {
  pinMode(CLK,  OUTPUT) ;  //制御するピンは全て出力に設定する
  pinMode(STB,  OUTPUT) ;
  pinMode(CLR,  OUTPUT) ;
  pinMode(DATA, OUTPUT) ;  //ここまでシフトレジスタ用
  digitalWrite(STB, HIGH) ;
  delay(300);
}

void loop() {

   digitalWrite(STB, LOW) ; //通信中は,LatchPinをLOWにする
   shiftOut(DATA, CLK, MSBFIRST, 0b10101010); //LEDを交互に光らせる
   digitalWrite(STB, HIGH); //送信後はLatchPinをHIGHに戻す

}

試したこと

MSBFIRSTをLSBFIRSTにしてみたり、0b10101010以外のパターンを試したりしました。
指定しているピンが間違えてるとかなのでしょうか?よくわからなくて…

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/08/12 22:44

    shiftOut関数のソースコードを提示してください

    キャンセル

回答 2

checkベストアンサー

+1

見たところCLRの出力が指定されていません。Lowになっていてリセット状態のままなのではないでしょうか。

また、これは今回の問題の原因ではありませんが、STBのHigh/Lowも逆じゃないですかね。
今のままだとシフト中の中途半端な値が出力されてしまいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/16 00:02

    ソースコードを以下のものに変更して予備で買っておいた別のシフトレジスタで試したら無事動作しました。
    CLRの出力が指定出来ていなかったこととシフトレジスタそのものが不調だったみたいです。

    void loop() {
    digitalWrite(CLR,HIGH);
    digitalWrite(STB, HIGH) ; //通信中は,LatchPin,CLRをHIGHにする
    shiftOut(DATA, CLK, MSBFIRST, 0b10101010); //LEDを交互に光らせる
    digitalWrite(STB, LOW); //送信後はLatchPinをLOWに戻す
    }

    キャンセル

-5

まず、STB信号の扱いが間違っています
そして、CLR信号も扱いを間違っていますね

#おまけに、shiftOut関数のソースもわからない。

NJU3711のデータシートをよく読みましょう


まず、「NJU3711」でぐぐります
検索結果のトップに(これは環境にもよりますんでトップとは限りませんが)、まさにNJU3711のデータシートが引っかかります
https://www.njr.co.jp/products/semicon/PDF/NJU3711_J.pdf
これを読んでいくと、3ページ目に機能説明があるのがわかります。
そこには、どの信号をどうすると、どういう動作をするか、という説明が書いてあります

データシートというのは、メーカが出している公式の仕様書です。
ここに書いてある通りに動き、またはここに書いてあるとおりにしか動かない、というものですね。

さて、あなたのコードはこの通りに動くものでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/12 23:16

    質問者のことを考えて言っているのではありませんwwwwwwwwwwwwwwww。
    正解をぼかした回答は価値が無いばかりか、正誤の判断に無駄な労力を使わせるので、見る人全てにとって不利益を生みますwwwwww。

    キャンセル

  • 2018/08/12 23:20

    少なくともあなたには不利益なようですね。がんばりましょう。応援していますw

    キャンセル

  • 2018/08/12 23:33

    はい、態度とか気に障ってとても不利益です。がんばります。応援してください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る