PIC PWMをLEDドライバで駆動

このQ&Aのポイント
  • PICで生成したPWM信号をLEDドライバで駆動したいと考え添付の様な回路を作成し動作させました。
  • しかし、PIC PWM出力直後のLEDは蛍の様に点滅をするのに対し、ドライバ駆動のLEDはゆらゆら点滅になってしまいます。
  • 初心者ですので雑な作りかと思いますがご指摘を願いします。
回答を見る
  • ベストアンサー

PIC PWMをLEDドライバで駆動

PICで生成したPWM信号をLEDドライバで駆動したいと考え添付の様な回路を作成し動作させました。 <問題点> PIC PWM出力直後のLEDは蛍の様に点滅をするのですが、ドライバ駆動のLEDはゆらゆら点滅になってしまいます。 尚、PIC PWMをON/OFF出力にした場合、連動してON/OFFしています。 <LEDドライバ amazon購入> ・入力範囲:DC 5-35V、出力700mA±20mA、1-10 3W LED駆動 ・PWM調光、ハイレベルオフ出力、低レベルの電源オン出力に対応 ・ステップダウン動作モードにより、LEDの総電圧差が入力電源電圧より2 – 3 V未満であることを保証します  ※ステップダウン動作モードが分かっていません 初心者ですので雑な作りかと思いますがご指摘を願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

ステップダウン動作モードとは、おそらくステップダウン(降圧)DC-DCコンバータの事を指していると思うので、降圧DC-DCコンバータによる定電流駆動と、PWM調光を備えているもので探してみました。 https://ja.aliexpress.com/item/4000340845096.html 制御ICは、以下のPT4115ですので、降圧DC-DCコンバータによる定電流駆動とPWM調光(データシートではDIM(調光)端子)を備えています。 https://pdf1.alldatasheet.jp/datasheet-pdf/view/1141911/ETC2/PT4115.html 他には、こんなのもありました。 https://strawberry-linux.com/catalog/items?code=13932 こちらは制御ICが、LT3932です。 https://www.analog.com/media/jp/technical-documentation/data-sheets/j3932f.pdf 降圧DC-DCコンバーターにこだわらず、シリーズレギュレータ方式でもよいなら、これが使えそうですが、シリーズレギュレータなので、ICの発熱は大きく、効率も悪くなると思います。 NJW4617(日清紡マイクロデバイス(旧 新日本無線)製) https://akizukidenshi.com/catalog/g/gI-12989/ ここに売っているのは単体ICですが、ピッチ変換基板に半田付けすれば、ブレッドボードにも搭載できます。 https://akizukidenshi.com/catalog/g/gP-14815/ 以上のような物で、用途に合いそうな物があればいいですが、どうでしょうか。

user_abc
質問者

お礼

どうもありがとうございます。 考えてみればチップ説明で使われている用語もよく理解しないまま 何とかなるだろうと組み上げたらダメだったという情けない結末でした。 今回は色んな選択肢を教えて頂いたのであらためて構想が膨らんできました。 調べて分からないときはまたここにお世話になりますのでよろしくお願いします。

その他の回答 (6)

回答No.6

XL4001EのPWM生成機能は、DC-DCコンバータの発振の駆動デューティー比を作っているもので、LEDを調光制御するPWMとは別だと思います。 データシートを見た限りでは。 この基板がどういう素性の基板なのかわかりませんが、私が、このICデータシートを読んだ限りではENビンを使ったPWM調光は出来ないような気がします。 ご提示いただいた回路図では「EN/PWM」と書かれていますがデータシートのICのビン名称は「EN」だけになっています。 Amazonでの基板機能の説明では、PWM調光が可能となっていたのかもしれませんが、それ自体が誤植だった可能性もあるのではないでしょうか? Amazonの、この類の基板の場合、おそらく購入時にも説明書等は同梱されていなくて、基板のみが送付されてきたと思うので、それが誤植だったのかどうかも不明ですが。 データシートを読むと、ENピンは、このICからのDC-DCコンバータ発振のPWM出力を有効/無効にする機能しか無いように見えます。 このICは定電流出力するので、FBピンで電圧フィードバック、CSピンで電流フィードバックして、この2つのフィードバックを元に、DC-DCの発振駆動PWMのデューティーを制御しているので、ENビンにPWM信号を入れても調光は出来ないと思われます。 私がデータシートの解釈を間違っている可能性もありますが。

