2019.4.24
前へ
次へ
ホームページトップへ戻る

[新連載]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

前へ
次へ
ホームページトップへ戻る