※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
●重要なお知らせ●
1.Windows10の対応
2.ADM3202のコンデンサの接続について
第四章 PICでリアルタイムOSを使ってみる
1.FreeRTOSを使ってみる
●デモプログラムのビルド方法
●デモプログラムについて
デモは、下記の動作環境で作られています(本文は、FreeRTOSの英文のHPより一部抜粋、加筆しています)。
●簡単なプログラムを作ってみる
実験ボード・タイプ1A(18F452)
簡単な実験ボードを作ってみました。
(1)ルーレットにしてみる
8つのLEDをつないだ簡単なサンプルを作ってみました。
サンプル@ プログラムソース(FreeRTOS MPLAB C18 18F452用 C言語) バージョン
サンプルA プログラムソース(FreeRTOS MPLAB C18 18F452用 C言語) バージョン
サンプルB プログラムソース(FreeRTOS MPLAB C18 18F452用 C言語) バージョン
(2)USARTを使ってみる
USARTを使った簡単なサンプルを作ってみました。
サンプル@ プログラムソース(FreeRTOS MPLAB C18 18F452用 C言語) バージョン
(3)ADCを使ってみる
ただいま、準備中
実験ボード・タイプ2A(dsPIC33FJ256GP710)
「dsPIC_MPLAB」のサンプルを動かすため、dsPICを使った実験ボードも作ってみました。
(1)ルーレットにしてみる
18F452のデモと同じ動作をする、8つのLEDをつないだ簡単なサンプルを作ってみました。
サンプル@ プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP710用 C言語) バージョン
サンプルA プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP710用 C言語) バージョン
サンプルB プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP710用 C言語) バージョン
実験ボード・タイプ3A(dsPIC33FJ256GP506)
「dsPIC_MPLAB」のサンプルは、「dsPIC33FJ256GP710」で作られているため、これを「dsPIC33FJ256GP506」
(1)ルーレットにしてみる
上記、dsPIC33FJ256GP710のデモを、dsPIC33FJ256GP506でも動かしてみました。
サンプル@ プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP506用 C言語) バージョン
サンプルA プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP506用 C言語) バージョン
サンプルB プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP506用 C言語) バージョン
(2)USARTを使ってみる
18F452で作ったサンプルと同じものを、dsPIC33FJ256GP506でも作ってみました。
FreeRTOSConfig.h serial.c main.c
別室、PIC作品のページもよろしく!(続々、バージョンアップ中!!)
上のボタンをクリックすると作品のページに飛びます CPLDのページもよろしく!(いよいよオープン! 続々、バージョンアップ中!!)
プログラマブルに変更ができるハードウエアであるCPLDと、コンピュータであるPICを組み合わせた、簡単な製作を
上のボタンをクリックするとCPLDのページに飛びます 付録(おまけ)のページもよろしく!(続々、バージョンアップ中!!)
技術系雑誌の付録(おまけ)を使った、おまけのページです
上のボタンをクリックすると付録(おまけ)のページに飛びます Cygwinのページもよろしく!(続々、バージョンアップ中!!)
WindowsXP上で動作するUnixであるCygwinのページです。
上のボタンをクリックするとCygwinのページに飛びます AVRのページもよろしく!(続々、バージョンアップ中!!)
AVRを使った製作のページです 。アセンブラ(AVRStudio)、C言語(gcc)、BASIC(BASCOM)のサンプルプログラムを紹介しています。
上のボタンをクリックするとAVRのページに飛びます 動く作品のページもよろしく!(続々、バージョンアップ中!!)
CPUを使った動く工作作品のページです。
上のボタンをクリックすると動く作品のページに飛びます 古いパソコンの活用のページもよろしく!
スペックが古くて廃棄するしかなくなったパソコンを、解体して再利用するページです。
上のボタンをクリックすると古いパソコンのページに飛びます ActiveBASICのページもよろしく!(続々、バージョンアップ中!!)
USBやRS232を使って、PICとつなぐ、Windows/XPパソコンの簡単なアプリケーションを紹介しています。
上のボタンをクリックするとActiveBASICのページに飛びます パソコンのパラレルポート(プリンタポート)で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
Windows/XPパソコンのパラレルポート(プリンタポート)を、パソコンのプログラムで操作した簡単な事例を紹介しています。
上のボタンをクリックするとパラレルポートで遊ぼうのページに飛びます リアルタイムOSで遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
μITRON(TRON系のOS)を使った簡単な事例を紹介しています。
上のボタンをクリックするとリアルタイムOSで遊ぼうのページに飛びます H−8で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
ルネサステクノロジー社の8ビットCPUであるH−8を使った簡単な事例を紹介しています。
上のボタンをクリックするとH−8で遊ぼうのページに飛びます SH−2で遊ぼうのページもよろしく!(続々、バージョンアップ中!!)
秋月電子で入手が可能になった、32ビットCPUであるSH−2を使った簡単な事例を紹介しています。
上のボタンをクリックするとSH−2で遊ぼうのページに飛びます 「(別室)MSP430のページ!(続々、バージョンアップ中!!)
MSP430を使った簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)MSP430のページに飛びます 「(別室)M16C/R8Cで遊ぼう 」のページ(続々、バージョンアップ中!!)
M16C/R8Cを使った簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)M16C/R8Cで遊ぼう」のページに飛びます 計算のページもよろしく!(ただいま、準備中!!)
PICやAVRで使う、簡単な微分、積分、代数計算等をまとめています。
上のボタンをクリックすると計算のページに飛びます 「(別室)カーアクセサリーのページ!(続々、バージョンアップ中!!)
カーアクセサリーの簡単な事例を紹介しています。
上のボタンをクリックすると「(別室)カーアクセサリーのページに飛びます 「(別室)ゲームコーナーのページ!(続々、バージョンアップ中!!)
簡単なゲームを紹介しています。
上のボタンをクリックすると「(別室)ゲームコーナーのページに飛びます オーディオのページもよろしく!(続々、バージョンアップ中!!)
楽器やステレオアンプ等のオーディオ機器を、簡単に自作してみようというコーナーです。
上のボタンをクリックするとオーディオのページに飛びます レトロのページもよろしく!(続々、バージョンアップ中!!)
今では懐かしいマイコンを使わない製作のページです。
上のボタンをクリックするとレトロのページに飛びます 携帯電話で遊ぼうのページもよろしく!
携帯電話の簡単なアクセサリーを紹介しています。
上のボタンをクリックすると携帯電話で遊ぼうのページに飛びます STM8Sマイコンで遊ぼうのページもよろしく!
STM8Sマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとSTM8Sマイコンのページに飛びます ARMマイコンで遊ぼうのページもよろしく!
ARMマイコンを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとARMマイコンのページに飛びます ジャンクボードで遊ぼうのページもよろしく!
仕様不明のジャンクボードを使った簡単な製作を紹介しています。(続々、バージョンアップ中!!)
上のボタンをクリックするとジャンクボードで遊ぼうのページに飛びます メニューのページ
ページが増えたので、派手なメニュー画面を作りました。
上のボタンをクリックするとメニューに飛びます
MICROCHIP社の開発環境は、Windows10に対応しています。
Cコンパイラも無償で使えます。
MICROCHIP社の場合、古いCコンパイラもダウンロードできるのですが、Cコンパイラの最新は、XC8,XC16,XC32です。
これから開発をする人は、XC8,XC16,XC32で開発したほうがいいと思います。
このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
ているので、データシートの通りに(図b)のようにしたほうがいいと思います。
リアルタイムOS(RTOS)を使うと、マルチタスクのプログラムを容易に作ることができます。
このHPは、PICでRTOSを使った事例について取り上げています。
FreeRTOSは、リアルタイムエンジニアリング(株)のリアルタイムオペレーティングシステムで、はば広いコンピュータで
使用できるリアルタイムOSです。
デモアプリケーションの一部に、サードパーティーによりライセンスされているソースコードが含まれますが、基本的には、
無償で使用できます。
PICで使う場合、PIC32/PIC24/dsPIC/PIC18シリーズに対応していて、必要なCコンパイラーはマイクロチップ社純正の
MPLAB C32/MPLAB C30/MPLAB C18になります。
リソースが軽く、ソースも公開されているので、PICを使っている人なら、
FreeRTOSをダウンロードするだけで使えるようになると
思いますし、扱いやすいRTOSです。
FreeRTOSに対応しているMPU ※H24.10現在
FreeRTOSのサイトより、FreeRTOSのソースコードをダウンロードします。
プログラムのソースは、ZIP形式、またはSFX形式(Exeファイル)でダウンロードできる(どちらでも解凍すると同じ内容です)ので、
これを解凍します。
これをフォルダー毎コピーし(プログラムが「Sourceフォルダー」を参照しているので、Sourceフォルダーもコピーしないとビルド
できません)、使用するデモのプロジェクトをMPLABで開いてビルドし、PICKIT等のライターでデバイスに書き込んでやれば使用
できます。
MPLABでは、Cコンパイラーのインストール先にあわせて、インクルードファイルとライブラリのパスを指定してやる事と、使用する
PICデバイスを選択する程度の作業は必要ですが、これは通常の開発でも行っている作業だと思います。
コンパイラーは無償のLiteバージョンで使用できますが、昔の機能限定バージョンだとビルドできないかも知れません。
FreeRTOS(バージョン7.2.0)デモのフォルダ一覧
1)PIC32(PIC32_MPLAB)
マイクロチップ社から提供されているデモで、MIPS M4KベースのPIC32のアプリケーションです。
XC32コンパイラー、MPLAB、
Explorer16 development board
(マイクロチップ社)で作られています。
他に、マイクロチップ社のアプリケーションノートで、FreeRTOSと、マイクロチップ社のライブラリー及びスタックと統合する
方法を解説しています。
オリジナルは、PIC32MX460F512Lで作られています。
2)PIC24/dsPIC(PIC24_MPLAB/dsPIC_MPLAB)
マイクロチップ社PIC24/dsPIC用のデモで、
Explorer 16 evaluation board(マイクロチップ社)、及び MPLAB C30コン
パイラーで作られています。
オリジナルは、PIC24FJ128GA010や、dsPIC33FJ256GP710で作られています。
4)PIC18(PIC18_MPLAB)
デモは、18F452を使って、
40 pin PICmicro prototyping board
(Forest Electronic Developments社)で動くように作られて
います。
開発ツールは、MPLAB IDEと、MPLAB C18コンパイラーです。
5)PIC18(PIC18_wizC)
Forest Electronic Developments社から提供されているデモで、
wizC Integrated Development Environment (Forest Electronic
Developments社)で作成されています。
MPUは、18F4620が使われているようです。
OSCは、10MHzの水晶を使ってPLLで40MHz動作させてもよいのですが、
オリジナルの仕様と変えてしまうと、環境設定のプログラムの修正が必要になるので、OSCはソケットで抜き差しできる
ようにして、このサンプルでは20MHzの水晶をつないでいます。
ボードのイメージと回路図
OSCのイメージ
使用している20MHzの水晶は、PICになるべく近い位置に取り付けないと、正常に動作しない事があり得ます
「PIC18_MPLAB」デモの、main1.cと置き換えるだけで使用できます。
サンプル@は、3つのタスクを生成し、それぞれの独立したタスクがそれぞれLEDを動かす事で、3点が動くように
見えるものです。
タスク1、タスク2は1秒間隔、タスク3は0.1秒間隔で動作させているので、タスク1、タスク2の2点のLEDが同時に動き、
タスク3の1点がその10倍の回転速度で、2点を追い越していくように見えます。
サンプルAは、2つの独立したタスクを生成し、セマフォを使って同期を取っているものです。
タスク1が、0.125秒間隔(1秒で1周する)でLEDを動かし、1周する毎にセマフォを解除(Give)するので、タスク1の
LEDが1周する毎にタスク2のLEDが1ステップ動きます。
時計の長針と短針のような動きをします。
サンプルBは、2つの独立したタスクを生成し、タスク1からタスク2にキューを使ってデータを連動するものです。
タスク1が、1秒間隔でLEDを動かし、5ステップ(5秒)毎にキューにLEDの位置(PORTの値)を書き込むと、タスク2が
起動して、キューの値を読み込み、タスク1の次のキューの書き込みがあるまで、その位置を表示します。
タスク2が動かすLEDが、タスク1が動かすLEDのラッチのような動きをします。
ボードのイメージ(写真はサンプル@のイメージ)と回路図
サンプル@の動作イメージ
サンプルAの動作イメージ
サンプルBの動作イメージ
「PIC18_MPLAB」デモの、main1.cと置き換えるだけで使用できます。
なお、USART関係のプログラムは、「PIC18_MPLAB」デモの下の「serial」のフォルダーに用意されています。
サンプル@は、2つのタスクを生成し、タスク1からタスク2にキューを使ってデータを連動するものです。
タスク1が1秒間隔で動作してLEDを回転させ、その時の8つのLEDの表示イメージ(ポートDの値:00〜FF)を
キューに書き込むと、タスク2が起動してキューの値を読み込み、シリアルポート(USART)に出力します。
このサンプルの場合は、タスクが2つしかないので必要はありませんが(同時に動くプロセスがないため)、
通常は、USARTが書き込みを行なっている最中に他のタスクが動作しないように排他制御を行なう必要があります。
ボードのイメージと回路図
ハイパーターミナルの設定
サンプル@のハイパーターミナルのイメージ(PORTDの値が16進数表示される)
サンプル@の動作イメージ
「第二章 16ビットPICを使ってみる」の章で作成した「dsPIC33FJ256GP710」の実験ボードでそのままFreeRTOSを
動かしてみただけのものです。
オリジナルボードはクロックを50MHz動作させていますが、ここではなるべく簡単にするために、内部クロック(7.37MHz)
を使用していますので、外付け水晶は不要です。
オリジナルの仕様と変えているので、本来は「FreeRTOSConfig.h」の修正が必要になりますが、このサンプルは、なるべく
簡単にするために、main.cの中でクロックを修正しています。
「dsPIC_MPLAB」デモの、main.cと置き換えるだけで使用できます。
サンプル@は、3つのタスクを生成し、それぞれの独立したタスクがそれぞれLEDを動かす事で、3点が動くように
見えるものです。
タスク1、タスク2は1秒間隔、タスク3は0.1秒間隔で動作させているので、タスク1、タスク2の2点のLEDが同時に動き、
タスク3の1点がその10倍の回転速度で、2点を追い越していくように見えます。
サンプルAは、2つの独立したタスクを生成し、セマフォを使って同期を取っているものです。
タスク1が、0.125秒間隔(1秒で1周する)でLEDを動かし、1周する毎にセマフォを解除(Give)するので、タスク1の
LEDが1周する毎にタスク2のLEDが1ステップ動きます。
時計の長針と短針のような動きをします。
サンプルBは、2つの独立したタスクを生成し、タスク1からタスク2にキューを使ってデータを連動するものです。
タスク1が、1秒間隔でLEDを動かし、5ステップ(5秒)毎にキューにLEDの位置(PORTの値)を書き込むと、タスク2が
起動して、キューの値を読み込み、タスク1の次のキューの書き込みがあるまで、その位置を表示します。
タスク2が動かすLEDが、タスク1が動かすLEDのラッチのような動きをします。
ボードのイメージ(詳細は、第二章を参照)
回路図(詳細は、第二章を参照)
サンプル@の動作イメージ
サンプルAの動作イメージ
サンプルBの動作イメージ
に移植してみました。
「第二章 16ビットPICを使ってみる」の章で作成した「dsPIC33FJ256GP506」の実験ボードをそのままつかっているので、
クロックは内部OSCを使っていて、外部に水晶の接続は不要です。
このレベルのサンプルなら、下記の作業程度でも動かす事ができます。
@MPLABのデバイスを、「Configure」=>「Select Devive」で、dsPIC33FJ256GP710から、dsPIC33FJ256GP506
に変更する
A「FreeRTOSConfig.h」の中のインクルード文を「#include <p33FJ256GP710.h>」から「#include<p33FJ256GP506.h>」
に変更する
「FreeRTOSConfig.h」のインクルードを修正
BdsPIC33FJ256GP506は、ポートの制約で710のデモは動かせないので、これをプロジェクトのリンクからはずす
dsPIC33FJ256GP710固有のオリジナルのデモは使用しないので、MPLABの画面よりはずす
(残しておくと、ビルドエラーになる)
CdsPIC33FJ256GP710で使っていた共通のデモ関数を、main.cにダミーで追加する
(本格的に修正してもいいのですが、この修正方法が、最も簡単だと思います)
注意)デモのフォルダー名を変えている場合は、デフォルトでは、「FreeRTOSConfig.h」は、カレントディレクトリーと、
「dsPIC_MPLAB」の両方の「FreeRTOSConfig.h」を参照するので、Aの修正は、両方とも修正しないとビルド
エラーになります。
また、インクルード文をdsPIC33FJ256GP710に戻す場合は、両方とも戻さないと、ビルドエラーになります。
「dsPIC_MPLAB」のデモに、上の@、A、Bの対応をしてから、main.cを置き換えるだけで使用できます。
サンプル@〜Bの動作は、上記のdsPIC33FJ256GP710のサンプルと同じです。
実験ボードのイメージ
回路図
ただし、「dsPIC_MPLAB」のデモは、dsPIC33FJ256GP710で動くように作られているので、
このプログラムを動かすためには、下記の簡単な修正が必要です。
@MPLABのデバイスを、「Configure」=>「Select Devive」で、dsPIC33FJ256GP710から、
dsPIC33FJ256GP506に変更する ※)上記のルーレットと同じ対応
A「FreeRTOSConfig.h」を、下記のものに置き換える。
(オリジナルは50MHzで動かすようにできているので、これを内部OSC:7.37MHzで動かすように修正している)
デモのフォルダー名を変えている場合は、デフォルトでは、「FreeRTOSConfig.h」は、カレントディレクトリーと、
「dsPIC_MPLAB」の両方の「FreeRTOSConfig.h」を参照するので、両方とも置き換えないと動作しません。
BdsPIC33FJ256GP710のデモをプロジェクトのリンクからはずす
dsPIC33FJ256GP710のデモは使用しないので、MPLABの画面よりはずす
(残しておくと、ビルドエラーになる) ※)上記のルーレットと同じ対応
Cデモフォルダーの下の「serial」フォルダーにあるserial.cを、下記のものに置き換える
(オリジナルはdsPIC33FJ256GP710用にできているので、これをdsPIC33FJ256GP506用に修正している)
Dmain.cを、サンプルプログラムに置き換える
サンプル@は、2つのタスクを生成し、タスク1からタスク2にキューを使ってデータを連動するものです。
タスク1が1秒間隔で動作してLEDを回転させ、その時の8つのLEDの表示イメージ(ポートDの値:00〜FF)を
キューに書き込むと、タスク2が起動してキューの値を読み込み、シリアルポート(USART)に出力します。
ボードのイメージと回路図
ハイパーターミナルの設定
サンプル@のハイパーターミナルのイメージ(PORTB[0−7]の値が16進数表示される)
サンプル@の動作イメージ
インクルードファイル(FreeRTOS MPLAB C30 dsPIC33F用 C言語)
このインクルードファイルを、「FreeRTOSConfig.h」に置き換える
シリアル通信プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP506用 C言語) バージョン
このプログラムを、デモフォルダの下の「serial」フォルダーにある「serial.c」に置き換える
サンプル@ プログラムソース(FreeRTOS MPLAB C30 dsPIC33FJ256GP506用 C言語) バージョン
紹介しています
付録の都合上、ここでは、PIC以外のCPUを使った製作を紹介しています。(内容は、PICと関連がありません。)
WindowsXP上での、Unixの開発を紹介しています。
市販の雑誌や書籍では、TRON系OS(μITRON)や、GNUを使ったCPUの開発記事が、しばしば紹介されて
いますが、このページでは、PIC対応のフリーのコンパイラーの実験を計画しています。ただし、現在、全くの未着手です。
そのほか、AVRのgccについて、基本操作をのせています。
内容は、PICと関係がありません。
目標は、自分の意識を持った巨大ロボットを作る事です。
現在は、無償の開発ツールを使った知識データベースの実験を紹介しています。
このページでは、無償で使用でき、しかも機能的にも優れている、ActiveBASICを使った事例を紹介しています。
このページは、パソコンで、直接、外付けのハードウエアを動かすもので、組み込み型CPUとは関係がありません。
TRON系のOSは、組み込み型システムにおいては、広く普及しているものです。
知識ベースや、加速度センサーを使うために準備しているもので、内容は初心者レベルです。
真空管、トランジスタ、ロジックICによる製作を予定しています。
これであきずに、次章もよろしく。。。。。。
●問い合わせ先(代表者) BYP03364@nifty.ne.jp
※ウイルス感染防止のため、容量の大きなもの、添付ファイルのあるもの、テキスト形式以外のメールは
全て削除されます。
また、個々の質問については、お答えできません。
●このページは、自由にリンクしてください。