[新連載]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
前へ
次へ
ホームページトップへ戻る