先にも書いた通り1から74HC595を使った実験です

(2/23追記) プログラムっぽいの書くとどうも勝手に校正されてしまう不具合
         色々消えてしまってておかしくなってるので思い出しながら書き直しました

今回まずは2つを独立させて目視比較で色々実験です
接続に問題さえ無ければスケッチの問題のみなので回路無し
ただ単に同じ回路を2つ用意しただけ
ビットデータ読み出しは基本的にLSBFIRST(最下位から上位への順)で74HC595に入力してます

実験はArduino日本語リファレンスにもちゃんと説明の無い部分です
日本語リファレンスと違う結果が出ている場合もあります
74HC595を繋げなくてもこの実験は出来ますのでまずは自分で試してみてください

疑問1 変数の代入について
     A=0b11111111とした時
     B= A>>4;  4ビット右にシフトしてみる
     その後Aの値はどうなっているか確認
結果  A=0b11111111のままで変化しない
     Aの値を変更してBに代入される訳ではなく 代入されている値を使っているだけ

疑問2 int型は2バイト扱えるが、1バイトのbyte系に入れた場合、どの部分が拾われるのか
     int A=0b0000000011111111   上位と下位の値を別にする
     byte B=A   2バイト型を1バイト型に代入
結果  B=0b11111111
     下位8ビットが採用される

疑問3 疑問2の結果後、上位8ビットは残っているのか?
     int A=0b1111111111111111  分かりやすくする為全て1にする
     byte B=A        2バイト型を1バイト型に代入
     B>>4  右に4ビットシフトさせる(上位1バイトが残っていれば左4ビットは上位の1が出るはず)
結果 B=0b00001111になった 8ビット化させた段階で上位8ビットは捨てられる

疑問4 int形式(2バイトデータ)に8ビット入れた場合の上位1バイトはどうなっているか
     int A= 0b01000000;  Aに1バイトだけ代入
     int B = A >> 4; Aを右に4ビットシフトさせてBに入れる
     上位4ビットは記入していないデータが出てくる → B = 0bxxxx0100 (xが記載しなかった部分)
結果 xは全て0だった すなわち、記載しなかった部分は「0」になている
    但し、日本語リファレンスでは「1」が出てくるような事が書かれていた
    右シフト時に「0」を出したい場合は int B = (unsigned int)A>>4; の形式にしろと書かれています

疑問5 試しに疑問4用のBをMSBFIRST(上位ビットから読む)にして出力
     shiftOut(dataPinB, clockPinB, MSBFIRST, B);  今まではLSBFIRSTで出力していた
結果 出力は当然反転する0010xxxxになる:(表記の問題で本来はLSBFIRSTが逆表示です)がやはり「0」が出てきます

まだ他にも疑問点を挙げようと思ったのですが、寝て起きたら結構忘れてて思い出せませんww
思い出したら載せたいと思っていますが、次回は本命の74HC595直列接続実験を載せたいと思っています

シフトレジスタの件

Posted: 2012年2月23日 カテゴリー: 未分類

どうもこのシフトレジスタの使い方間違えてるみたいです
8ビットだと下記でもちゃんと動く事は動くんですが
16ビット以上の直列接続にすると上手く動かないです

きちんとした使い方をもう一度1から学び直したいと思います

(2/23追記):どうも使い方がおかしいみたいなので基本からやりなおしてます
    74HC595シフトレジスタ 初心に戻って実験(1)

前回の続きです

前回はただ単に右から左へ縦線をスクロールするだけでした
今回は点が上から下へ右から左へとすだれしていくスケッチと
任意データをダイナミック表示させるスケッチの2つ掲載します

新たな回路を組んだわけではなく、ただの実験結果なので
シフトレジスタって便利だねぇ~程度で

すだれ (静止画なので動きわかりませんがw)

-----------------------------------
int latchPinA = 2; //アノード側RCKをDpin2にセット
int latchPinK = 8; //カソード側RCKをDpin8にセット

int clockPinA = 4;  //アノード側SCKをDpin4にセット
int clockPinK = 10; //カソード側SCKをDpin10にセット

int dataPinA = 3; //アノード側SIをDpin3にセット
int dataPinK = 9; //カソード側SIをDpin9にセット

byte A_data = 0b00000001;
byte K_data = 0b10000000;

void setup(){                 //ピンモードを全てOUTPUTにセット
pinMode(latchPinA, OUTPUT);
pinMode(latchPinK, OUTPUT);
pinMode(clockPinA, OUTPUT);
pinMode(clockPinK, OUTPUT);
pinMode(dataPinA, OUTPUT);
pinMode(dataPinK, OUTPUT);

}

void loop(){                 //LEDをダイナミック点灯制御

//ラッチをOFF
digitalWrite(latchPinA, LOW);
digitalWrite(latchPinK, LOW);

//表示データ
shiftOut(dataPinA, clockPinA, LSBFIRST, A_data);
shiftOut(dataPinK, clockPinK, LSBFIRST, K_data);

//ラッチをON
digitalWrite(latchPinA, HIGH);
digitalWrite(latchPinK, HIGH);

//シフトレジスタ制御
if(K_data == 0b00000001){
if(A_data == 0b10000000){
A_data = 0b00000001;}
else{ A_data = A_data<<1;}
K_data = 0b10000000;}
else{
K_data = K_data>>1;
}

delay(100);

}

-----------------------------------

任意データ表示
(表示順の番号が下から上なので逆表示になります 配列番号を逆に設定すると分かりやすくなる)

-----------------------------------
int latchPinA = 2; //アノード側RCKをDpin2にセット
int latchPinK = 8; //カソード側RCKをDpin8にセット

int clockPinA = 4;  //アノード側SCKをDpin4にセット
int clockPinK = 10; //カソード側SCKをDpin10にセット

int dataPinA = 3; //アノード側SIをDpin3にセット
int dataPinK = 9; //カソード側SIをDpin9にセット

int data[8];   //表示データ用配列変数の宣言

int i = 0;   //配列&カソード番号用

//出力用変数の定義と初期化
byte A_data = 0b00000001;

void setup(){

//ピンモードを全てOUTPUTにセット
pinMode(latchPinA, OUTPUT);
pinMode(latchPinK, OUTPUT);
pinMode(clockPinA, OUTPUT);
pinMode(clockPinK, OUTPUT);
pinMode(dataPinA, OUTPUT);
pinMode(dataPinK, OUTPUT);

//表示データ代入
data[0] = 0b00111100;
data[1] = 0b01000010;
data[2] = 0b10000001;
data[3] = 0b10100101;
data[4] = 0b10000001;
data[5] = 0b01000010;
data[6] = 0b00111100;
data[7] = 0b11000011;

}

void loop(){                 //LEDをダイナミック点灯制御

//ラッチをOFF
digitalWrite(latchPinA, LOW);
digitalWrite(latchPinK, LOW);

//表示データ
A_data = data[i];
shiftOut(dataPinA, clockPinA, LSBFIRST, A_data);
shiftOut(dataPinK, clockPinK, LSBFIRST, 1<<i);

//ラッチをON
digitalWrite(latchPinA, HIGH);
digitalWrite(latchPinK, HIGH);

//変数と表示行の初期化判定
if(i == 7){
i = 0;
}
else { i++; }

}

-----------------------------------

前回同様責任負えません 自己責任でお願いします

コピペしてますが勝手に修正されてしまうので使えるかどうかわかりません

(2/23追記):どうも使い方がおかしいみたいなので基本からやりなおしてます
    74HC595シフトレジスタ 初心に戻って実験(1)

秋月電子で買った8x8LEDマトリクスを使ってみました
今回組んだ回路はシフトレジスタ勉強用なので、本来はこんなややこしい回路は必要ありません
LEDのアノード側に制限抵抗を各々入れてあとはArduinoに直接繋げればOKです

なぜこんなややこしい回路を組んだかと言うと
・Arduino側に繋げるピン数を極力減らしたかった
・後に8x8LEDマトリクスを4つ繋げて表示させたい
・せっかく作ったユニットを使ってやりたい
と言う理由があったからです

今回使ったパーツ
 8x8LEDマトリクス OSL641501-ARA  1個    秋月:200円/個
 制限抵抗  1/4 220Ω  8個   8円ぐらい?(100本100~250円)
 8回路NPNダーリントントランジスタアレイ 東芝 TD62083AP 1個  秋月:50円(2個セットで100円)
 8bitラッチ機能付きシフトレジスタ 74HC595AP(DIP)  2個  マルツ:136円/個
 ミニブレッドボード白  250円
 ピンフレーム(8ピン)  2個  1個30円ぐらい
 ピンヘッダ 40ピンを分割使用  40円ぐらい
 片面ユニバーサル基板 72x48mm  2枚 秋月:60円/枚
 UEW(ポリウレタン皮覆銅線)などケーブル類を各種

シフトレジスタとトランジスタアレイの説明は長くなるのでまた今度って事で
専門用語の説明もまた今度きがむいたらって事で
とりあえずまぁ動作したよーって画像をどうぞw

画像で見ただけじゃ分かりにくいですが、一応右から左へ縦線が流れてます
もちろん一番左の次は一番右に戻ってまた左へシフトしていきます

写真左から
 8x8LEDMATRIX&トランジスタアレイ(MATRIXの下に制限抵抗8個半田付け)
 74HC595シフトレジスタ2個(上アノード用/下カソード用 並列)
 配線整理用ブレッドボード
 Arduino Uno
の順に並べています

一応Arduino側は3+3+2(VCCとGND)の8本のみ接続になっています
74HC595は直列接続出来るので繋げて16ビット一気に出力させれば3+2の5本で済むんじゃね?とか考えてみたんですが・・・どうなんだろ?
Arduino側に繋げた配線のSER(SI)を省いて各々の74HC595に分配とか方法は有りそう
出来たとしても制御プログラムがより複雑になる予感ww
この辺は要実験だね! 失敗してもいいじゃない まずはやってみよう! って事で

以下回路図とArduino IDE用スケッチ

注)上記回路図のArduino側のピン番号は見やすくする為に適当なピンに接続しています
   実際はArduini miniではなくArduino Unoを使用し
   アノード側を(2,3,4)カソード側を(8,9,10)に繋げています
   

-----------------------------------
int latchPinA = 2; //アノード側RCKをDpin2にセット
int latchPinK = 8; //カソード側RCKをDpin8にセット

int clockPinA = 4; //アノード側SCKをDpin4にセット
int clockPinK = 10; //カソード側SCKをDpin10にセット

int dataPinA = 3; //アノード側SIをDpin3にセット
int dataPinK = 9; //カソード側SIをDpin9にセット

void setup(){ //ピンモードを全てOUTPUTにセット
pinMode(latchPinA, OUTPUT);
pinMode(latchPinK, OUTPUT);
pinMode(clockPinA, OUTPUT);
pinMode(clockPinK, OUTPUT);
pinMode(dataPinA, OUTPUT);
pinMode(dataPinK, OUTPUT);
}

void loop(){ //LEDをダイナミック点灯制御
for ( int j = 0; j < 8; j++){
//ラッチをOFF
digitalWrite(latchPinA, LOW);
digitalWrite(latchPinK, LOW);

//表示データ
shiftOut(dataPinA, clockPinA, LSBFIRST, 1<<j);
shiftOut(dataPinK, clockPinK, LSBFIRST, 0b11111111);

//ラッチをON
digitalWrite(latchPinA, HIGH);
digitalWrite(latchPinK, HIGH);
delay(500);
}
}
-----------------------------------
最後の行のdelayを1にするか消せば全点灯状態に出来ます
 ※ダイナミック表示だから点灯じゃない!って突っ込みはナシでヨロw

上記を使って何か不都合が起こっても当方は一切関知しません
自己責任でよろしくお願いします

Windows8CP版公開日決定

Posted: 2012年2月12日 カテゴリー: 未分類

Windows8のコンシューマープレビュー版が2月29日にプレス向けイベントと同時に公開される事が決まりました

一応うちのパソコンはネトゲがそれなりに出来て格安で組める仕様なので実験してみたいと思います
ようはうちのパソコンで快適動作するなら10万円クラスのノートPCでも動くって事です

ちなみにうちのPCの仕様
CPU AMD AthlonII X2 250 3.0GHz DualCore
MEM 2.0GB DDR2-6400
HDD 500GB SATA2 7200rpm 8MBバッファ ×2台
M/B GIGABYTE製 GA-MA785GM-US2H
VGA RADEON HD4670 GDDR3 1GB PCI-Ex16

今じゃ5万もあればこれよりいいのが組めちゃうなぁ

電子工作:作った物

Posted: 2012年2月2日 カテゴリー: AVR, 電子工作, 趣味


手前 共立エレショップで買ったVFD管表示キット
    8回路トランジスタアレイ2個と抵抗付き
    ぶっちゃけ半田付けしただけww
左 自作8×8LEDマトリクスユニット
   UBW(エナメル線の一種)で繋げてるので裏がグチャグチャ
中 自作3-8ビットデコード接続キット
   こないだからこいつがうまいこと動いてくれなくなった
右 自作8ビットシフトレジスタ×2個接続キット
   真ん中のシャンパーピンをショートすれば2個直列接続で16ビット化出来ます
   上にオーバーフロー出力端子も付けました


Arduino Unoと繋げて遊んでみた

今は秋月電子の200円8×8LEDマトリクスを4つ並べてArduino Unoで制御出来る物を製作中

何故かフォワード3ギリギリ前に新しい貫通ライトボウガン装備作っちゃいました
今回はちょっとマゾくてイベ限定物も使ってるので敷居が高いです
F3からの新装備で組んだ方がいいと思います

2種類作りましたが頭/腰/足は固定で武器スロ1です
よってスロ無しやSP武器では使えません
更に超絶のピアスⅩ使用の為HR999以上限定になります

腹減り無し火事場飢狼超耳装備 (HR999:FX3箇所:イベG珠)

武器スロット1           Lv1      ●  眠瓶珠G
超絶のピアスⅩ          Lv7  127  ●●● 満腹珠, 剛力珠, 剛力珠
クラージFXレジスト    (FX)  Lv7  127  ●●● 剛力珠, 剛力珠, 剛力珠
アークFガード           Lv7  101  ●●● 剛力珠, 剛力珠, 剛力珠
ストレガFXコート     (FX)  Lv7  109   ●●● 針穴珠, 剛力珠, 剛力珠
エクエスFXレギンス   (FX)  Lv7  109  ●●● 反動珠G, 反動珠G, 針穴珠G
服Sスロット2                    ◆◆  腹へりカフSC1, 腹へりカフSC1

防御値:573 スロット: 火:6 水:6 雷:7 氷:4 龍:4
超高級耳栓,攻撃力UP【大】,見切り+3,狙い撃ち,餓狼+2
火事場力+2,反動軽減+2,装填速度+1,装填数UP,貫通弾・貫通矢威力UP

※カフを入れないとはら減り【小】が発動してしまい飢狼2が11番目に追い出されてしまいます
 飢狼使わない場合でも無駄にスタミナ上限が早く減ってしまいます
腕をロークF(スロ2)にして珠詰め替えれば下に載せる装備と同じスキルに出来ます
 が! 都度珠の詰め直ししないといけなくなるので実用的ではないです

装填速度なし火事場飢狼はら減り【大】 (HR999:FX2箇所:イベG珠)

武器スロット1           Lv1      ●  眠瓶珠G
超絶のピアスⅩ          Lv7  127  ●●● 剛力珠, 剛力珠, 剛力珠
アナキスーツ           Lv7   75  ●● 剛力珠, 剛力珠
蒼天ノ袖・魁        (イ)  Lv7   86  ●●● 剛力珠, 剛力珠, 剛力珠
ストレガFXコート     (FX)  Lv7  109   ●●● 弾穴珠, 針穴珠, 針穴珠
エクエスFXレギンス   (FX)  Lv7  109  ●●● 針穴珠, 針穴珠, 針穴珠G
プーギー服なし

防御値:506 スロット: 火:6 水:6 雷:6 氷:4 龍:7
超高級耳栓,攻撃力UP【大】,見切り+3,狙い撃ち,餓狼+2
反動軽減+2,火事場力+2,貫通弾・貫通矢威力UP,装填数UP,はらへり倍加【大】

※ 先の装備のコメで書いた問題点を解決する為に作った装備
 珠の詰め方を工夫すれば装備セットで1発着替えできます(カフは都度外してね)
 基本的にハメor高台専用 麻痺剣担当が居れば普通の狩りでも使いやすいと思います
 雪山や沼地下等の寒いエリアメインなら先の装備でも問題ありません

超絶のピアスⅩとFX複数の組み合わせだとスキル満載に出来るのですが
10スキル以上付いてしまう為逆に使い辛いです

スキルには優先順位と言うのがありまして
後から出来たスキルの方がどうしても優先順位が低くなります
これ正直どうにか改善してほしいのですが

 運営「技術的に無理ですの。」(本当なのか建前なのか真偽不明)

今回の場合はこの中で一番新しい【飢狼】スキルが11番目以降に追い出されてしまいます
なのでシミュる際も10スキル以下から選ぶしか有りませんでした(11や12はアホほどヒットする)

いつもいつも大型アップデート前に新装備作るのは
素材の引きがめちゃくちゃ弱いので素材揃えるのに凄い時間が掛かってしまう為です
未だにフルグルさえ作れていません
剛ルコ登場時から素材集め開始してるのに・・・orz