2015/02/28

16F84A XC8開発例 - 低消費電力水晶発振子を使用する(LP Mode)

概要

PIC16F84AとMPLAB XC8 C Compilerを使用した開発例として,32.768kHzの水晶発振子を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.

PIC PIC16F84A
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 Application Version 2.61.00 / Device File Version 1.61.00
回路
回路図

電源はPICkit 2から5.0Vを供給し,32.768kHzの水晶発振子でPIC16F84Aを動作させています. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

使用部品表
番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F84A 1
X1 水晶発振子 32.768kHz 1
C1, C2 セラミック
コンデンサ
22pF 2
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2 - R8 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

2015/02/24

16F88 XC8開発例 - 複数の押しボタンスイッチからの入力

概要

PIC16F88とMPLAB XC8 C Compilerを使用した開発例として,2個の押しボタンスイッチ(タクトスイッチ)を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

電源はPICkit 2から5.0Vを供給し,内蔵クロック 8MHzで動作させています. 各タクトスイッチは,10kΩ抵抗でプルアップされた負論理入力回路となっています. 私がSW1として使用したタクトスイッチはLED内蔵ですが,このLEDは使用していません. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

使用部品表
番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 250円
SW1 LED付き
タクトスイッチ
Switronic ST-12-303FC-G
(緑,正方形)
1 150円
SW2 タクトスイッチ 各社 1 10円
(互換品)
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 - R3 炭素皮膜抵抗 各社 1/4W 10kΩ 3 1円
(互換品)
R4 - R10 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
プログラム
タクトスイッチのチャタリングによる誤動作防止対策

タクトスイッチを使用する際は,チャタリング対策が必要です. 下記のプログラムでは,スイッチの状態を10ミリ秒の間隔を置いて2回確認するようにしています. 1回目と2回目のスイッチの状態が一致し,なおかつ現在のスイッチの状態(sw_state)が前回のスイッチの状態(sw_state_prev)と異なる場合は,スイッチの状態についての判定(switch文)に移行します. これは,スイッチの状態が変化した直後のみ,スイッチの状態に対応する処理を実行するためです.

main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

完成

タクトスイッチと7セグメントLEDの使用例

2015/02/22

Arduino - 押しボタンスイッチと7セグメントLEDを使用したカウンタ回路

概要

モーメンタリ動作の押しボタンスイッチ(タクトスイッチ)と7セグメントLEDを使用したカウンタ回路の製作例を紹介します. 開発環境は下記のとおりです.

Arduino IDE Arduino 1.0.5-r2
回路
回路図

私はArduinoを持っていませんので,Arduino Duemilanove互換回路をブレッドボード上に作成しました. 私がSW1として使用したタクトスイッチはLED内蔵ですが,このLEDは使用していません. SW1は負論理(押下されている時にLOW,押下されていない時にHIGH)になっています.


回路図
回路部品

下表は,回路図中のSW1と「7セグメントLED表示回路」部分の使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

使用部品表
番号 部品名 型番 数量 参考単価
SW1 LED付き
押しボタンスイッチ
Switronic ST-12-303FC-G
(緑,正方形)
1 150円
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 - R7 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
スケッチ
SW1のチャタリングによる誤動作防止対策

タクトスイッチSW1を押下される度に,7セグメントLEDの表示数値をインクリメントするスケッチを作成しました. この動作を実現するためには,SW1のチャタリング対策が必要です.

下記のスケッチ例では,スイッチの状態を10ミリ秒の間隔を置いて2回確認するようにしています. スイッチが押下された状態の場合は,変数sw1_state_prevの値から前回のスイッチの状態を確認します. これはスイッチが押下された状態でインクリメントを複数回繰り返さないための判定処理です. sw1_state_prevがHIGHであればスイッチは押下直後ということになります.

スケッチ例

GitHubにて公開します.

完成

Webカメラで撮影したためピントが合っていません.ご了承ください.


7セグメントLEDカウンタ
製品紹介

2015/02/21

16F88 XC8開発例 - LED点滅回路

概要

PIC16F88とMPLAB XC8 C Compilerを使用した開発例として,LED点滅回路のプログラムを紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

回路構成はシンプルです. 電源はPICkit 2から5.0Vを供給しています. 内蔵クロック 8MHzで動作させています. RB5には,電流制限用抵抗 330Ωを経由してLEDが接続されています.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

使用部品表
番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 250円
LED1 LED 各社 各色 1 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
(互換品)
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

完成

LED点滅回路

2015/02/16

TOPPERS/EV3RTの開発環境構築 on Ubuntu 14.04 32bit

はじめに

Ubuntu上に,ETロボコン2015の公式ソフトウェアプラットフォームの1つである,TOPPERS/EV3RT (Real-Time platform for EV3)の開発環境を構築しました. 下記の公式ウェブサイトの掲載内容をそのまま実行しただけですが,作業ログとして書いておきます.

