上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
続きです。とりあえずビット制御はできそうなので、ソフトを書き始めました。
しかし、ちょっと計算したらCPUが16MIPSとあるので1命令62.5ns、LED制御周期が1.25usですので、1.25us/62.5ns=20。つまりパルス幅制御1周期に20命令しか使えません。
これはC言語では無理ではなかろうか?とおもいつつ、オシロでタイミングをみながらNOP命令で調整して書いてみたコードが以下の通りです。

for (i=0;i if (BitScreen[i] ==0) {
PORTA = 0xffff;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
PORTA = 0x0000;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
}else{
PORTA = 0xffff;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
PORTA = 0x0000;
}
}


メモリがもったいないですが、BitScreenは1WORD1ビットにしています。つまり1LEDあたりRGB24ビットをすべて1WORDの配列にしています。これはビットシフトしている暇はないだろうと考えてのことです。
  

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


オシロで見ている限りではこれで何とか、一応LEDのタイミング仕様0,1を満たしている。。。と思います。
とりあえずのソースはこちらです(led_main.c)
※これだけでは動きません。前の記事の写真にあるコンフィグ設定が別途必要です。

このソフトで7LEDを制御してみたところが下の写真です。
DSCF5088.jpg
だいたいできています。。。しかし、元の方のLED2個が思い通りになっていません。なんか制御間違ってますね。

送信に近い方がおかしいので、自分から先のLEDデータを間違ってとりこんでいるか、全部転送した後に間違って再度データ採っているかに見えます。前者だと間違って採り込んだらその先には送らないはずなので、後者説の方が有りそうかなあ?

  
とりあえず平日なので今日はここまでとします。
2014.10.08 Wed l 未分類 l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。