テーマ:マイコン

ATtiny10でプログラム(ソフトシリアル送信)

6ピンの米粒AVRのATtiny10は、小さいながらマイコンの機能を持っています。4ピンのポートを活用して信号変換などに使えます。内蔵周辺機器にはシリアルインターフェースはありませんが、ソフトウェアで作ることが出来ます。一番簡単なシリアル送信を作りました。内蔵発振器を使うと誤差が1%以内に収まらないので外付けの水晶発振器を使いましたが、…
トラックバック:0
コメント:0

続きを読むread more

dsPICでグラフィック(周波数のスイープ)

液晶画面がちらつきなく表示できるには、表示して次の表示までの時間が十分に短いことが必要です。さすがに40MIPSの速度では、表示などがスムーズに行きますが、連続して変化したときの表示はどうなるかを確認するために、周波数を0Hz~127Hzまで変化させ、FFTを行って周波数をグラフに表示することを試してみました。128ポイントでもFFTや…
トラックバック:0
コメント:0

続きを読むread more

dsPICでグラフィック(AD変換入力)

dsPIC33FJ32GP202を使うことで、高速にグラフィックが表示できるので、今度はAD変換を試してみました。dsPIC33のAD変換には多彩な機能があり、4チャンネルまでを自動でサンプリングすることもできるようです。また、10ビットと12ビットを使い分けることもでき、dsPIC33の高速化に寄与しています。プログラムで毎回指定する…
トラックバック:0
コメント:0

続きを読むread more

dsPICでグラフィック(DSPによるFFT)

dsPIC33FJ32GP202を使って、ソフトウェアでFFTを使うことができたのですが、dsPICということでDSP機能を内蔵しているのでハードウェアによるFFTを試してみました。DSP関数はライブラリを使用することで利用できますが、使い方がまったくわからなかったので、書籍「dsPIC基板で始めるディジタル信号処理」に出ていたFFTア…
トラックバック:0
コメント:0

続きを読むread more

dsPICでグラフィック(ソフトウェアFFT)

dsPIC33FJ32GP202を使うと、40MIPSの速度で実行できるので、時間のかかるグラフィックや浮動小数点の計算も苦にならなくなります。ソフトウェアによるFFTでもかなり速くなることが期待できますので、そのままコピーしてきました。ソースの変更もあまり必要なくあっさり動作しましたが、速度も速くなっています。時間軸のグラフを描画した…
トラックバック:0
コメント:0

続きを読むread more

dsPICでグラフィック(GLCDの描画速度)

PIC16F886でも浮動小数点やグラフィックがかなりできたのですが、やはり遅いこととメモリが足りないことがわかりました。高速のマイコンとしてdsPIC33FJ32GP202があり、クロックのPLLを設定することで、最高80MHzのクロックで動作させることができます。そのときの速度は40MIPSにもなります。PIC16F886と回路はそ…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cのプログラム(2入力グラフ)

PIC16F886のAD変換入力は、配線の都合では4チャンネル分使えるのですが、その中の2チャンネルを使ってプログラムを作りました。AD変換器は、チャンネルを切り替えると約5ms待たなければならなくなり、入力時間が遅くなってしまいます。そこで、タイマー割り込みを使って50ms間隔で入力するようにして、グラフィック画面の上半分と下半分にそ…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cのプログラム(スペクトラムアナライザ)

HiTech-Cによりプログラムすることで、浮動小数点が使え関数なども使えるため、FFT関数を使って周波数解析ができるようになったので、いよいよ実際の信号を入力してスペクトラムを表示するようにしました。8ビットマイコンでは荷が重く、信号を入力しながら表示することができないので、FFTに必要な16点分をまとめて入力した後、変換、表示します…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cのプログラム(周波数スイープ)

HiTech-Cは、PIC16F886などでも浮動小数点が使えるのでFFTのプログラムを試し、変換表示ができることがわかりました。これをもっと応用するために、入力を変化させて周波数を表示してみました。あまり長いプログラムは無理なので、周波数を最小の1Hzから16Hzまで変化させて周波数スペクトルを表示してみました。マイコンが余りに遅いの…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cのプログラム(FFTで周波数表示)

8ビットマイコンであるPIC16FシリーズでもHiTech-Cを使うことで浮動小数点が利用できるとわかったのですが、浮動小数点関数を使うことよりもprintfにより浮動小数点変換を使うことのほうがメモリを使用するようです。そうなると、複雑な計算は大丈夫ということになります。そこで、FFTを試してみることにしました。時間軸の信号を入力する…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cのプログラム(AD変換してグラフ表示)

グラフィックLCDは、8ビットのポートと6ビットの制御線があればよいので、PORTBとPORTAを使って表示するようにしていました。そのようにすると機能が豊富なPORTCが自由に使えるからでしたが、AD変換入力をしようとすると、PORTAが使えないことに気がつきました。そこで、PORTAからPORTCに変更して、AD変換をいろいろ試して…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(Printfで液晶画面へ)

PIC16F876などにおいて、C言語でプログラムする利点は、浮動小数点が使えることとprintf関数が使えることにあると思います。printf関数では、出力書式で浮動小数点を指定することで浮動小数点の変換もできます。しかし、いいことばかりではありません。浮動小数点関数や浮動小数点を書式に指定するとメモリを大量に使用し、コンパイルできな…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(浮動小数点)

Cコンパイラで記述すると、アセンブラで書くより簡潔に書けるのですが、もっとも便利なのが浮動小数点が使えるようになることではないかと思います。HiTech-Cでも浮動小数点があり、利用することができます。結果の表示にはprintf関数を使うのが簡単で、putch関数を用意するだけで使えます。ただし、printf関数で浮動小数点を使ったり、…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(stdio関数の利用)

プログラムを作るとき、数値を10進や16進で表示したり、文字列などを配置して表示したいことがあります。C言語では、通常、printf関数を使うことで、書式に従った表示ができるのでこれを利用します。HiTech-Cでも、標準関数は用意されており、printf関数なども利用できますが、標準出力などは組み込み機器では決まっていないので、それぞ…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(円の描画)

HiTech-Cでプログラムすると、ほかのプログラムで工夫されたアイデアがそのまま利用できる利点があります。グラフィック表示で円を描画することは、簡単に考えると、SIN関数テーブルを用意して表示すればよいように思うのですが、前に試したときにはうまくいきませんでした。ここで使用したCircle関数は、書籍「LCD&タッチセンサの素」の中で…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(グラフィック液晶その2)

アセンブラで記述していたときに比べ、C言語で記述すると規模の大きなプログラムが書けるようになります。しかし、PIC16F876などのように8kワード内蔵したマイコンでもそれほど大きなプログラムはかけないようです。若干複雑な小規模のプログラムに向いているようです。グラフィック液晶が使えると、表現力が増えますので、複雑なことをやってみたくな…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(グラフィック液晶)

8ビットのマイコンにもC言語を使うようにしましたが、C言語を使う利点は、ループや分岐などの制御構造がわかりやすく、また、8ビット以上の数値を扱うときに計算が楽だということです。代入に関しても、Wレジスタへの読み出しと書き込みが1行ででき、アセンブラよりも簡単になります。そしてもっとも有利なのが、すでにC言語で書かれているプログラムを流用…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(液晶表示その2)

自分で作るプログラムは、用途が限定されているのでそれほど大きくならないのですが、サンプルプログラムは、条件を変えることでいろいろに使えるようになっているので大きくなってしまい、ブログの記事の上限を超えてしまいました。前回入らなかったプログラムを掲載しますが、だいぶ大きくなります。液晶モジュールが使えるようになることで、プログラムの進行状…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(液晶表示)

マイコンの表示の中で、一番情報を伝えやすく扱いも簡単なものに液晶モジュールがあります。PIC16F88を使用するとき、液晶モジュールを使用するならポートAだけを使い、ポートBを残しておいたほうが便利と思います。液晶モジュールには最低5本必要になるので、クロックを内蔵発振器にしてPA6,PA7を使います。これにより、ポートBが自由に使える…
トラックバック:0
コメント:2

続きを読むread more

HiTech-Cによるプログラム(バッファリング)

HiTech-Cコンパイラを使うと、レジスタのバンクを指定しなくて使用でき、いちいちレジスタのバンクを確認しなくて済むようになります。しかし、バンクの違うレジスタを使うたびにバンク切り替えのコードが生成されるので、同じバンクをまとめたほうがよいと思います。もうひとつの注意点として、384バイトあるRAMを1つの配列として使用できないこと…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(16F88でシリアル)