私も初心者ですので,内容に誤りが含まれている場合があります. また,本記事投稿現在,実機での動作確認ができていません…. つきましては,何かお気づきの際は,コメントなどでご指摘いただければ幸いです.

開発環境

VMware Player上にインストールした,Ubuntu 14.04 LTS 32bit上に構築しました.

OS Ubuntu 14.04 LTS 32bit

ダウンロードしたパッケージは,下記のとおりです.

TOPPERS/EV3RT β3-1: ev3rt-beta3-1-release.zip
作業ログ
  1. パッケージの準備
  2. ダウンロードして展開しました.

  3. ARM社のGNU Toolchainのリポジトリの導入
  4. マニュアル通りに実行しました.

  5. 必要なパッケージのインストール
  6. マニュアル通りに実行しました.

  7. EV3RTのコンフィギュレータのインストール
  8. 結構時間がかかったように感じますが,気が付いたら完了していたため,所要時間はわかりません.

2015/02/12

Zynq Linuxの使用メモリを制限する

はじめに

下記の記事で,device treeのbootargsを編集してLinuxの使用メモリを制限する方法が紹介されていました. 試してみたところKernel panicを起こしてしまいましたので,その対処方法もメモしておきます.

今やってみたいのはZYBOのVGAまたはHDMIからGUIを出力することなのですが,やり方がよくわからず困っています. もっとハードルが低いことからコツコツやった方が早いかも….

DTSのbootargsを編集する

「mem=384M」を加えて,Linuxの使用メモリを384MBに制限してみます. ZYBOはメモリを512MB搭載していますので,アドレス 0x18000000 ~ 0x1fffffff まではLinuxの管理外になるはずです.

Kernel panicが発生して起動しませんでした. わからないなりにログを眺めてみると,Kernelの読込み開始直後に落ちているようです.

Kernel panicの対処方法 / uEnv.txtの編集

原因と対処方法を調べてみると,下記Webページが引っかかりました. u-bootがdevice treeをメモリの上限アドレス付近に配置するため,Kernelの使用メモリを制限するとdevice treeが存在するアドレスを参照できない,ということでしょうか. 対処方法は,u-bootがdevice treeを配置する際の上限アドレス(fdt_high)を変更すれば良いようです.

u-bootのソースコード上では, include/configs/zynq-common.h で 0x20000000 に設定されているようです(自信はないです). ソースコードを編集してu-bootをリビルドするのは面倒なので,uEnv.txtでの設定を試してみました. 下記の1行目を追加しました.

正常に起動しました. /proc/meminfo を参照すると,使用メモリが384MB程度に制限されていることがわかります.

Ubuntu起動時の「システムプログラムの問題が見つかりました」表示を消す

はじめに

下記バージョンのUbuntuをVMware Player上で使用しているのですが,起動時に「System program problem detected」ウィンドウと「システムプログラムの問題が見つかりました」ウィンドウが表示されるようになりました. 英語と日本語,少しの時間を空けて2つとも表示されるので,とても鬱陶しいです.

OS Ubuntu 14.04 LTS 32bit

System program problem detected

システムプログラムの問題が見つかりました
対処方法

下記Webページで原因と対処方法が紹介されていました. クラッシュした際のレポートファイルが /var/crash ディレクトリに作成されるようですが,このレポートファイルの存在がUbuntu起動時のメッセージウィンドウの原因になっているようです. つまり,レポートファイルを削除してしまえばUbuntu起動時のメッセージウィンドウは表示されなくなります.

下記コマンドを実行してレポートファイルを削除すると,メッセージウィンドウが表示されなくなりました.

上記Webページでは,レポートファイルの生成や送信要求を実行している(…?)ソフトウェア,Apport自体を無効化する方法も紹介されています. 今回,私はレポートファイルの削除のみ実施しました.

2015/02/09

Xilinx SDKでDevice Treeを生成する

はじめに

FPGAの部屋を読んでいると,Xilinx SDKでDeviece Tree Source (DTS)を生成できることがわかりました. 下記の記事が参考になりましたが,開発環境が異なるほか,ファイルの取得方法が変わっていましたので,私の作業メモを残しておきます.

Xilinx Wikiの該当ページは下記のとおりです.
開発環境

DTSの生成に使用するXilinx SDK 2014.4は,Windowsにインストールしています.

OS Microsoft Windows 7 Professional x64 Service Pack 1
SDK Xilinx SDK 2014.4

ファイル取得に使用するgitクライアントやDTSからDevice Tree Blob (DTB)を生成する環境は,VMware Player上のUbuntuにインストールしています. Windowsとのファイル共有には,WinSCPを使用しています.

