「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



FM音源生成の処理を相変わらず考えています。
というか、プログラム書きながら次々発生する
問題に打ちのめされています。(TへT)

計算式の中に出てくる割り算。定数による
割り算なので、逆数の掛け算に変換しちゃえばok
だと思うのですが、桁が結構でかくなるのが
こまったところ。

MEGAシリーズならハードウェア乗算命令は
使えるのですが、8ビット×8ビットで収まら
ないし…。
それに2の補数表示の掛け算って結構厄介なんだ
よなぁ…。

2進数2の補数の桁数多い算術計算、もう一度
お勉強しないと先に進むのは危険だな…。
アセンブラって、ロジックを組むだけならそんなに
苦じゃないんだけど、こういう算術計算は
きびしいな。

だからと言って安易に算術マクロとか使うと
処理クロック数がムダに膨らんじゃうし。

なかなかむずかしいねぇ…



(追記)
2の補数の乗算は↓
http://ja.wikipedia.org/wiki/%E4%B9%97%E7%AE%97%E5%99%A8

これで何とかなると思うんだけど、問題は
8×8ビットを超える桁数の計算だな。

せっかくのハードウェア乗算機能が使えないと
意味がないので。

16×16=32ビットの計算が出来れば
完璧なんだけど。

データシートにあれこれ書いてあった気もするなぁ…



コメント ( 0 )




漫画居士さんから目からウロコのナイスアイデアを
頂いたので、しばし考えてみました。

漫画居士さんのアイデアというのは先日の
http://brown.ap.teacup.com/nekosan0/285.html
Chanさんの赤外線リモコンライブラリに
関することです。

信号のオン/オフを出力するピンと、38Khzで
変調するための出力ピンを、当初外付けのAND回路
で論理和取り変調してからLEDに繋ぐ必要がある
だろうなぁと思っていたんですが…


で、漫画居士さんのアイデアは外付け部品無しでも
いけるんじゃないか?というご指摘。

ピンの状態をHIGH/LOW以外の状態、HIGH-Z
状態を上手く使えばいけるんじゃないか?
ということです。(理解が間違えていたらゴメンナサイ)

例によって山根さんの本、P110のマルチファンクション
ピン切替の解説図(内部の等価回路)を眺めてみたんですが、
入力に設定したピンのプルアップを制御する情報の流れは、
timer回路からの出力は届いていないため
(portDレジスタの出力だけが届いていました)、
AVRではこの方法は出来なさそうだということは
判りました。
(他のマイコンの場合は別途調べないと判りません)


一方、漫画居士さんのアイデアの秀逸なのは、外付け部品
無くてもいいんじゃない?というアイデア。

風呂に浸かりながらこのことを上手く使えないものかなぁ
って考えていたところ、良い事思いつきました!

こういう接続方法なら、AVRでも電流制限抵抗1個
だけで上手く行くはず!

(1)出力情報のオンオフ信号出力ピン(例えばPD6…OC0A)
    ↓
(2)LEDのアノード
    ↓
(3)電流制限抵抗(1kΩとか)
    ↓
(4)変調信号用のPWM出力ピン(例えばPB1…OC1A)

こんな風に繋ぐと、(1)の出力信号がオンかつ、
(4)の変調信号がオフの時だけLEDが光り、
それ以外の状態ではLEDが消灯することになります。
もちろん、壊れちゃうようなこともありません。
(ご興味のある方は、(1)と(4)のオン/オフに
 ついて真理値表を書いてみて、回路に当てはめてみて
 ください)

漫画居士さんの「外付け部品要らないんじゃない?」
という発想は、私は逆立ちしても出てきません。

私の頭はやっぱりソフトウェアに片寄ってるんだろうなぁ。
っていうか、単にコチコチに固まっているだけか…?


ちなみに他のマイコンの場合は漫画居士さんのご指摘どおり
に出来るかも知れません。(調査できてません)

漫画居士さん、ありがとうございました。




コメント ( 2 )