HiTech-Cは、16F88などの8ビットマイコンで簡潔なプログラムができる利点があります。最近、パソコンが故障して、別のパソコンにMPLAB-IDEをインストールしなおしました。以前のバージョンは8.63でしたが、8.83になりました。早速コンパイルしてみると、今まで通っていたHITech-Cのプログラムが通らなくなりました。エラー…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(16F88で割り込み処理)

8ビットマイコンのPIC16F88でも、アセンブラでなく、C言語でプログラムしようと思っています。理由は、書きやすい、見直しやすいことのほかに、PIC24FJ64などのプログラムを移行しやすいこともあります。公開するプログラムでは、C言語のほうが読みやすいでしょう。HiTech-Cを使うことにして、コンパイルができることを確認しました。…
トラックバック:0
コメント:0

続きを読むread more

HiTech-Cによるプログラム(PIC16F88でブリンク)

PICのミッドレンジマイコンのPIC16F88などは、今までアセンブラでプログラムしてきました。それは適当な開発環境がなかったためですが、PIC18Fなどでは、フレームワークスを利用するため、また、PIC24FJ64では、機能が複雑になったためC言語でプログラムしていました。C言語では、繰り返しの制御や、IFでのブロック実行ができ、16…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110Aのアセンブラプログラム(チェックサムチェッカ)

R8C/M110ANは、ポートの数は少ないですが、内蔵された周辺機器は、確実な動作が期待できるものとなっています。これまでのプログラムをまとめて、応用となるものを作りました。いつも作るのは、GPSから出力されるメッセージの中にあるチェックサムを確認して、正しいときだけ出力するものです。これは、無線通信において、GPSデータが送られてきた…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110Aのアセンブラプログラム(ROMダンプ)

R8C/M120Aでなく、R8C/M110Aを使用した理由は、ポート数が少し少なくなったとしても、パッケージが14ピンであることに意味があると思ったからです。ゲートICの1個分でマイコンが実装できるので、基板の隅にも入れることができます。基本的なプログラムがかたづいたので、すこし応用を考えてみました。内蔵されたRAMやROMは、同じ空間…
トラックバック:0
コメント:0

続きを読むread more

R8C/M1101ANのアセンブラプログラミング(RCによるPWM)

R8C/M110ANのプログラムをアセンブラで作るのは、少しずつできるようになってきましたが、ちょっと応用をしてみたいと思います。タイマーRCは、カウンタの機能のほかにPWMモードがあり、これを使うとDA変換器のように出力をアナログ的に変化させることができます。この出力にLEDをつけて蛍のような緩やかな変化をさせてみました。PWM出力は…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110Aのアセンブラプログラミング(RJ2タイマ)

R8C/M110ANをアセンブラでプログラムするために、内蔵周辺機器を一通り使ってみようと思ったのですが、内蔵されているタイマーには、RJ2、RB2、RCの3つがあり、それぞれ特徴があるのですが、タイマーモードで使うのであれば、どれも似たような使い方になります。インターバルタイマーとして使うのであれば、割り込みにより使用することになりま…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110Aのアセンブラプログラム(シリアル送信バッファリング)

R8C/M110ANをアセンブラでプログラムするために、内蔵周辺機器の使い方をひとつひとつ確認しているところですが、UARTを割り込み下で使用するために、すでに受信のプログラムを作成しました。いつもはプログラムの進行は送信のペースで行うことにして、受信で取りこぼしのないように割り込みを使用しているのですが、時間のかかる計算などで、時々短…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110ANのアセンブラプログラム(シリアル受信バッファリング)

R8C/M110ANは、14ピンのマイコンですが、R8C/tinyなので、使い易い命令セットと、そこそこの周辺機器を内蔵しています。マイコンをうまく使いこなすには、割り込みをうまく使うことだと思うのですが、シリアル通信の受信に使用してバッファリングを行うようにしました。送信はバッファリングせず、送信のペースにあわせてプログラムが処理され…
トラックバック:0
コメント:0

続きを読むread more

R8C/M110ANのアセンブラプログラム(割り込み)

今までのR8C/M110ANのプログラムは、10月5日の記事のようにプロジェクトを生成すると、main.a30をコピーしてプロジェクトに追加するだけでよかったのですが、割り込みを使うには、自動生成されるsect30.incに割り込みベクタを追加する必要があります。割り込み方式は、ベクタ方式といい、割り込み要因によって割り込みが実行される…
トラックバック:0
コメント:0

続きを読むread more