OS Ubuntu 14.04 LTS 32bit
Device Tree Generatorのセットアップ

Ubuntu環境でDevice Tree Generatorのgitリポジトリを取得しました. その後,ディレクトリごとWindows環境の「C:\work」にコピーしました. これにより,「C:\work\device-tree-xlnx」ができたことになります.

Vivadoでプロジェクトを開き,「File」 - 「Launch SDK」からXilinx SDKを起動しました. Xilinx SDKのツールバーから「Xilinx Tools」 - 「Repositories」をクリックし,「Preferences」ウィンドウを開きました. 「Local Repositories」に,「C:\work\device-tree-xlnx」を追加しました.


Preferences
DTSの生成

Xilinx SDKの「File」 - 「New」 - 「Board Support Package」をクリックしました. 「New Board Support Package Project」ウィンドウが開きましたので,「Board Support Package OS」を「device-tree」に変更して「Finish」しました.


Board Support Package

「Board Support Package Settings」ウィンドウが開きましたので,「bootargs」の「Value」に下記を入力しました. これは一例ですので,各自の環境に合わせる必要があります.


Board Support Package Settings

「Board Support Package Settings」ウィンドウを「OK」で閉じると,自動的に「device-tree_bsp_0」プロジェクトのビルドが開始され,DTSが生成されました.


device-tree_bsp_0
DTBの生成

「device-tree_bsp_0」ディレクトリごとUbuntu環境にコピーし,DTBを作成しました. ほとんどGUI操作だけでdevicetree.dtbが生成でき,タイプミス起因のエラーを回避できるのは良さそうですね.

2015/02/01

ZYBO (Zynq PS)にI2Cキャラクタ液晶を接続する

はじめに

Zynq PSのI2Cモジュールを使用して,I2Cキャラクタ液晶を制御してみました.


テストプログラムの実行結果
開発環境
OS Microsoft Windows 7 Professional x64 Service Pack 1
Vivado Vivado 2014.4 WebPACK Edition (Windows)
SDK Xilinx SDK 2014.4
I2Cキャラクタ液晶

AitendoのI2C低電圧キャラクタ液晶モジュール(16x2行) [SPLC792-I2C-M]を使用しました. バックライトユニットも搭載されていて375円です.安いですね…. LCDモジュール単体でも取扱いがあります.

接続方法については,下記の記事が大変参考になりました. 私も,ピンヘッダを変換基板に取り付けて接続しています. 変換基板の短辺側にあるランド(SHL, DIRC)にもピンヘッダを取り付け,ジャンパピンでショートさせることで,液晶モジュールの表示方向を変更できるようにしました. バックライトユニットの電源(BL+)には,330Ωの抵抗を直列接続して3.3Vを印加しました.


ピンヘッダの取り付け
Vivadoでの作業メモ
  1. Zynq Block Designの設定変更
  2. ZYBO Base System Designを流用しました. Block Design上のZYNQ7 Processing SystemをダブルクリックしてRe-customize IPウィンドウを開き,Zynq Block Designで「I2C 1」にチェックを入れました. なお,下図ではTTCにもチェックを入れていますが,I2Cキャラクタ液晶の制御には必要ありません.


    Zynq Block Design
  3. MIO Configurationの設定変更
  4. Re-customize IPウィンドウでMIO Configurationに表示を切り替え,I2C 1のIOを「EMIO」に設定しました. なお,下図ではTTCについても設定していますが,I2Cキャラクタ液晶の制御には必要ありません.


    MIO Configuration
  5. Diagramの変更
  6. Re-customize IPウィンドウを閉じ,Diagram上で右クリックしました. 右クリックメニューのCreate Interface PortをクリックしてI2C 1用のインタフェースポート「IIC_1」を作成し,ZYNQ7 Processing SystemのIIC_1と接続しました.


    Diagram
  7. I/O Portsの変更
  8. 「Run Synthesis」後,「Open Synthesized Design」し,IIC_1関連のI/Oポートをアサインするためにツールバーの「Window」 - 「I/O Ports」を開きました. 私は,ZYBOのPmod JBコネクタのJB1 (T20)にiic_1_scl_ioを,JB2 (U20)にiic_1_sda_ioをアサインしました.


    I/O Ports
プログラム

今更ながらGitHubのアカウントを作成しましたので,GitHubにて公開します.

Xilinx SDKで作成したプロジェクト内には「system.mss」というファイルがあります. このファイル内に,Zynq PSのI2Cモジュール「iicps」のドキュメントとサンプルプロジェクトのリンクがあり,大変参考になりました. このI2Cキャラクタ液晶のテストプログラムは,サンプルプロジェクト「xiicps_polled_master_example」を基に作成したものです.

また,I2Cキャラクタ液晶の制御方法の理解には,下記の記事が大変参考になりました.

製品紹介