---PIC 流れるサインボード (1)---

 諸兄のHPを参考に、PICを使ってサインボードを作りました。
 何の使用目的もない、ただのおもちゃです。
 ただ、諸兄のHPで使ってる74HC154は製造中止でしたの
 で、これまた、諸兄のHPを参考に、74LS138二つで置き換
 えて作りました。
 三日ぐらいかかって、配線を終えて、どのような形で、流れる
 サインボードを実現するか考えました。
 参考になるC言語によるプログラムがみあたらなかったので、
 過去の7セグLEDを使った工作を思い出しながら、
 ダイナミック点灯を基本にプログラムを組むことにしました。

 

 8×8のLEDが4枚ですので、8×32列のLEDがならんでます。
 この黄色い□から黄色い□までのLEDに、タイマー割り込みを
 使って、このLEDとダブるように準備したメモリーの内容を
 書き出すことにしました。
 テレビで使われている走査線のイメージでしょうか。
 メモリーには、縦に8個並んでいるそれぞれのLEDの
 ON-OFFの情報を書き込みます。
 右にスクロールさせるには、メモリーの左側の山吹色の部分
 に表示させる文字のデーターを書き込みます。
 左にスクロールさせるには、メモリーの右側の青色の部分に
 表示させる文字のデーターを書き込みます。
 「A」の表示をさせるには、

 

 16進数7個をメモリーに書き込みます。
 左側に書いてある数字が、上から左端の縦の列の情報に
 対応します。
 これをスクロールさせるには、メモリーに書いてある情報を
 それぞれ、一つ右側のメモリに移動する、ということで、実現
 します。

 

 多分、このほかにもスクロールの方法があるのでしょうが、
 自己流で、作製しました。
 実際に動かして見ると、すーっと流れるような表示には、
 なっていません。
 なめらかにするには、もう少し、工夫が必要なんでしょうね。

 

 アルファベットのA~Zまでの大文字のデーターを入れると、
 それだけで、ほぼメモリーが満杯です。
 倍のメモリーのある16F1939に変更してみようと思います。
 USARTを使って、PCのデータをスクロールさせるのが目標
 です。

