[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第38回]
●ロジアナ
前回からの続きです。
前回は、電源ONとリセットのときだけ7セグメントLED表示が正しく行なわれず、そしてその原因は推測ですが、PIC16F57はリセットまたは電源ON時の立ち上がりが遅くて、Z80が起動時の早い時点で実行する7セグメントLEDのクリアのためのOUT命令を受け取れないのではないか、と書きました。
もしそうならば、ND80Zモニタプログラムの先頭に一定の時間待ちルーチンを置くことでこの問題は解決するはずです、とも書きました。
本当にそうなのか、それとも他に原因があるのか、それを確かめるために、何回か紹介しております「カメレオンロジアナ」を使ってみました。
PROBE08がRESET信号です。

トリガ信号としては普通はPROBE00を使うところですが、そうではないのは、色々あれこれ測定する中でのひとつのテストとして行なったためです。
下はPIC16F57のプログラムがスタートして約9μS後と考えられる波形です。

PROBE00がRB7、PROBE01がRB6、PROBE02がRB5、PROBE04がRB4です。
それだけでは何もわかりませんので、下にPIC16F57のプログラムリストを示します。
上のロジアナチャートの16940μSのところは下のプログラムリストではdatareadのところです。
PIC16F57のクロックは12MHzです。
PIC16F57の命令は4クロック(GOTOなど一部の命令は8クロック)で実行されます。
それをもとに計算するとdatareadのところはstartから約9μS後になります。
ところが上に書きましたようにロジアナチャートではそこはリセットから16940μS(約17mS)後になっています。
やはりPIC16F57はリセットしてから実際にプログラムが実行を開始するまでに17mSほどかかるということが実際に確かめられました。
●PIC16F57のプログラムリスト
;;; 7seg LED disp for ND80ZUS/SM
;18/4/9 4/11 4/12 4/13
;from 7seg2j
;
; 16f57
; internal 12MHz
#include <p16f5x.inc>
__CONFIG _CP_OFF & _WDT_ON & _HS_OSC
;
cf=0
zf=2
f=1
w=0
;
ledcntr equ 0a
tcn1 equ 0b
indata equ 0c
tcn0 equ 0d
;
;digit0 to digit7 are 10 to 17
;
org 00
;
start
movlw 0;a0-a3 out
tris PORTA
bsf PORTA,3
movlw 1f;b7-b5 out b4-b0 in
tris PORTB
bsf PORTB,7;
movlw 0
tris PORTC;rc out
;
;start
movlw 10
movwf ledcntr
loop
clrwdt
;leddisp
movf ledcntr,w
movwf PORTA
movwf FSR
movf INDF,w
movwf PORTC
incf ledcntr,f
btfss ledcntr,3
goto t1ms
movlw 10
movwf ledcntr
;
;1ms wait
t1ms
movlw 2
movwf tcn0
t1ms1
clrf tcn1
t1ms2
clrwdt;1
btfss PORTB,4;data ready? 2
goto dataread;yes
t1ms3
decfsz tcn1,f;1
goto t1ms2;2---6/3*256=0.5ms
decfsz tcn0,f
goto t1ms1
goto loop
;datain
dataread
bsf PORTB,5;bit4-7 read
bcf PORTB,6
bcf PORTB,7;read
nop
movf PORTB,w
movwf indata
rlf indata,f
rlf indata,f
rlf indata,f
rlf indata,w
andlw 0f0
movwf indata
bcf PORTB,5;bit 0-3 read
nop
movf PORTB,w
andlw 0f
iorwf indata,f
bsf PORTB,6
nop
movf PORTB,w
bsf PORTB,7;read end
andlw 07;
iorlw 10
movwf FSR
movf indata,w
movwf INDF;---- 22/3=7us
goto t1ms3
;
end
;
|
●EPM7128SLC84+PIC16F57 7SEGMENT/5X5キー回路(部分)
PIC16F57のプログラムリストだけでは情報不足ですから、回路図もお見せします。
全体ではなくて都合で一部はカットしてあります。

上のロジアナを使った検証で、PIC16F57はリセットからプログラムが実際にスタートするまでに約17mSかかるということがわかりました。
せっかくプログラムリストと回路図もお見せしたことですので、ことのついでということで、次回はPIC16F57のプログラムなどについて書くつもりです。
CPLD入門![第38回]
2019.4.24upload
前へ
次へ
ホームページトップへ戻る