user_abc
質問者

補足

コメントありがとうございます。 簡単にXL4001E基板はPICのPWM出力をドライバで使えると思い込み購入しました。説明書はありませんでした。 今回、電源、LED,PWM端子にVR(電圧変化)のシンプル環境で試してみましたが点灯・消灯のみの動作でした。 仰る通りこのXL4001E基板では難しいような気がしてきました(通常のON/OFFだけなら問題ないですがPWMの様な高周波は無理っぽいですね・・使い方が違う!?) 類似案件をネットで色々調べてみましたが、PIC(マイコン)の出力を単純にLEDドライバで駆動する例は中々見つかりませんでした。 やりたいことはPICのポート情報を収集し、パワーLEDのON/OFF、PWM調光をしたいだけなんですが、その場しのぎのパワートランジスタでは効率が悪そうですし、MOSFETなどで自前ドライバーを検討しないといけないんでしょうね。この方向で参考になるコメント頂けると嬉しいです。

回答No.5

YouTube動画を見ました。 これが、ゆらゆら点滅ですか。 私には、ゆらゆらという表現のような、優雅な感じには見えませんでしたが、それは個人の感性の問題なのでどうでもよかったですね。 やはり、このXL4001搭載基板の各部の波形を観測してみたいところですね。 オシロスコープがなければ仕方がないんですけど。 私はAmazonで買った激安組み立てキットの簡易オシロを愛用しています。 私が買った物と同じものはもう売っていませんが、これとほぼ同じものです。 https://www.amazon.co.jp/Ren-He-2-4%E3%82%A4%E3%83%B3%E3%83%81TFT-%E3%83%8F%E3%83%B3%E3%83%89%E3%83%98%E3%83%AB%E3%83%89%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%82%B5%E3%82%A4%E3%82%BA-%E3%82%A2%E3%82%AF%E3%83%AA%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9%E4%BB%98%E3%81%8D/dp/B091KVMHX5/ref=pd_vtp_8/357-8263271-8617206?pd_rd_w=sZtox&pf_rd_p=949e26f5-c2ef-4c96-bfde-49d7614d0317&pf_rd_r=V3VV8NCQZC35ESSRTY14&pd_rd_r=71502894-b96b-4a74-8c11-a9b0830a98d5&pd_rd_wg=8nCOC&pd_rd_i=B091KVMHX5&psc=1 あまり使いやすくはありませんけど。 他に組み立てキットではなく、完成品ならこんな感じのがあります。 https://www.amazon.co.jp/Quimat-%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%EF%BC%88%E7%B5%84%E7%AB%8B%E5%AE%8C%E6%88%90%E5%93%81%EF%BC%89-0-200KHz-Div-20V-DSO%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97/dp/B077D3XWHX/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3TVOX023V7TN4&keywords=%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97&qid=1646762978&sprefix=%E3%82%AA%E3%82%B7%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%2Caps%2C234&sr=8-5 今後も電子工作をされるなら、こんな物も用意されてはどうでしょうか。

user_abc
質問者

補足

YouTube動画ご覧いただきありがとうございます。 PWMをPICで生成していますのでPICの出力は多分問題ないと思いますのでここから先が問題なんでしょう。 ご指摘のありました2SC1815の代わりに74HC04(TC4049BP代用)でやってみましたが、動作はほとんど変わりませんでした。 XL4001Eのマニアルを見ると「代表的なアプリケーション(バックLED定電流ドライバ)」と部品数がちょっと少ないですがほぼ同じように思います。 XL4001EマニュアルとXL4001E基板を見てもあまり理解できませんがXL4001EにPWM生成機能があるようなので基板のPWM端子にはPWM信号を入れていいのか分かりません。 あと、ご指摘いただいたようにPWMをもっと低い周波数にしようと思ったのですがPICの仕様を見るとPWM周期は610Hz以下には出来ないようです。 LEDドライバ(XL4001E基板)を保留にして何とか動かそうとパワートランジスタ(TIP41C)で駆動してみたら理想に近い動作を得られました。 https://youtu.be/8bHnegFzylM LEDドライバ(XL4001E基板)は今回使えると思って購入したので何とか使って動かしたいのですが・・・・頑張ってみます。