“---PIC 流れるサインボード (1)---” への17件の返信

  1. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    unsigned long ptn=0b100010001001010101011011101110;
    (ptn>>ROTE)&1
    移り変わり30コマ
    ダブっているものは30/60(ROTE)
    あまりダブっていないものは30/240です。
    結局のところ、私の価値観では「やるだけ無駄」です。
    なにもしないでスクロールが好きです。
    勿論、人によっては良いと思うかもしれませんけど。
    ROTA(TION)でしょ!なんて突っ込みは受け付けません。
    回数はどれが良いか判らないぐらいやりました。
    https://www.amazon.co.jp/clouddrive/share/iuI73Pc79ULqKzHSQ9TRU5fLcohox5bqWRdXUMi9vgl?ref_=cd_ph_share_link_copy

  2. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    > - 2回目:’値(RBP+L-1),値(RBP+L),値(RBP+L+1)’のOR
    ですよね。3つのORをドットで塗りつぶしてみてください。(1部バックします)
    また、一回では全くダメです。火花が散ったような感じでした。きっとMABOさんのは32のダイナミックなので更にそうなるかと。。。
    また、数回くりかえすと塗りつぶしです。
    > 1/2を1/3や1/4にしないと駄目なのでしょうか?
    時間と明るさ共に管理しないと駄目だと思います。
    > 「縦のトランジスタの制限抵抗が強い」というのは 具体的にどのような事でしょうか?
    縦列ならんだもの(Bの左側の棒)などを見れば特にLEDが悪くないのは明らかです。
    要因は出力不足(左のIC)かトランジスタのどちらかでしょうけど、1,2,3この場合も差があります。
    なので縦のトランジスタがボトルネックになっていると考えました。
    だけども、もしかしたら、「高速」が原因かもしれませんね。
    「縦のトランジスタの制限抵抗が強い」はそのままの意味ですよ。上部についている抵抗値が高すぎるのを付けたので蛇口がちゃんと
    開いていないのかな?と思ったのです。

  3. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    maboさん、こんばんは。
    >- 2回目:’値(RBP+L-1),値(RBP+L),値(RBP+L+1)’のORでLEDをon/offする
    LEDをonにする位置に印を付けた透明な紙を、左右に1ドットずらしたものを重ねた物をイメージしてください。これで onの印が2個以上重なった所は1回目と2回目共にonにし、ひとつだけonになった所は2回目の処理でonにする事を示したつもりです。ロジックが間違えているかも…。
    猛牛ロックさん、こんばんは。
    >3値のORは全くダメです。
    1点を 1ステップ前に1/2の明るさで(プリ的に)光らせ、本番(ジャストの)ステップで 1/2+1/2=1の通常の明るさで光らせ、次のステップで残像的にまた1/2で光らせるはダメですか。1/2を1/3や1/4にしないと駄目なのでしょうか? あるいは この方法が駄目という事でしょうか? どちらかお教えください。
    >縦列の数でばらつくプリント基板のLEDの左側に抵抗が8本並んでいるように見えたので、この抵抗のバラつきとLEDの電圧のバラつきと思ったのですが違いますかね?
    縦1列に8LED共通に電圧を掛けてあり 左側の抵抗経由で縦のn番目(n行目)をonにしていると考えていました。
    何れにしても、各LEDの制限抵抗は独立で 各LEDに20mA程度流すようになっているハズです。
    思ってます。、
    「縦のトランジスタの制限抵抗が強い」というのは 具体的にどのような事でしょうか?

  4. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    > 猛牛ロックさんの、行った実験0001001010110111111
    これは前進する際のパターンです1は次のLEDを光らせています。交互混ざっている所で両方光ります。段々と移行させる為に
    パターンを作りました。じっさいは…00000000001001011011111111111111…です。
    段々と0から1へする為に何パターンも試したのですが、解像度(周波数)が悪かったせいか、良い結果ではありませんでした。
    多分、処理がうまくいっても8*8(特に私のカナ文字入り)では文字崩れが多くて難しいです。
    ゆっくり移行→芯になる文字+うっすらじゃないと読みづらいかんじです。
    早く移行→面白味が無く、バグっぽいです。

  5. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    oldmanさん、やってみた結果は
    1.では駄目です。文字潰れです。文字の識別自体が困難になります。 3値のORは全くダメです。
     進行時に2値のORなら多少マシですが、やらない方が良いかな?というレベルです。 ひとによってはバグがあって光っているのか?と思われそうなかんじです。
    文字のゆがみの方が気になるかなぁ
     やはり、段階的に、特に暗いレベルで照度を調節できないと厳しいように思います。
    3.LEDのばらつきは意味が違いますよ。LEDも抵抗も問題ありません。縦列の数でばらつくと言っているのです。
     矢印の先と後ろとかMの所とです。判りませんか?

  6. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:43.0) Gecko/20100101 Firefox/43.0
    oldmanさん、猛牛ロックさん、こんばんは。
    oldmanさん、補足説明ありがとうございます。1回目の処理ま
    では、理解できました。2回目の処理ですが、ORをとるとあ
    りますが、(値(RBP+L-1)OR値(RBP+L))の値と、
    (値(RBP+L)OR値(RBP+L+1))の値を、それぞれ、
    (RBP+L)の前後に書き込むということでしょうか。
    猛牛ロックさんの、行った実験0001001010110111111
    の意味がちょっと分かりません。

  7. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    maboさん、猛牛ロックさん、こんにちは。
    猛牛ロックさん 実験ご苦労さまです。
    ダイナミック点灯の処理を2回に分けて、各回で明るさ50%の表示処理に変える必要があると思います。
    1.滑らかに見せるための改造案(判りにくい文でした失礼…これもか^^;)
    ・タイマー割込み時間間隔を”1/2″にし、各列のLED on/off処理を2回に分割
    [左からn番目の列(L=n)のLEDを光らせる場合]
    ・リングバッファの表示開始位置を RBPとして 各行の LED on/offは、
     - 1回目:’値(RBP+L)’ で LEDをon/offする
     - 2回目:’値(RBP+L-1),値(RBP+L),値(RBP+L+1)’のORでLEDをon/offする
    ・これまで32回繰返しで終わっていたダイナミック点灯処理が 64回になる
    2.トランジスタアレイの探し方
    以前 ICの出力ピンの話題で、トーテムポール出力という話があったかと思いますが、Highの時には負荷側に電流が流れ(ソース)、Lowの時にはIC側に電流が吸込まれる(シンク)という話があったかと思います。
    「ソース トランジスタアレイ」または「ソース ドライバ」でgoogle検索すると、何故か先頭に秋月のTD62783Aがヒットします^^;
    3.LEDの明るさのバラつき
    ・抵抗値のバラつき(金属皮膜で±1%、集合抵抗±2%)
    ・赤色マトリクスLEDのバラつき(順電圧:2.1Vtyp, 2.5Vmax)
    を考えると、せいぜい CRD E-183を16本購入し 8本選別位でしょうか。

  8. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    前進する時に0001001010110111111みたいなパターンを作って5,6種類トライしてみました。
    結果は(今の所)あまり芳しくないです。というのは
    1.ダブルになった時に書体が崩れていまう。(8*8じゃなくて16*16なら良いかもしれません)
    2.あまり暗くはならない。間隔をあけてもちらついたような感じで綺麗にはなりませんでした。
    3.2の原因ともなるのですが、これを行うには割り込み間隔が大きすぎるようです。間隔を数分の1にしてトライしてみようと思います。
     (現在は1ms間隔です。1/8程度にしてみて、試してみたいと思います)
     
    でも、考え方としては悪くないと思います。条件が整えば多少効果があるように思います。
    現在やったパターンでは000010010011111位で「こんなものかな???」というところでした。

  9. AGENT: Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko
    OLDMANさん。意味が解りました。
    つまり同時処理の期間を作る、と言う事ですよね?
    1つ進むときに一定時間交互に表示させて1/2の照度(時間)にする、と言う事ですね?

  10. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:43.0) Gecko/20100101 Firefox/43.0
    oldman さん、猛牛ロックさん、こんばんは。
    アドバイスありがとうございます。なにぶん、お二人の情報が
    沢山で、ちょととまどっています。
    oldman さん,省スペースのご提案ありがとうございます。当初、
    トランジスタアレイの使用を考えてましたが、PNPに相当する
    トランジスタアレイの型番が分からなくて、PNPのトランジスタ使いました。
    後日、遅まきながら、TD62783AFGを購入しました。
    猛牛ロックさん、oldman さん、ロジックのご提案もありがとうございます。
    一気には理解できないので、何度も読み返してみたいと思います。
    今回の制作は、何の使用目的もありません。サインボードの記事が目についてので、
    たしかめてみたくなりました。
    一番気になるのは、猛牛ロックさんがお書きになった、各ドットの明るさの違いです。
    このへんの原因は、ちょっと、私の能力では、ハードル高いです。
    諸兄のHPにあった回路をそのままつかいました。抵抗値も同じにしました。
    ただ、諸兄は、ラッチレジスタ?を入れる予定で、抵抗値を計算してたようです。
    まねした回路では、ラッチレジスタは使わなかったようですが。
    このへんも難しいですね。
    それから、メモりーですが、配列何も考えないでRAM領域に配置してました。
    猛牛ロックさんのアドバイスで、プログラム領域の配置に変更しました。

  11. AGENT: Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko
    > (タイマー割り込み間隔を2倍(割り込み時間を1/2)にして)
    間隔が2倍なら割り込み時間も2倍では?どちらかは回数ですよね?
    「T=t-1」なんですけど、このTとtは何を意味しているのですか?
    どちらにしても消灯時間を入れないと暗くならないような気がするのですが・・・
    > 各ブロック内で、LEDのonが連続すると明るさが増しているように見えますが…
    明るさのバラつきは縦方向の点灯しているLEDの数を数えればすぐに判りますよ。
    縦列に1個だとはっきりと明るいです。
    あと、先ほどの私のコメントでC言語的には「&」ではなく「|」ですね。日本語的には&ですけど。

  12. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    猛牛ロックさん、こんばんは。
    >各LEDを0.5→1.0→0.5の比率で光らせる…
    >2.非表示時間(ウェイト)をすこし挟み込めば…
    は(多分)同じ事を考えて別の表現をしていると思います。
    私は、ダイナミック点灯でのタイマー割り込み処理の間隔が固定という前提で、
    (タイマー割り込み間隔を2倍(割り込み時間を1/2)にして)
    各LEDを、T=t-1:1/2光らせる、T=t:1光らせる、T=t+1:1/2光らせるとしました。
    猛牛ロックさんは、各LEDの光らせる比率(消える時間を多少長くする)を変えると言っていると思います。
    >3、もう少し早くスクロールさせると…
    …残像効果を利用され様とのお考えでしょうが、気ぜわしくなりますよね^^;
    >ドットの明るさのバラつき…
    横方向(スクロール方向)に連続しているように見えます…
    各ブロック内で、LEDのonが連続すると明るさが増しているように見えますが…
    これは onの比率を下げての実験が必要なのかも…(maboさん、人ごとの意見ですみません)
    >あと、一点挙げるなら、多分32ビットのダイナミック…
    …ハイ、ハード物量とのトレードオフですから何に使いたいのかを明らかにしての判断でしょうね。

  13. AGENT: Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko
    oldmanさん、ご無沙汰しています(^^)/
    > ※インデックス値での表示処理時に、インデックス値-1の処理も並行して行うと、各LEDを0.5→1.0→0.5の比率で光らせる事が出来るので結果的に文字がスムーズに流れるように動くと思います
    このあたりがちょっと解りません。
    私が思うには照度を変えるためには非表示の時間(ウェイト)をすこし挟み込めばなると思います。実際には1.次と&をとったもので2.非表示時間を挟み込み、3、もう少し早くスクロールさせると、効果が出るのかも知れないと思います。
    けれど、根本の問題は文字/ドットですよね。おおよそ、業務用など、一般的には16ドットで作っていますからこれはこれで普通の表示になっていると思います。
    それよりも気にかかるのがドットの明るさのバラつきです。縦で1つや2つだと明るく多数だと暗くなっています。
    多分縦のトランジスタの制限抵抗が強いのだと考えていますけど、そちらをもっと流すようにして、制限は横方向の抵抗に絞った方が明るさが均一になると思います。
    あと、一点挙げるなら、多分32ビットのダイナミックになっていますよね。
    それを16ビット、もしくは8ビットにすれば明るくなると思います。(32ビットなら同時1点灯、8ビットなら同時4点灯ですから)
    配線やプログラム的には難しくはなりますけど、この辺りを改良してから?照度を下げる方が良いかと思います。

  14. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    スクロールさせるのは、左空白8列+表示文字域32列+右空白8列の合計48列を両端で繫いだ輪を回転させて、その中の32列分をLEDマトリックスに送る(ダイナミック点灯させる)という処理ですよね?
    だとしたら、以下のロジック/処理では如何でしょうか?
    【メインルーチン】
    1) 48バイトのリングバッファを作り、表示先頭のインデックスを初期化
    2) 指定された文字列をリングバッファの中央にセットする(サブルーチンコール)
    3) 指定された大文字コードから0x40を引いてインデックスを作る(A:0x41~Z:0x5a)
    4) 定数アレイ( 8バイト×26列 )のインデックスの位置をリングバッファにセット
    5) 指定された文字列の数だけ 3~4を繰り返す
    【タイマー割り込み処理】
    リングバッファのインデックスで指定された部分のon/off情報で LEDを表示
     - bit0~bit7までの繰り返し
     - 列0~列32までの繰り返し
     - インデックスのインクリメント
    ※インデックス値での表示処理時に、インデックス値-1の処理も並行して行うと、各LEDを0.5→1.0→0.5の比率で光らせる事が出来るので結果的に文字がスムーズに流れるように動くと思います(明るさが表示時間に比例するかどうかは要実験)。
    ※ワードバウンダリーでは無いので リングバッファのオーバーフロー処理は多少面倒かも
     ( 左右空白の計16列分のメモリは考えやすくするだけのもので実メモリにはアサインする必要がありませんし )

  15. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    maboさん、こんにちは。
    またまた物量削減の提案ですが…^^;
    「トランジスタアレイ TD62783APG」をつかうと省スペースになりますよ。
    ( http://akizukidenshi.com/catalog/g/gI-05487/ )
    また、千石電商などでの購入になりますが、8素子9ピンの集合抵抗も良いですよ。
    http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-05UK
    また、電流制限用の抵抗は +5Vとトランジスタの間に入れていますよね?
    ところで、16F1939メモリが半分って RAMメモリ不足という事ですか?
    Product   Flash(Kb) RAM (B)
    PIC16F1939  28    1,024
    PIC16F1937  14     512
    PIC16F1936  14     512
    各8バイト/パターンなので アルファベット大文字分は208バイトですよね?

  16. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:43.0) Gecko/20100101 Firefox/43.0
    oldmanさん、こんばんは。
    沢山の情報ありがとうございました。○ルツで検索したら、
    DIP版の写真がなかったので、あきらめました。
    よくみたら、CD74HC154Eは、DIP版なんですね。
    写真がないと不安になります。
    変換基板を使うのも手ですね。でも、変換基板での作業、
    ちょっと、ハードル高いかなあ。
    一度失敗してますので・・・・・・(笑)。
    でも、DIP版、買わなかったので、その分、違う勉強になり
    ました。

  17. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
    maboさん、こんにちは。
    DIP版の製造中止が増えてますね。しかし 74HC154(DIP)はまだ買えます。
    昨年 aitendoで見かけました。http://www.aitendo.com/product/2824
    マルツでも(多少安価に \200→\180)購入可能ですね。
    http://www.marutsu.co.jp/GoodsListNavi.jsp?path=%E5%8D%8A%E5%B0%8E%E4%BD%93%3A%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E5%8D%8A%E5%B0%8E%E4%BD%93&q=74hc154&searchbox=1
    念の為調べたところ、マルツでは製造中止品に分類されていますが、
    CD74HC154M(24 Ld SOIC) \50 はTIサイトで「供給中」となってます。
    Mouser, Digi-Key, RS にもありましたので、SOICを使うのも手ですね。
    ・ 変換基板(SOIC24) http://www.aitendo.com/product/4045
    ・細ピンヘッダ http://www.aitendo.com/product/7327
    ハンダと鏝先の細いものを準備すれば そう難しくないと思います。
    私は、レベル変換(5V→3.3V)にTC74VHC9541Pを見つける前に、
    ・ピッチ変換(0.65/2枚入) http://www.aitendo.com/product/1510
    ・ピンヘッダ(1.27/SMD)http://www.aitendo.com/product/6880
    ・ピンヘッダ(1.27/50Px1)http://www.aitendo.com/product/11166
    を苦労(0.65mmピッチ)して作り、TC74VHC9541FTを使う工夫をしました。
    ( 完成品\1,450はあるけど^^; http://www.marutsu.co.jp/pc/i/15449/ )
    CD74HC154Mは1.27mmピッチなので楽勝です…多分:-p

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA