PIC10F322T-I/OT | SOT-23(6pin) パッケージで最も強力な PIC(2019年現在) | |
やってみた事 | 具体事例ではなく「こんな事ができる」と言うサンプルです | |
| | | |
PICの SOT23パッケージの中で最も高機能な PIC10F322 を使ってみました
|
| |
下の動画に映っているものが全てです |
| (1) | RA3ポートを使い ソフトウェア-UART で 9600bps半二重双方向シリアル通信を行う |
| (2) | 最小限の モニター機能 を組込む (RAMの表示/変更、User IDに設定値を保管 等) |
| (3) | LEDの明るさ調整に PWM機能 を使ってみる |
| (4) | User-ID領域 を不揮発メモリとして使ってみる (プログラムメモリが容量不足のため) |
|
下のサンプル動画の説明 |
| (1) | 背景のパソコン画面は、ターミナルソフトで PIC10F322と通信して
RAMの表示・変更・ダンプなどを行っています |
| (2) | ブレッドボード左側は USB-シリアルユニット(パソコンに接続) |
| (3) | ブレッドボード右側の PIC10F322を取り付けた自作のブレークアウトボード
USB-シリアルユニットの間のケーブルは、電源 2本(+5V, GND)と 信号 1本です
ダイオードと プルダウン用抵抗を USB-シリアルユニットの前に置いています |
|
| | | |
RA3で双方向通信 (十分使えそうです) |
| RA3は通常は入力ポートにしか使えませんので、(弱い)プルアップ機能を使います
出力「1」は「プルアップ」を ONに、出力「0」は「プルアップ」を OFFにします
但し、出力「0」は外部に「プルダウン」用の抵抗を入れる必要が有ります
内部プルアップの電流はバラつきが有りますので抵抗(R)は調整が必要です
|
|
|
[テスト回路(上)と コード(下)]
BTFSC LATA,0
GOTO WPUA3R ;Reset
WPUA3S ;Set
BSF LATA,0 ;Hi
BSF WPUA,3 ;Hi
GOTO WPUA3X
WPUA3R BCF LATA,0 ;Lo
BCF WPUA,3 ;Lo
WPUA3X |
|
|
|
| 黄色の波形は、26μS毎の割込で WPA3を ON/OFFさせた時の波形です
プルアップ・プルダウンの抵抗値が大きいので浮遊容量の影響が出て波形がなまっています
テストでは R=51kΩ、電源電圧=4.9Vの場合、出力波形(黄色)は約 0V/2.8Vでした
赤色の波形は、同じタイミングで RA0(LED負荷あり)に出力したパルス(約 0V/4.6V)です
|
|
| 目次へ |
| | | |
タイマ割込 |
| 割込周期・割込処理時間の測定結果 |
|
割込処理の先頭と末尾に測定パルス発生用の命令を追加して時間を測定してみました
割込周期は 26μS、割込処理時間は 3〜8μS位でした (黄:RA1、赤:RA2(Trigger))
|
|
|
PUSH BSF LATA,1 ;*** DEBUG
;
MOVWF W_WREG ;Save W reg.
SWAPF W_WREG,1
SWAPF STATUS,0 ;Get status
MOVWF W_STAT ;Save it
[割込処理]
PULL SWAPF W_STAT,0 ;Rest. status
MOVWF STATUS
SWAPF W_WREG,0 ;Rest. W reg.
;
BCF LATA,1 ;*** DEBUG
;
RETFIE |
|
|
| 目次へ |
|
| | | |
USB-Serialユニット |
| 簡易な接続では、USB-Serialユニットの入力側の特性に依存するので
手持ちの2種類のユニットで試してみました |
|
|
|
| USB-Serialユニット:秋月 FT234X (調整時に最初に使用したもの) |
|
|
赤:先頭の黄信号と同じ波形は
ハード接続のエコー信号
それに続く信号は PICの送信出力
USB-Serialユニットを介して
PCのターミナルソフトで読取れる
黄:PCのターミナルソフトから
打ち込んだ文字
赤:RA3(RXD) USB側切断 RA3(RXD) USB側接続 黄:TXD信号(USB-Serial 3.3V系)
|
|
| USB-Serialユニット:alie CP2102
(中華製の安価なもの) |
|
|
(注1)RXD信号の LEDは取り外し
波形は上段と同じ内容です
3.3V系の電圧が4.1V位ありましたが
問題なく読み取れます
赤:RA3(RXD) USB側切断 RA3(RXD) USB側接続 黄:TXD信号(USB-Serial 4.1V系)
|
|
|
(注1)
秋月 FT234Xの場合は、変換チップから直接信号が出ていますが
alie CP2102の場合は各信号ラインにLEDが接続されていますのでそのままでは動作しません
RXD信号に接続されている LED(又は直列抵抗)を取り外せば同様に動作ます
|
|
| 目次へ |
|
回路 Schematic(Circuit Diagram) | |
| | | |
下図が全てです |
|
左端は ICSP(In-Circuit Serial Programming)接続(6番ピンは省略)
中央は USBシリアルユニットとの接続回路
ダイオードは順方向電圧降下の小さいショットキ型を用います
右側はテスト基板(最上段の写真)の回路です CPU以外は PIC10F222 と同じです
(LEDの電流制限抵抗は、LEDの特性により適宜実験的に決めます)
|
|
| |
|
| 目次へ |
|
Name |
Download File |
Version |
Date |
Description |
| | | | |
|
T322UI | T322UI.zip | V00.72 | 2019/02/15 |
ユーザID 読み書きサンプル |
|
T322PF | T322PF.zip | V00.52 | 2019/02/15 |
プログラムメモリ 読み書きサンプル |
|
T322UI | T322UIM.zip | V00.72 | 2019/02/15 |
ユーザID 読み書きサンプル(最小構成) |
使い方・注意点 | (仕組みに付いては 別項 に独立させました) |
| | | | |
|
ソフトUART |
| (1)組込手順 |
| 初期化部 |
起動時に一度実行する初期化処理の部分に組込む
(RA3・TMR0・ワークエリアの初期化、割込許可などの処理が含まれます) |
| 割込処理 |
プログラムに組込み、エントリアドレスを 4番地にセットする
(割込が許可されていれば自動的に実行されます) |
| 呼出方法 |
1文字入力: CALL INEEE ;受信データを(W)に入れて戻る
1文字出力: CALL OUTEEE ;送信データを(W)に入れて CALLする
|
| (2)UARTとしての使用方法 |
| 受信手順 |
受信ステータスチェック (WTRSTS: TX RX control & status)
WTRSTS,RXBSY=1:受信中(RX Busy flag)
WTRSTS,RXDNF=1:受信完了(RX Done flag)
WTRSTS,RXOFE=1:受信エラー(RX Over run or Frameing Err)
受信完了なら(WTRSTS,RXDNF=1 & WTRSTS,RXOFE=0)
受信データレジスタから受信データを取り出す (WRXREG: RX data reg.)
|
| 送信手順 |
送信ステータスチェック (WTRSTS: TX RX control & status)
WTRSTS,TXBSY=1:送信中(TX Busy flag)
WTRSTS,TXDSF=1:送信完了(TX Done)/ 0:送信開始(TX Start)
送信完了(WTRSTS,TXDSF=1) していたら
送信データを送信レジスタ(WTXREG: TX data register) にセットして
送信開始(WTRSTS,TXDSF=0) する
|
| (3)注意点 |
|
1本の信号線で送受信する場合 半二重通信となります |
| |
ハード的にエコーバックされます(エコーバックを止める事は出来ません)
|
|
2本の信号線で送受信する場合 全二重通信が可能です |
| |
RA3 を送信側にする事も可能ですが、送信側には出力に設定できるポートに
割り当てることを推奨します
|
|
サンプルでは |
| |
半二重:受信と送信は同じポート(RA3)として1本の信号線で通信します
全二重:受信(RA3)と送信(RA2)に別々のポートを割り当てています
条件アセンブル(Conditional assembly)で、主要部分を切り替える様に
コーディングしています
半二重とする場合は、以下の様にコメントアウトする行を変えて下さい
;HALFDPLX EQU 0 ;Full duplex version
HALFDPLX EQU 1 ;Half duplex version
その他 RAMのアドレスなど、絶対アドレスで記述していますが
これは、Mコマンドなどで確認・変更し易くするためです
DB(アセンブラが割当)などにかえても構いません
|
|
| 目次へ |
|
| | | |
|
PICMON | (PIC-Monitor) | |
ピグモンでは無くピクモンです |
|
設定値の確認・変更をするために簡易なモニターを作ってみました
プログラムメモリ容量の制約が有るので機能は最小限です
モニターの使い勝手は、シンプルでコンパクトな
(MC6800用モニターの) MIKBUG に合わせています (MIKBUGの改造記はこちら)
(単なる筆者の好みです) 従って PICBUG モニターとも称します
|
組込コマンド | 内容・動作 |
| |
Memory examine and change
0x00-0x3F:Special Function Registers
0x40-0x7F:General Purpose Registers
0x78-0x7F:User ID Read/Write Buffer |
指定した番地の内容表示・変更
Special Function Registersも表示・変更できます
(SFRの変更は注意が必要です)
User IDへのアクセスはここを経由して行います
|
[動作]
*
*M
*M 7C
7C 3F
*M 7C
7C 3F 01
7D FF
*M 7C
7C 3F 01
7D FF.
7E 3F
*M 7C
7C 3F 01
7D FF.
7E 3F ?
*
| [操作説明]
(プロンプト)コマンド待ち
「M」を入力するとスペース出力後、参照番地入力待ち
番地「7C」を入力すると
入力された番地とその番地のデータ「3F」を表示
スペースを入力後変更するデータ「01」を入力する
データが変更された事を確認後、
次の番地「7D」とその番地のデータ「FF」を表示
変更しない場合は、スペース以外の文字を入力すると
次の番地「7E」とその番地のデータ「3F」を表示
「M」コマンドを抜けるには、スペースを入力後
16進数以外の文字を入力する
(16進数以外が入力された場合は)「?」表示後
プロンプトを表示してコマンド待ちになる
|
Read UserID / Write UserID
Buffer RAM($78-$7F) ←→ UserID |
UserIDの バッファRAMへの 読込みと書出し
UserIDへのアクセスは BufferRAM経由で行います |
[動作]
*W OK
*
*R OK
*
UserID RAM RAM
--DCBA98 76543210
(0x2000)←→(0x78) ( 0x79 )
(0x2001)←→(0x7A) ( 0x7B )
(0x2002)←→(0x7C) ( 0x7D )
(0x2003)←→(0x7E) ( 0x7F )
|
[操作説明]
「W」を入力するとバッファRAMの内容を UserID領域へ
書込んで 完了後「OK」を表示する
「R」を入力すると UserID領域を読み出してバッファRAMへ
書込んで 完了後「OK」を表示する
[注意]
UserIDの上位 6bit用のバッファRAM(78,7A,7C,7E番地)は
8bitであるが、その下位 6bitのみが使用されます
[例] 7C番地のデータを FFにして UserIDに書込み
しても読出したデータは 3Fとなる
|
Print RAM |
RAM(0x00-0x7F)の内容を16進表示する |
[動作]
*P
PR .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
00 00 C7 1A 1A 04 07 08 07 00 07 00 A2 00 00 08 00
10 79 00 FF 00 C0 12 00 80 C4 00 00 00 00 40 FE 00
20 04 00 FF 3F C0 00 00 00 00 00 01 00 00 00 00 00
30 16 00 40 12 02 83 00 C8 44 00 00 00 00 00 01 81
40 B1 02 50 50 10 A0 B9 00 70 04 10 20 04 84 02 04
50 36 C5 F6 89 89 39 00 00 8F 72 70 FA 39 54 D4 F1
60 31 42 55 31 7C 34 3D D2 24 97 12 36 4B D5 19 AA
70 04 A7 E9 E5 6D 48 5C 33 04 A7 0C 31 3F FF 3F FF
*
|
[操作説明]
「P」を入力すると
00〜7F番地の内容を 16進数表示する
|
|
注記
Program Flash Memory(以下 ) と User ID領域とはほぼ同等に扱えます
主な相違点は
(1)Program Flash への書込みはライトラッチを介して 16ワード単位で書込む
(2)UserID(4ワード) への書込みはライトラッチを介さずに 1ワードづつ書込む
(3)書込みのアンロックシーケンスや書込み前に消去が必要な点は同じ
PIC10F322 では、ただでさえ少ないメモリを使うのは勿体ないので User ID領域を使いました
小規模のシステムでは User ID領域の容量(14bit×4word)でも十分実用的に使えます
ここでは、 14bitを 6bitと 8bitに分けて 8個の設定値の保持に使いました
|
| | | |
ユーザプログラム組込時の対応方法 |
|
設定値のメンテナンス用にモニターを組み込んで置くのが便利ですが
少ないメモリを消費してしまうので、デモ部分はもちろん
メモリ不足の時は、モニターの「P」コマンドも外します
「M」コマンドだけでも設定値のメンテナンスは出来ます
|
| | | | | | |
| メモリ容量の目安 | ワード | (PIC10F322の全メモリ:512ワード) |
| | | | |
|
| デモ部・モニタを含むサンプル | 503 | | (ほとんど空きが無い) |
| LEDのPWM点灯デモ部容量 | 46 | | 不要 |
| LED(RA2)点滅デモ部容量 | 9 | | 不要 |
| モニタ Pコマンドの容量 | 34 | | 省略可能 |
| 英小文字大文字変換の容量 | 15 | | 省略可能 |
| | | | |
|
| モニタ最小構成の容量 | 約328 | | (空き:184ワード程度) |
| UARTエミュレータ部の容量 | 約133 | | (割込部:102、初期化部:31、空き:399) |
| | | |
起動方法の工夫 |
|
一般には、起動時にターゲットプログラムが起動する様にしておきます
モニターモードに移行する方法を工夫します
(1)文字処理を使わない場合 ターゲットをマルチタスク的に実行すれば
常にモニターモードを実行できます(例:このサンプルのLED表示)
(2)文字処理を使うが、入力しない文字コードが有る場合
例えば[Ctrl-C]でモニターモードとターゲットを切り替えるなど
(3)文字処理で全ての文字を使う場合
起動時に特定のポートの信号の値により起動するモードを決めるなど
|
【お礼 と お願い】 |
|
・ ホームページで情報公開している方々の貴重な体験を活用させて頂きました |
オリジナルがある場合は参照出来る様に場所を示し詳細は省いています |
・ 内容はありのままを記載していますが、間違いや誤解があるかもしれません |
試す場合は全てご自身の責任で行って下さい |
・ リンクは自由ですが、商用への写真・図の転載等全て禁止します |
|
ご意見、ご感想、間違い指摘 ..... 等は
掲示板(BBS) 又は
<old.and.ordinarygmail.com> へお願いします
|
―Sorry! Japanese only― |
Copyright (c)2000 Old-Ordinary Allrights resrved |
|
古風平凡 |
|
|