回答No.4

その基板内の回路図が無いので、正確な事はわかりませんが、この基板のEN/PWM端子は、ICのEN端子に直接接続されているでしょうか? もしそうだとすると、このPWMで制御しているのは、LEDをON/OFF制御しているのではなく、DC-DCコンバータの発振の方を制御しているように思います。 だとすると、あまりONデューティーの時間が短すぎると発振のON/OFFが追従できないのかもしれません。 (PWMがONデューティーの期間だけ、発振している?) 完全に想像でしかないのですが、もしかするとPWM周期を100Hz程度にまで下げた方が追従しやすいかもしれません。 あと、ENピンはHiレベル1.4V以上となっていて、ブロック図でも内部の3.3Vレギュレータで動作しているので、12Vを使わなくても5Vで十分に動作するハズです。 オシロスコープ無くて、波形が見れないそうなので、正確に原因を特定することは難しいかもしれませんが、いろいろ試してみるしかないかな。

user_abc
質問者

補足

アドバイスありがとうございます。 PWMの周期を低くするのはソフトで対応できますのでやってみたいと思います。 曖昧な表現しか出来ませんでしたが、急遽youtubeに動作状況を動画にしてアップしてみました。 https://www.youtube.com/watch?v=QpzPvMVxrBc 動画内の手前の一個のLEDはTEST1の部分です。奥の9個はドライバに繋げたものです。

回答No.3

Amazonで購入されたとのことですが、まず、御提示いただいた回路図に書かれている「LED-DRV(XL4001E)」とは、XL4001EというICを指しているのでしょうか? こういうものですか? https://www.amazon.co.jp/sina-XL4001-ESOP-8-%E9%99%8D%E5%9C%A7%E3%83%81%E3%83%83%E3%83%97-XL4001E1/dp/B08YX75J6Z/ref=sr_1_1?ascsubtag=1ba00-01000-org00-win10-dsk00-nomod-jp000-gatwy-feature-SEARC&keywords=XL4001&qid=1646647549&sr=8-1 それとも、この回路図の「LED-DRV(XL4001E)」の部分はXL4001Eを搭載した、LEDドライバ ”基板"を指しているのでしょうか? こういう物ですか? https://www.amazon.co.jp/Moechando-XL4001%E3%82%92%E6%90%AD%E8%BC%89-%E5%AE%9A%E9%9B%BB%E6%B5%81%E5%87%BA%E5%8A%9BLED%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90-%EF%BC%88%E5%85%A5%E8%8D%B7%E4%BA%88%E5%AE%9A%E3%81%82%E3%82%8A%EF%BC%89/dp/B0962WYVDH/ref=sr_1_4?ascsubtag=1ba00-01000-org00-win10-dsk00-nomod-jp000-gatwy-feature-SEARC&keywords=XL4001&qid=1646647549&sr=8-4 文章を読んでも、回路図を見ても、どっちのことを指しているのかよく分かりません。 とりあえず、後者のXL4001Eを搭載した基板だと思って回答したいと思います。 「蛍の様に点滅」「ゆらゆら点滅」がどういう状態を指しているのかよくわからないので、正確に表現していただきたいのですが、想像すると蛍の様にとは、PWMデューティ比を上げ下げして、徐々に明るくしたり暗くしたりしようとされているのかなと思います。 (ゆらゆらの方は本当に何のことかわかりません) 御提示の回路図「TEST2」の箇所の波形は確認されたでしょうか? 意図した通りの波形になっていたでしょうか? あと、この回路図で、点線で書かれている5Vの部分は何でしょうか? このICのENピンは、OPENにしていると、Loに固定されるようなので、データシートには明記されていませんが、内蔵プルダウンが入っているのではないかと推察します。 そこでこの回路では、Hiを入力するのに12V-コレクタ間の100Ωの抵抗を通じてHiを入れているので、100Ωの抵抗と内蔵プルダウンの分圧になり、遅延等もあって、ちゃんとした方形波のPWM波形になってないのではないかと思います。 2SC1815などのトランジスタで論理反転するのではなく、74HC04などのロジックICで論理反転してはどうでしょうか? データシートを見るとENピンは、1.4V以上でHiレベルと判断ようですので、5Vロジックで大丈夫だと思います。

user_abc
質問者

補足

回答どうもありがとうございます LED-DRV(XL4001E)の部分はドライバ基盤(後者)になります。 オシロスコープを持ち合わせないので見た目の表現ですみません。 PICプログラムにてDuty比を0%-100%、100%-0%までを2.5sec周期程度でPWM出変化させています。 このPWM出力をLEDで点灯したイメージを「蛍の様に点滅」と表現しています。 これをパワーLEDで実現したくLEDドライバに繋いでいます。すると2.5sec周期なのですが「ゆらゆら点滅」例えばここれもイメージですがDuty比が0,10,20,30,40...90,100,90...40,30,20,10,0のところが0,40,30,20,40,30,20...の様点灯しているに見えます。 添付が一枚でしたので動画は諦めました。 あと、5V点線部分は当初の配線で、電圧不足かと思い12V配線にしてみました(ほとんど変化在りませんでした) 74HC04での対応も検討してみます。

  • iijijii
  • ベストアンサー率55% (503/912)
回答No.2

PWM周期は最低でも10ms以下にする必要があります。 ホタルではいくらなんでも長すぎます。 もし平滑化ではなく点滅させたいならそのドライバは不敵です。

user_abc
質問者

補足

回答どうもありがとうございます PICプログラムにてPWMのDuty比を0%-100%、100%-0%までを2.5sec周期程度で変化させています。 PIC内ソフトで26msタイマ割込みでDuty比を0%,1%,2%,4%...の様にsinカーブ(-90度から270度)の繰り返しをイメージして変更しています。 PWM出力直後のLEDは蛍の様にゆっくり、概ね2.5secで暗明を繰り返しています。 図中ドライバLED-DRV(XL4001E)の部分はドライバ基盤を購入しています。基盤内にPWM入力のシルクが施されていましたので...中華製ですので何とも言えません(中国の人すみません) <PWMイメージ> (等幅フォントでお願いします) PICのクロックは10MHzとしてPWM設定周期は610Hz(1.64ms)程度にしています ->|1.6m|<- _|____|____|____|____ 0% : _|~|__|~|__|~|__|~|__ 25% : _|~~|_|~~|_|~~|_|~~|_ 50% : _|~~~||~~~||~~~||~~~| 75% : _|~~~~|~~~~|~~~~|~~~~| 100% |<------- 2.5sec ---------------------------------------------------------------------------------------->| _|____|____|......_|~|__|~|__|~|...._|~~|_|~~|_....._|~~~||~~~|....._|~~~~|~~~~|....._|~|__|~|.|____|____| 0% 25% 100% 25% 0%

  • ohkawa3
  • ベストアンサー率59% (1339/2254)
回答No.1

たぶん、LEDドライバーとして採用したXL4001の使い方が間違っているように思います。 基本的な使い方は、下図のような回路構成であって、ドライバーとLEDとの間に、D1とLとを接続することが必須です。 ところで、「蛍の様に点滅」「ゆらゆら点滅」と表現なさっていますが、技術的な事柄を表すのであれば、定量的な表現をするようにお願いします。「蛍の様に点滅」「ゆらゆら点滅」のどちらが、立ち上がり/立下りが速いのか、読者には分りません。 XL4001のデータシート: https://pdf1.alldatasheet.com/datasheet-pdf/view/763180/ETC2/XL4001E1.html

user_abc
質問者

補足

回答どうもありがとうございます 「蛍の様に点滅」「ゆらゆら点滅」表現についてはご指摘の通りです。すみません。 図中ドライバLED-DRV(XL4001E)の部分はドライバ基盤を購入しています。基盤にPWM入力のシルクが施されていましたので...中華製ですので何とも言えません(中国の人すみません)

関連するQ&A

  • picマイコンの出力にて、定電流回路をON/OFFさせLEDを駆動させたいのですが?

    PIC16F84Aマイコンを使用して、duty比 1:10 ON時間 10mS のパルスを 出力して、その出力にて 2SC1815 を駆動させ、LM317Tを使用した (100mA 又は 1A) の 定電流回路を、ON/OFFさせたいといろいろ 実験をしていますが、どうも上手くいきません。 定電流回路は、LM317の出力に抵抗を入れそこに LM317のajs を繋ぎ LEDに出力と考えています。 こういった構成では、不可能なのでしょうか? どの様な回路を組んだら実現できるのか教えて頂けませんか?

  • PICの相補PWMについて

    PICの相補PWMについて タイトルのとおりPICの相補PWMというのがさっぱり分かりません。 PICのデータシートやプログラムの参考にと購入した本を読むと、相補PWMというのはPWMの1周期の中でペアになっているピンが、それぞれ逆位相の波形を出力する機能だと思うんですが合っているでしょうか? また合っている場合、PICのデータシートに乗っていた回路(添付画像)、多分これはモータ駆動の回路だと思うんですが、これだとモータはPWM1周期の間に正転と逆転を繰り返して動かないような気がするんですがどうなのでしょうか? どなたか教えていただけないでしょうか。 よろしくお願いします。

  • PICでのリレー駆動

    現在、PICからコイル電圧5Vのリレーを駆動させる回路を作成しています。 PICから一定間隔でON/OFF信号を送っていますが、ON/OFFの間隔でリレーから、チッ・チッ・チッという音が鳴るだけでリレーが駆動しません。 上記のような症状の場合はどうすればよろしいでしょうか? リレーはOMRONのG6C-2117P-USを使用しています。 HSIN DAのY14H-1C-5DSに交換した場合は、正常に駆動しました。

  • トランジスタでマトリックスLEDをダイナミック駆動

    こんにちは。 初めて質問させていただきます。 PICマイコンとトランジスタを使用して、LEDを4x4でダイナミック駆動によって点灯させたいと思っております。 回路を組んでみたのですが、どうも思ったように動作しません。 PICにつないでおかしいと思ったので、PICを外して直接ベースをつなぎ変えたりして試しているのですが、やはりうまく動作しません。 以下の回路図で、2SC2120側のベースに5V、2SA950のベースについて、  ・オープンだと消灯  ・GNDだと点灯  ・5Vでも点灯 という動作となりました。 私としては、5V印加で消灯してくれると期待してました。 2SC2120側は5V/GND接続で点灯/消灯ができています。 回路図(省略しているので見づらいかも知れません…)                 5V            5V                  |             |                  E            E PIC 5V出力─470Ω─B          …─B                  C(2SA950)       C                 ├─────┐    |                 91Ω     91Ω    :                 |         |                 LED(20mA) LED(20mA)                 |         |                 E        E PIC 5V出力─470Ω─B      …─B                 C(2SC2120)  C                 |         |                 GND     GND なにぶん、キットではなく初めて一から回路を組んでみているので、初歩的な質問をしているかもしれませんが、どうかアドバイスよろしくお願いいたします。

  • PICのPWMの正しい使い方について教えてください

    PIC12F1822用のPWMの基本動作テストプログラムを作りましたが、PWM出力が意図どおりに得られません。 (XC8のテストプログラムを下に添付。テストパターン1/2の切り替えはコメントアウトをお願いします。  アナライザの出力を画像で添付しました。) テスト目的: タイマー0の周期割り込みに合わせて、PWMのデューティー比(または周期)を変更するプログラム   テストパターン 1 : パルスのデューティー比を変えるテスト 質問1: パルスのデューティー比を変えるテストは、PWM設定の一回おきにCCPからのPWMの出力が出ません テストパターン 2 : パルスの周波数を変えるテスト 質問2: 周波数を変えるテストはOKに見えるものの、1回目のPWMがHighとなるのと、割り込みの11回目、13回目あたりでPWM出力が欠落する 【回答のお願い】 どうも、PWMのレジスタ設定に手順、またはタイミングがあるのではないかと思いますが、原因がわからず困っております。 PICに詳しい方からのご指導をよろしくお願いいたします。                                    K.A. ------------------------------------------------------ /* * File: PIC12F1822 PWC * Author: K.A. * * Created on 2014/07/20 * * タイマー0の周期割り込みに合わせて、PWMのデューティー比(または周期)を変更するプログラム * */ #include <stdio.h> #include <stdlib.h> #include <xc.h> #pragma config FOSC=INTOSC, WDTE=OFF, PWRTE=ON, BOREN=ON, MCLRE=OFF #define _XTAL_FREQ 8000000 // クロック8MHz /* * */ // タイマー割込みの処理 int TMR0_Count = 0; // タイマーの割込み発生回数をカウントする変数 void interrupt Timer0(void) { // タイマー0の割込み発生か? Timer0 は 8bitの オーバーフロー・カウンタ if (TMR0IF == 1) { TMR0_Count++; if (TMR0_Count > 5) { TMR0_Count = 0; if (RA5 == 0) RA5 = 1; else RA5 = 0; // RA5は、動作表示用LED } TMR0IF = 0; // タイマー0割込フラグをリセット } } int main(int argc, char** argv) { unsigned int pulse_width = 5; OSCCON = 0b01110010; // 内部クロックは8MHz ANSELA = 0b00000000; // すべてをデジタルI/Oに割当 TRISA = 0b00001000; // すべてのピンは出力に割当てる(RA3は入力専用) PORTA = 0b00000000; // 出力ピンの初期化(全て'0'にする) RA5 = 0; // 動作確認用LED // Timer0  Timer0 は 8bitの オーバーフロー・カウンタ OPTION_REG = 0b00000001; // 内部クロックでTIMER0を使用、プリスケーラカウント値 1:2 // bit5:0=Fosc/4, bit3:0=PreScaler_ON, bit2-0:PreScaler TMR0 = 0; // タイマー0の初期化 (+2cycle) TMR0IF = 0; // タイマー0割込フラグを0にする TMR0_Count = 0; // 割込み発生の回数カウンターを0にする TMR0IE = 1; // タイマー0割込みを許可する GIE = 1; // 1: 全割込み処理を許可する /* PWM */ TRISA2 = 1; // RA2 出力をサスペンド TMR2IF = 0; // TMR2 フラグをクリア CCP1SEL = 0b0; // CCP1/P1Aの機能をRA2に割り当てる CCP1CON = 0x0C; // PWM モード // Period を 設定する xx ms=((PR2)+1)*4*125ns(8MHz)* PreScaler(x1-x64) PR2 = 127; // 4.096ms (プリスケーラが x64 の場合) T2CKPS0 = 0b1; // プリスケーラ 00:x1, 01:x4, 10:x16, 11:x64 T2CKPS1 = 0b1; // CCPR1L = pulse_width >> 2; // パルス幅上位8bit CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; // パルは幅下位2bit TMR2ON = 1; // TMR2 カウント開始 while (TMR2IF == 0) { /** / do nothing /**/ } TRISA2 = 0; // RA2に出力を接続 while (1) { if (TMR0_Count == 0) { /**** テストパターン 1 : パルスのデューティー比を変えるテスト ****/ // パルスのデューティー比を変えるテストは、PWM設定の一回おきにCCPがPWMの出力が出ません。 なぜ? pulse_width = pulse_width + 10; if (pulse_width > 500) pulse_width = 5; /**/ /**** テストパターン 2 : パルスの周波数を変えるテスト **** / // 周波数を変えるテストはOKに見えるが、 // 1回目のPWMがHighとなるのと、割り込みの11回目、13回目あたりでPWM出力が欠落する PR2 = PR2 - 8 ; if (PR2 < 8) PR2 = 127; pulse_width = PR2 ; // Duty 25% に相当 /**/ CCPR1L = pulse_width >> 2; CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; TMR0_Count++; // 続けて PWMの設定変更をしないためのフラグ代わり } } return (EXIT_SUCCESS); }

  • PICによるLED制御について

    大学の講義でPICのLED制御の課題がよくわかりません。 どなたか教えていただけないでしょうか? [問]  PIC16F84Aにおいて、動作を実現するプログラムを示せ。  メインルーチンでLED出力の点燈箇所を1秒ごとに巡回させる。   RA3=Low(OFF)のとき、左向きに巡回シフト(RLF命令)させる。   RA3=High(ON)のとき、右向きに巡回シフト(RRF命令)させる。  また割り込みルーチンによって、RA0~RA2の3ビットの値に応じて  点灯速度を変化させる(値が大きいほど速く)  ただし、ポートAは全て入力モード、ポートBはRB0以外を出力モードとし(RB0は割り込み用)、ポートBの初期出力を0000100*(LED出力の初期点燈位置は第3ビットのみ)とせよ。

  • LEDドライバーICの応用

    LEDドライバーICの応用 質問させていただきます。 4mAから20mAの電流でコントロールできる機器があります。 この機器を16台程度PICからコントロールしたいと思っています。 LED用の定電流ドラーバーICが使えないかと思っています。 候補と思っているのは、 TI社のTLC59116です。 TLC59116は、 16-CHANNEL Fm I2C-BUS CONSTANT-CURRENT LED SINK DRIVER ということで、I2Cでコントロール出来る16チャンネルの定電流ドライバーICのようです。 プログラミングは問題ないのですが、電子回路の知識が乏しくデータシートを理解しきれません。 私の理解が合っているかどうかと、TLC59116を私の使用目的に使えるかについてご教授下さい。 1.LED定電流ドライバーとは、接続される負荷(LED等)によらず一定の電流を供給できるもの。 2.LED定電流ドライバーを使って電流値でコントロールする機器をコントロールすることは可能。 3.TLC59116にはFが付いている物と付いていない物がある。Fが付いていない物は、I2Cから受けた0-255値を内部PWMにした後に電流値に変換して出力。 4.出力電流の最大値は、REXTピンに接続される抵抗値により決まる。I2Cから受けた0-255値は、0mAからここで決めた電流値までに対応する。 5.TLC59116Fは、PWMから電流変換をしないでそのままPWMとして出力されるもの。 なお、TLC59116では目的は達成されないという場合、 実現可能なLEDドライバーICまたは、ソリューションをお教え願えますでしょうか。 よろしくお願いします。

  • PICのPWMの使い方を教えてください

    PIC12F1822のPWMのテストをしていますが、正しい設定方法が判らず、以下の現象が出ています。 プログラム全体と、MPLIB のシミュレータによるLogic Analyzerの画像を添付しましたので、PICにお詳しい方のアドバイスをよろしくお願いいたします。 ◆ テスト内容: 周波数一定でデューティー比を変化させていく  今回の設定は、PR2=127 なので、パルス幅を0 ~ 最大パルス幅の 511 ((PR2+1)*4)で変化させる ●問題点1: デューティー比100%近く(508/512)でPWM出力が突然 50%に変わる。 ●問題点2: デューティー比100%以上(512/512以上)を設定するとPWMは100%('H'のまま)となる。 その後デューティ比を下げてもPWMの出力は'H'のままで、PWMの出力が出ない。 ● 問題点3: パルス幅の設定で、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる(出力が'H'のまま) ・・・ これはシミュレータのバグでしょうか? プログラム全体は、一番下にありますが、メインロジックは以下のように簡単なものです。 while (1) { for (i = 500; i <= 512; i = i + 1) { pulse_width = i ; CCPR1L = pulse_width >> 2; // パルス幅上位8bit CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; // パルス幅下位2bit         // ここで、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる __delay_ms(1); } } どうぞよろしくお願いいたします。                           K.A. --------------------------------------------- /* * File: 周波数一定、ディューティー比連続変化 * Author: K.A. * * Created on 2014/07/20 * */ #include <stdio.h> #include <stdlib.h> #include <xc.h> #pragma config FOSC=INTOSC, WDTE=OFF, PWRTE=ON, BOREN=ON, MCLRE=OFF #define _XTAL_FREQ 8000000 // クロック8MHz #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0))) int main(int argc, char** argv) { OSCCON = 0b01110010; // 内部クロックは8MHz ANSELA = 0b00000000; // すべてをデジタルI/Oに割当 TRISA = 0b00001000; // すべてのピンは出力に割当てる(RA3は入力専用) PORTA = 0b00000000; // 出力ピンの初期化(全て'0'にする) RA5 = 0; // 動作確認用LED /* PWM */ TRISA2 = 1; // RA2 出力をサスペンド TMR2IF = 0; // TMR2 フラグをクリア CCP1SEL = 0b0; // CCP1/P1Aの機能をRA2に割り当てる CCP1CON = 0x0C; // PWM モード // Period を 設定する xx ms=((PR2)+1)*4*125ns(8MHz)* PreScaler(x1-x64) PR2 = 127; // 0.064ms (プリスケーラが x1 の場合) T2CKPS0 = 0b0; // プリスケーラ 00:x1, 01:x4, 10:x16, 11:x64 T2CKPS1 = 0b0; // CCPR1L = 0; // パルス幅上位8bit CCP1CON = ((0 & 0x0003) << 4) | 0x0C; // パルス幅下位2bit TMR2ON = 1; // TMR2 カウント開始 while (TMR2IF == 0) { /** / do nothing /**/ } TRISA2 = 0; // RA2に出力を接続 unsigned int pulse_width; int i; while (1) { // パターン1 : デューティー比を変化させていく // 今回の設定は、PR2=127 なので、最大パルス幅は 511 ((PR2+1)*4) // 問題点1: デューティー比100%近く(508/512)でPWM出力が突然 50%に変わる。 // 問題点2: デューティー比100%以上(512/512以上)を設定するとPWMは100%('H'のまま)となる。 // その後デューティ比を下げてもPWMの出力は'H'のままで、PWMの出力が出ない。 // 問題点3: パルス幅の設定で、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる(出力が'H'のまま) for (i = 500; i <= 512; i = i + 1) { pulse_width = i ; // Pulse width を 設定する PW=(CCPR1L:CCP1CON<5:4>)*125ns(8MHz)*PreScaler(x1-x64) CCPR1L = pulse_width >> 2; CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; // CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる // printf("PR2= %d, PW= %d, CCPR1L= %x, DCIB= %x \n", PR2, pulse_width, CCPR1L, temp2) ; __delay_ms(1); if (RA5==1) RA5=0; else RA5=1 ; } } return (EXIT_SUCCESS); } ----------------------------------------

  • LED点滅

    赤色LEDを100コ程使ってLEDを点滅させようとしています。 PICでいくつかの点滅パターンを出して、LEDを点滅させるつもりです。しかしPICから出てくる信号(5V・30mAくらいですよね?)を、100コのLED分の電圧・電流をどのようにすれば増幅できるのか分かりません。(トランジスタで大電流にして並列をたくさん・・・・?)電源は12V、LEDの配列は直列に10個つないだユニットを10セット並列につなぐものを考えていますが、それは、変更してもかまいません。 どのようにすればよいのでしょうか?

  • PICマイコンのLED制御

    PICマイコンのLED制御 pic12Fを使って、LEDのPWM制御を行おうと考えていますが、うまくいかないので知恵をおかしください。 それぞれの出力端子に3色のLEDをつけて、順にだんだん明るくなってから、だんだん消灯してゆくプログラムを考えましたが、 最初のLEDが消える前に、2番目のLEDをゆっくり点灯させたいと思っていますが、うまくいきません 少しだけ同時点灯するには、どのような考えをすればいいのでしょうか。だんだん消えていく中で、点灯を始める処理がわかりません。よろしくお願いします。