迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

LED CUBEのプログラム

LED CUBEは立体なので先ずは三次元座標を指定してLEDを点灯させるルーチンを書きました。
ユーザーモジュールLED7SEGを使っているので必要なセグメント番号とパターンを求めて or してます。
同様にして
LedOff とか 
LedReverse とか書いてます。


void LedOn(BYTE x,BYTE y,BYTE z) //x,y,zで指定されたLEDを点灯させる。
{
    BYTE digit,pattern;
    // x,y z 0...3
    // digit 1...8
    // pattern 0b10000000 0b01000000
    //           0b00100000 0b00010000
    //         0b00001000 0b00000100
    //         0b00000010 0b00000001
    digit = z*2+y/2+1;
    pattern = (LED7SEG_GetPattern(digit)) | (1 << ((y %2)*4 + x)) ;
    LED7SEG_PutPattern(pattern,digit);
}
スポンサーサイト

PSoC・初めての乱数

LED Cubeで面白い動きをさせるのに乱数は欠かせないのだが、まだ使ったことがないので先ずは調べ物をしておく。

C Language Compiler User Guide.pdfから引用すると

int rand(void);
Generates a pseudorandom number. The rand function returns a pseudorandom integer in the range 0 to RAND_MAX.
Returns a pseudorandom number.



0からRAND_MAXまでの疑似乱数を発生する。
RAND_MAXはというとstdlib.hに
#define RAND_MAX INT_MAX
と定義されており、INT_MAXはlimits.hに
#define INT_MAX 32767
と定義されている。だから0~32767までの疑似乱数rand()をコールする事により得られる。

次にsrand()だけど

srand
void srand(unsigned);
Sets a random starting point. The srand function sets the starting point for generating a series of pseudorandom integers.
To reinitialize the generator, use 1 as the seed argument. Any other value for seed sets the generator to a random starting point.
rand retrieves the pseudorandom numbers that are generated.
Calling rand before any call to srand generates the same sequence as calling srand with seed passed as 1.



とある、プログラムの最初で
srand(1)
とでもしておけばいいということか。
ただ電源投入の度に毎回同じ乱数が発生するのはちと面白くない。
何か手がないか検討中です。

一部のパターンに乱数を使ってます。

PSoCでLED CUBE 4x4x4・その2

http://jp.cypress.com/index.cfm?rID=3063"" target="_blank" title="ユーザーモジュールLED7SEG">ユーザーモジュールLED7SEGのAPIは
void LED7SEG_PutPattern(BYTE bPattern, BYTE bDigit)
void LED7SEG_PutHex(BYTE bValue, BYTE bDigit)
等のように書き込むだけで、表示パターンを読み出す方法がない。

BYTE LED7SEG_GetPattern(BYTE bDigit)
が欲しいのだ。

LED7SEG.hを開いてみると
//-------------------------------------------------
// Constants for LED7SEG API's.
//-------------------------------------------------
//
//
extern BYTE LED7SEG_DigitRAM[];
extern BYTE LED7SEG_ScanStatus;
//
とある、LED7SEG_DigitRAM[]を読み出せばいいのだろうと考え、

#define LED7SEG_GetPattern(i) LED7SEG_DigitRAM[i-1]

としたところうまくいった。
[i-1]なのはbDigitの値は1~8だが、LED7SEG_DigitRAM[]の引数は0~7だからである。

続きを読む »

PSoCでLED CUBE 4x4x4・その1

電子花火で使ったLEDは秋月から購入した、100個入りで400円也。
36個使ったから残りは64個、これで8x8のLED Matrixを作るつもりだった。
制御はPSoCで行う、PSoCのユーザーモジュールにLED7SEGというのがある、データシートはこちら
7セグメントのLEDを最大8個並べて表示できる。ダイナミック点灯する必要があるが、タイミングはPSoCが面倒を見てくれるので、ユーザーはデータを書き込むだけでいい。
このユーザーモジュールのAPIにLED7SEG_PutPatternというのがある。
データシートから引用する。

Description:
Writes a byte pattern directly to the display memory. A high bit corresponds to an active segment no
matter if the display is common anode or cathode. The LSB is segment ‘a’ and the MSB is the “dp",
decimal point.


これはdp(小数点)まで含めた8セグメントに任意のパターンを表示できるというものだ。
LSBはセグメント a でMSBは dp(小数点)となっている。

7segLED.png
上図のように7セグメントLEDのかわりにLEDを8個並べてやれば任意のパターンを表示できる。それを8桁分用意すれば8x8ドットのLED Matrixが出来る。なお図ではdpをhとしてある。


ところが64=4x4x4であることに気付いた。
LED CUBEが作れるというわけで早速設計変更、LEDの制御は同じくユーザーモジュールLED7SEGで行うことにした。


LEDcube4_4.png
4x4のLEDを4階建てにする必要がある。
上図は1階のLED配置、ユーザーモジュールLED7SEGを使う関係でこうなる。残りの階も同じように配置し積み上げていく。

続きを読む »

PSoCでLED CUBE 4x4x4

とりあえず動画だけアップ。




PSoCで電子花火



電子花火

電子花火です。
花火が地上から空へ上がっていくのを現すLEDは6個。
放射状に広がる部分は6個で一組としたLEDを同心円状に五組配置しました。
回路図では放射状の部分が3個一組になってますが、設計段階であれやこれやと考えていた名残です。
右と左で別パターン出せれば面白いかと思ったのですが、面倒になってやめました(汗

PSoCで制御していますが、用意したパターンを読み出して表示してるだけですので他のマイコンでもOKです。
パターンを考えるほうが大変です。
制御に必要なポート数は11個でLEDが多い割には簡単です。

 | HOME | 

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

ブリッジドT発振回路(3)光るランプ Oct 16, 2017
ダイソーのかぼちゃで電飾 Oct 08, 2017
ブリッジドT発振回路(2)オペアンプとっかえひっかえ Oct 07, 2017
ブリッジドT発振回路(1) Oct 02, 2017
AD587を使った基準電源【追加有り】 Oct 01, 2017
DABPを使った発振回路(5)ランプの特性、分圧抵抗を変更、コンデンサを変更。 Sep 24, 2017
DABPを使った発振回路(4)ランプ変更(修正版) Sep 18, 2017
DABPを使った発振回路(3)LEDからランプ制御へ Sep 09, 2017
DABPを使った発振回路(2) Sep 03, 2017
DABPを使った発振回路 Aug 27, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

このブログをリンクに追加する

月別アーカイブ

10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (420)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (32)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん