• 締切済み

PICでの三角関数演算(アセンブラ)

現在、PIC18F4580を使用してある計算をさせたいと思っています。 その計算の中で、アセンブラ言語でSin30°等の計算をさせたいと思うのですが、参考となる文献やHPはありませんでしょうか? よろしくお願いします。

みんなの回答

noname#97621
noname#97621
回答No.1

昔々の話になってしまいますが‥今も同じかもしれませんが, 非力なCPUで三角関数演算を行うには,必要精度に分解したテーブルを 参照する方法を用いていました。 実際に必要なテーブルの大きさはπ/2だけあれば良く,あとは演算で 参照する位置を求めていました。 たとえばsin(30度)が0.5なら,sin(150度)も同じ,sin(210度)と sin(330度)は-0.5になりますので,90度分の値が書かれたテーブルを 参照します。 誤差を正負どちらに向けるかは,角度を変換してテーブルを参照するか, 角度を変換してテーブルを参照した結果を1から減ずるかで制御してました。

hide0117
質問者

お礼

大変、参考になりました。 どうもありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PICのアセンブラ命令コード一覧

    PIC24FまたはdsPICのアセンブラ命令コード一覧を探しているのですが、 マイクロチップのHPからも探し方が悪いのか、当方は見つけることができませんでした。 何方か、PIC24FまたはdsPICのアセンブラ命令コード一覧が記載されているHPや情報をご存知ないでしょうか? アセンブラ記述で、コーディングしたいのですが、命令コードの意味が良く分かりません。 命令コードとその意味が記載されたものがほしいのです。 宜しくお願いします。

  • PICプログラム C言語とアセンブラ言語

    PIC18シリーズを使用して、プログラミングをしています。コンパイラはCCS-Cです。今まではすべてC言語で書いてきたのですが、アセンブラでしか設定ができない部分があり、今までのC言語のソースに加えてアセンブラを組み合わせようと思っているのですが、C言語とアセンブラを組み合わせることは可能なのでしょうか?

  • PICアセンブラで悩んでます・・・。

    PIC16F84を使ってアセンブラでプログラムしているのですが、どうしてもアセンブルが成功しません。 エラーを中心にプログラムを削りまくったところ、ADDWF命令とRETLW命令でコケているようです。(テーブル処理) 以下のプログラムで、ADDWFの位置で「ラベル(ADDWF)の位置が変です」というエラーが出てしまいます・・・。  LIST P=PIC16F84;  INCLUDE "P16f84.inc"  ORG 0 START  ADDWF PC,W  END どういうことなんでしょうか?(T-T (タブはスペースに置換済みです)

  • PIC用アセンブラ「PA.exe」の参考書ってありますか?

    PIC用アセンブラ「PA.exe」の参考書ってありますか? 趣味で電子工作をやっており、PICを使用したりしています。 「わかるPICマイコン制御」という参考書を見ているのですが、 割り込みや、タイマー機能等の記載がなく、他の参考書を探しています。 「PA.exe」をベースにしている参考書は、他にないでしょうか? 探してみましたが見つからなかったので、 知っている方がいましたら教えていただけないでしょうか? よろしくお願いします。

  • PICのアセンブラによるLEDの制御

    PICのアセンブラによるLEDの制御 をやっているんですが。 LEDを点滅させる速度を時間に応じて変化させたいのですが、いまいちわかりません。 ●○●○●○●○ から ○●○●○●○● です。 使用ICは16F84Aです おそらく、 COUNT1 EQU 1CH を変化させるか、DELAYサブルーチンをかえるのであろうと思うのですが、わかりません。 教えてください。

  • PIC16のアセンブラ、あなたならどう書く?

    PIC16のアセンブラ、あなたならどう書く? こんにちは、PIC16シリーズのアセンブラについての質問です。MPASMのプログラム書き始めて3日ぐらい目です。すこしずつ、インストラクション・セットやアーキテクチャを把握してきた感じです。 C言語調で書きました下記の様なIF-ELSEをMPASMで書きたい時、皆さんならどの様に記述されますか?人に見られる可能性のあるコードですので、ちびっとぐらいは格好つけないといけない状態です(汗)。   //===== Increase var0/1 =====   if( sel == 0x00 ) {     var0 ++;     var1 = 0;   } else {     var1++;     var0 = 0;   } 下記は、自分なりのコードとそのコメントに当たります。   ;===== Increase var 0/1 =====   MOVF   sel, W    ; Switch by sel   BTFSS  STATUS, Z  ; ..   GOTO   $+4     ; ..   INCF   var0     ; Case sel==0, var0++   CLRF   var1     ;        var1=0   GOTO   $+3     ;   INCF   var1     ; Case sel!=0, val1=++   CLRF   var0     ;       val0++   NOP          ; Switch-close もちろん、記述方法は記述者の好みがありますから、良し悪しではなく参考的な回答だと嬉しいです。こういう方が常識的だとか、こう記述すると後で見やすいとか、好き嫌いでもかまいません。よかったらご意見ください。よろしくお願いいたします。

  • PIC18でのPWM制御について

    PICで充放電の制御をしているのですが、PICのPWMモードで12V、1kHzの信号を出す必要が出てきました。 PWMモードは触ったことがなく、調べながら作る時間も余りないので、厚かましいとは思いますが、 どなたかアセンブラまたはc言語でのプログラムを教えていただけませんでしょうか。 使用チップはPIC18F2580です。 よろしくお願いします。

  • PICを使って正弦波を出力

    PIC16F84Aを使って、正弦波を出力したいのですが、プログラミングまたは回路のほうはどのように組めばよいのでしょうか。 欲しい正弦波の周波数は0.3[Hz]、使用言語はアセンブラです。 よろしくお願いします。

  • PICのプログラミングについて

    現在、PICのプログラミングについてアセンブラがいいかC言語がいいか迷っています。 基本的にLEDを使った物をつくりたいと思っており PWM制御でのLEDの調光、LEDの点滅の周期の変化などをつけた 物を作ろうと考えております。 アセンブラとC言語のPICにおいての違いを教えてください。 加えて、上のPWM制御についてはどちらでもできるのでしょうか? 2つのプログラム言語についての良い点、悪い点など教えてください よろしくお願いいたします。

  • PICマイコンPIC12F509について

    これからPICを勉強しようとしているPIC未経験者です。 とりあえず使用するPICはPIC12F509を考えています。ネットの情報量からすると本当はPIC12F683の方が良いのかも知れませんが価格面からPIC12F509を検討しています。 PICはこれから購入しますが一番最初に触るPICマイコンとしてPIC12F509を選択しても大丈夫でしょうか? 一応言語はアセンブラを勉強しようと考えています。また、最初の目標として入力1に5Vがかかった時に出力1から何ミリ秒か遅れて5Vが出力され、入力1の加わる5Vが不定期に素早くON-OFFを繰り返えしてもPICの電源をOFFするまでずっと繰り返し動作する程度の物を組みたいと思っています。 現在の開発環境はPCにMPLAB X IDE v3.26等のソフトをインストール、PICkit3を入手程度です。 先日、MPLAB IPE v3.26を使用しHEXファイルをPIC18F2550に書込みを初めてしてみました。これが初めてのPICとのふれあいです。 以上、PIC知識人の皆さまご教示を宜しくお願い申し上げます。