So-net無料ブログ作成
検索選択

コイルとコネクタ [ディップメータ]

ディップメーター用にMiniイヤホンプラグを予定していました。

しかしコイル本体との太さの関係からはRCAプラグの方がよりベターでした。

ダイソー RCAピンコードビデオ用1m、 ホワイトボード用マーカー0.7mm5本入り

後ろ蓋を取って、中身を捨て、内面1段目の引っかかりをナイフで削り取りますと

上記RCAプラグの中身がピッタリでした。(パイプは43mmで切ってあります)

高い方の周波数が何処まで使えるか不明ですが、

内部バリコンをSWで切り離し、共振回路に直にクリップコードを付けると

中波ラジオの場合は、そのままの周波数で発振して計れました。

sIMG_0177.jpg

sIMG_0188.jpg

sIMG_0217.jpg

sIMG_0215.jpg

sIMG_0211.jpg

Pch-MESFET 3SK240 や 3SK101 などを予定しています。

http://www.shindengen.co.jp/product/semi/datasheet/mtd2038gj_w1002.pdf

http://www.datasheetarchive.com/indexdl/Scans-005/Scans-00117445.pdf

 

 

 

 

 


コメント(0) 

PIC セグメント表示 [MPU]

液晶表示器 LCDモジュール(8×2)[SC802A-3.3V]

WS000961.JPG

Pin NO. Symbol LEVEL Function
1 VSS 0V GND
2 VDD 3.3V Supply Power for logic
3 V0 - VLCD voltage adjustment pin
4 RS H/L Data or Instruction select.
5 R/W H/L Read or Write
6 E H,H→L Read /Write enable signal.
7~10 DB0~DB3 H/L Data BUS for 8-bit bus mode
11~14 DB4~DB7 H/L Data BUS for 8-bit or 4bit bus mode
15 BLA +5V Supply Power for LED light
16 BLK 0V Supply Power for LED light

今度はこれを使ってみたいです。

;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PICmicro PIC16F886. This file contains the      *
;   basic code building blocks to build upon.  As a project minimum   *
;   the 16F886.lkr file will also be required for this file to        *
;   correctly build. The .lkr files are located in the MPLAB          *
;   directory.                                                        *
;                                                                     *
;   If interrupts are not used all code presented between the         *
;   code section "INT_VECTOR and code section "MAIN" can be removed.  *
;   In addition the variable assignments for 'w_temp' and             *
;   'status_temp' can be removed.                                     *
;                                                                     *
;   If interrupts are used, as in this template file, the 16F886.lkr  *
;   file will need to be modified as follows: Remove the lines        *
;     CODEPAGE   NAME=vectors  START=0x0      END=0x4      PROTECTED  *
;   and                                                               *
;     SECTION    NAME=STARTUP  ROM=vectors                            *
;   and change the start address of the page0 section from 0x5 to 0x0 *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014).          *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:         9_7_segment.asm                                *
;    Date:      2008,03,22                                            *
;    File Version:   v1.0                                             *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************

;        LIST            P=PIC16F84A
;        INCLUDE         "P16F84A.INC"

    list        p=16f886    ; list directive to define processor
    #include    <p16f886.inc>    ; processor specific variable definitions
    
;    __CONFIG _EC_OSC & _WRT_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

;**********************************************************************
;ANSEL 188h ANS4 ANS3 ANS2 ANS1 ANS0
;ANSELH 189h ANS13 ANS12 ANS11 ANS10 ANS9 ANS8
 ;
 ; 8-Digit 9-Pin Charlieplexed AC LED ISR Sample Code
 ;   (14-bit core instructions)
 ;
 ; Vars - BITPOS (float bit & digit position)
 ;        BUFPTR (buffer pointer)
 ;        DIGIT0 (start of 8 byte display data buffer)
 ;               (bit 7=dp, bit 6=G...bit 0=A)
 ;
BITPOS equ 30h;(float bit & digit position)
BUFPTR equ 31h;(buffer pointer)
DIGIT0 equ 32h;(start of 8 byte display data buffer)
DIGIT1 equ 33h;(start of 8 byte display data buffer)
DIGIT2 equ 34h;(start of 8 byte display data buffer)
DIGIT3 equ 35h;(start of 8 byte display data buffer)
DIGIT4 equ 36h;(start of 8 byte display data buffer)
DIGIT5 equ 37h;(start of 8 byte display data buffer)
DIGIT6 equ 38h;(start of 8 byte display data buffer)
DIGIT7 equ 39h;(start of 8 byte display data buffer)
DIGIT8 equ 3Ah;(start of 8 byte display data buffer)
ANSEL equ 188h;   ANS4 ANS3 ANS2 ANS1 ANS0
;RA0 AN0
;RA1 AN1
;RA2 AN2
;RA3 AN3
;RA4 -
;RA5 AN4
;RA6 -
;RA7 -
ANSELH equ 189h; ANS13 ANS12 ANS11 ANS10 ANS9 ANS8
;RB0 AN12
;RB1 AN10
;RB2 AN8
;RB3 AN9
;RB4 AN11
;RB5 AN13
;RB6 -
;RB7 -
;ANSEL equ 188h; ANS7 ANS6 ANS5
;RE0 AN5
;RE1 AN6
;RE2 AN7
 ;------------------------------------------------------------
 ; Defain
 ;------------------------------------------------------------
 FLAG            EQU     0X20            ; SYSTEM FLAG 1=OVER

 GATE_TIME1      EQU     0X22            ;
 GATE_TIME2      EQU     0X23            ;
 GATE_TIME3      EQU     0X24            ;

 WAIT1           EQU     0X25            ;
 WAIT2           EQU     0X26            ;
 WAIT3           EQU     0X27            ;
 WAIT4           EQU     0X28            ;

 TMR0_H          EQU     0x30            ; COUNT VALUE (H)
 TMR0_M          EQU     0x31            ; COUNT VALUE (M)
 TMR0_L          EQU     0x32            ; COUNT VALUE (L)
 DIGIT8          EQU     0x33            ; x10000000 (16,777,215)
 DIGIT7          EQU     0x34            ; x1000000
 DIGIT6          EQU     0X35            ; x100000
 DIGIT5          EQU     0X36            ; x10000
 DIGIT4          EQU     0x37            ; x1000
 DIGIT3          EQU     0X38            ; x100
 DIGIT2          EQU     0X39            ; x10
 DIGIT1          EQU     0X3A            ; x1
 SRLC1           EQU     0x3B            ;
 SRWK1           EQU     0x3C            ;

 SEND_DATA_H     EQU     0X40            ; UPPER SIDE
 SEND_DATA_L     EQU     0X41            ; LOWER SIDE
 STR_ADDRES      EQU     0X42            ; STRING ADDRES
 STR_POS         EQU     0X43            ; STRING POINTER
 LCD_POS         EQU     0X44            ; LCD LOCATE

 W_SAVE          EQU     0X45            ;
 STATUS_SAVE     EQU     0X46            ;

 RS              EQU             2       ;RS
 E               EQU             3       ;E

 ;------------------------------------------------------------
 ; Power On vector
 ;------------------------------------------------------------
                 ORG     0x00
                 goto    main

 ;-----------------------------
 ; DISPLAY STRINGS
 ;-----------------------------
 STRING1         DT      " F-COUNTER V0.0 ",0
 STRING2         DT      "    YSD.2006    ",0
 STRING3         DT      "OV",0
 STRING4         DT      "  ",0
 STRING5         DT      "GATE 1.0s",0

 ;------------------------------------------------------------
 ; MAIN
 ;------------------------------------------------------------
 main
    goto    start
    org    4
start    org    5

 ;------------------------------
 ; Initializing PORTA/B,ADC,INT
 ;------------------------------

                 bsf     STATUS,RP0      ;

                 movlw   B'00111001'     ; SET PORTA I/O
                 movwf   TRISA

                 movlw   B'00000001'     ; SET PORTB I/O
                 movwf   TRISB

                 movlw   B'00101000'     ; B5:TOCKI-IN / B4:RA4 EDG H->L COUNT / B3:PRESCALE 1=OFF
                 movwf   OPTION_REG

                 movlw   B'10001110'     ; DIGITL4,3,2,1 AN0
                 movwf   ADCON1          ;

                 bcf     STATUS,RP0      ;

                 clrf    INTCON


;********************************
; メインプログラム
;********************************



    movlw    b'01010101'
    movwf    DIGIT0
    movlw    b'00110011'
    movwf    DIGIT1
    movlw    b'10101010'
    movwf    DIGIT2
    movlw    b'11001100'
    movwf    DIGIT3
    movlw    b'11110000'
    movwf    DIGIT4
    movlw    b'11110000'
    movwf    DIGIT5
    movlw    b'11000011'
    movwf    DIGIT6
    movlw    b'00111100'
    movwf    DIGIT7
    movlw    b'11111111'
    movwf    DIGIT8




    movlw    b'01100000'
    iorwf    STATUS,f    ;Bank 3 (RP<10> is set)     |B3
    movlw    0
    movwf    ANSEL        ;188h
    movwf    ANSELH        ;189h
    movlw    b'01100000'
    xorwf    STATUS,f    ;Bank 0 (RP<10> is clr)     |B3

init_    movlw    b'00000001'
    movwf    BITPOS
     movlw    DIGIT0
    movwf    BUFPTR

     movlw    b'11111110'
    bsf    STATUS,RP0    ;Bank 1 (RP1 is clr)     |B1
    movwf    TRISA        ;turn off display        
    bcf    STATUS,RP0    ;Bank 0 (RP1 is clr)     |B0


isrled    movlw    b'11111111'    ;PORT ALL INPUT          
    bsf    STATUS,RP0    ;Bank 1 (RP1 is clr)     |B1
    movwf    TRISB        ;turn off display        
 ;
    bcf    STATUS,RP0    ;Bank 0 (RP1 is clr)     |B0
    movf    BITPOS,W    ;example: b'00000001'    
    movwf    PORTB        ;new output pattern      
 ;
    bsf    PORTA,0        ;turn Hi 'float bit' off
    movf    BUFPTR,W    ;ptr to current digit    
    movwf    FSR        ;setup indirect address  
    movf    INDF,W        ;get digit segment data  
    andwf    BITPOS,W    ;and float/column bit    
    btfss    STATUS,Z    ;need the float bit?     
    bcf    PORTA,0        ;yes, 'float' bit on     
 ;
    iorwf    BITPOS,W    ;pickup the BITPOS bit   
    iorwf    INDF,W        ;get digit segment bits  
    xorlw    b'11111111'    ;invert all bits         
    bsf    STATUS,RP0    ;Bank 1 (RP1 is clr)     |B1
    movwf    TRISB        ;display new digit       
 ;
    bcf    STATUS,RP0    ;Bank 0 (RP1 is clr)     |B0
    movf    BITPOS,W    ;
    andlw    b'11111111'    ;   
    btfss    STATUS,Z    ;
    goto    isrnxt
    bsf    PORTA,0        ;turn Hi 'float digit' on

     movlw    b'00000001'    
    movwf    BITPOS        ;reset to b'00000001'    
     movlw    DIGIT0        ;get buffer address      
    movwf    BUFPTR        ;reset the pointer       
    goto    israll

isrnxt    incf    BUFPTR,f    ;increment buffer ptr    
    bcf    STATUS,C    ;clear carry bit         
    rlf    BITPOS,f    ;shift our digit bit     
    btfss    STATUS,C    ;all 8 digits scanned?   
    goto    israll        ;noEND, branch           
 ;
israll    goto    isrled        ;Repete

;bin to bcd
;
;8421 8421 8421  8421 8421 8421  8421 8421 8421

;268435456
;134217728 6718864 33554432 16777216

;8388608 4194304 2097152 1048576  
;524288 262144 131072 65536  

;32768 16384 8192 4096  
;2048 1024 512 256  

;128 64 32 16  
;8 4 2 1
;                                                          T 1 1 ADD
;XXXX.XXX0|000.0 000.0|000.0 000.0|000.0 000.0|000.0 000.0|000:0.0000|0000.0000|0000.0000|0000.0000

;**** メインループ *****

 ;------------------------------
 ; Initializing SYSTEM
 ;------------------------------
                 clrf    PORTA
                 clrf    PORTB
                 clrf    FLAG
                 call    LCD_INIT                ; Initialize LCD

                 movlw   0X00
                 call    LCD_SET_LOCATE          ; 表示開始位置を00にセット

                 movlw   STRING1
                 call    LCD_SEND_STR            ; タイトル表示1

                 movlw   0X40
                 call    LCD_SET_LOCATE          ; 表示開始位置を40にセット

                 movlw   STRING2
                 call    LCD_SEND_STR            ; タイトル表示2

                 movlw   D'10'                   ; タイトル表示ウェイト
                 movwf   WAIT4                   ;
 WAIT_LOOP2
                 call    WAIT100MS
                 decfsz  WAIT4,F                 ;
                 goto    WAIT_LOOP2

                 call    LCD_CLEAR               ;画面クリア

                 call    DISPLAY_INIT            ;周波数表示初期化
                 call    DISPLAY                 ;初期表示 周波数値

                 movlw   0x40                    ; LCD LOCATE ADDRES
                 call    LCD_SET_LOCATE
                 movlw   STRING5                 ; GATE 1S
                 call    LCD_SEND_STR
 ;------------------------------
 ; MAIN LOOP
 ; FLAG1 OVER
 ;------------------------------
 MAINLOOP        
                 bcf     FLAG,1          ; オーバーフラグクリア

                 call    MEASURE         ; 測定

                 call    DISP_OVER       ; オーバー表示

                 btfsc   FLAG,1          ; OVER Detect
                 goto    MAINLOOP

                 call    hex2dec24       ; HEX TO BCD 変換

                 call    dec2char        ; ASC変換

                 call    DISPLAY         ; 測定値の表示

                 goto    MAINLOOP

 ;-------------------------------
 ; FREQUENCY MEASURE 1Sec RANGE
 ;-------------------------------
 MEASURE
                 movlw   D'10'                   ; GATE TIME = 0.1S * 10 = 1Sec
                 movwf   GATE_TIME3

                 clrf    TMR0_M
                 clrf    TMR0_H
                 bcf     INTCON,TMR0IF           ; CLEAR TMR0IF
                 clrf    TMR0                    ; GATE OPEN

 MEAS2_LOOP
                 call    FREQ_MEAS               ; FREQ MEASRE
                 decfsz  GATE_TIME3,F
                 goto    MEAS2_LOOP
                 
                 movf    TMR0,W                  ; GATE CLOSE
                 movwf   TMR0_L

                 call    FREQ_MEAS_FINAL         ; カウンター最終チェック

                 return

 ;---------------------------------
 ; FREQUENCY MEASURE 0.1Sec Master
 ;---------------------------------
 FREQ_MEAS
                 movlw   D'21'                   ;21GATE TIME ADJ LOOP
                 movwf   GATE_TIME1
 MEAS_LOOP
                 decfsz  GATE_TIME1,F
                 goto    MEAS_LOOP

                 movlw   D'247'                  ;247
                 movwf   GATE_TIME1

 MEAS_LOOP1
                 movlw   D'126'                  ;126
                 movwf   GATE_TIME2
                 goto    $+1                     ;GATE TIME ADJ
                 goto    $+1                     ;GATE TIME ADJ

 MEAS_LOOP2
                 btfss   INTCON,TMR0IF           ;繰り上がりはあるか?
                 goto    NO_CARRY
                 bcf     INTCON,TMR0IF           ;CLEAR T0IF
                 movlw   0x01                    ;繰り上がりがある時
                 goto    MEAS_NEXT

 NO_CARRY        
                 nop
                 nop
                 movlw   0x00                    ;繰り上がりが無い時。

 MEAS_NEXT
                 addwf   TMR0_M,F                ; TMR0_M + 1
                 rlf     TMR0_M,W                ; TMR0_M_CARRY
                 andlw   0x01                    ; MASK
                 addwf   TMR0_H,F                ; TMR0_H + 1 上位カウンター繰り上がり
                 btfss   STATUS,C                ; オーバー検出
                 goto    MEAS_NEXT1

                 bsf     FLAG,1                  ; SET OVER
                 return  
         
 MEAS_NEXT1
                 decfsz  GATE_TIME2,F
                 goto    MEAS_LOOP2

                 decfsz  GATE_TIME1,F
                 goto    MEAS_LOOP1

                 return

 ;---------------------------------
 ; FREQUENCY MEASURE FINAL CHECK
 ;---------------------------------
 FREQ_MEAS_FINAL
                 btfss   INTCON,TMR0IF   ; TMR0 キャリーフラグ確認
                 return

                 movlw   0x01
                 addwf   TMR0_M,F        ; ミッドカウンター加算
                 btfss   STATUS,C        ;
                 return                  ; 繰り上がりがない場合は戻る    
                 movlw   0x01
                 addwf   TMR0_H,F        ;
                 btfsc   STATUS,C        ; 繰り上がりの場合はオーバーフローか?
                 bsf     FLAG,1          ; SET OVER
                 
                 return
                 
 ;------------------------------------------------------------
 ;HEX TO BCD CONVERTER (24bit)
 ;------------------------------------------------------------
 hex2dec24
                 movlw   SRLC1           ;
                 movwf   FSR
                 call    devide          ;         1 DIGIT
                 call    devide          ;        10 DIGIT
                 call    devide          ;       100 DIGIT
                 call    devide          ;     1,000 DIGIT
                 call    devide          ;    10,000 DIGIT
                 call    devide          ;   100,000 DIGIT
                 call    devide          ; 1,000,000 DIGIT
                 call    devide          ;10,000,000 DIGIT

                 return
 devide                                  ; DEV10
                 movlw   d'24'           ;
                 movwf   SRLC1
                 clrf    SRWK1
 devide0
                 bcf     STATUS,C        ; CARRY FLAG CLEAR
                 rlf     TMR0_L,1
                 rlf     TMR0_M,1
                 rlf     TMR0_H,1
                 rlf     SRWK1,1
                 movlw   b'11110110'
                 addwf   SRWK1,0
                 btfsc   STATUS,C
                 movwf   SRWK1
                 btfsc   STATUS,C
                 incf    TMR0_L,1
                 decfsz  SRLC1,1
                 goto    devide0
                 decf    FSR,1
                 movf    SRWK1,0
                 movwf   0h
                 return
 ;------------------------------------------------------------
 ; DEC TO ASC
 ;------------------------------------------------------------
 dec2char
                 movlw   0x30
                 addwf   DIGIT8,f

                 movlw   0x30
                 addwf   DIGIT7,f

                 movlw   0x30
                 addwf   DIGIT6,f

                 movlw   0x30
                 addwf   DIGIT5,f

                 movlw   0x30
                 addwf   DIGIT4,f

                 movlw   0x30
                 addwf   DIGIT3,f

                 movlw   0x30
                 addwf   DIGIT2,f

                 movlw   0x30
                 addwf   DIGIT1,f

                 return
 ;-----------------------------
 ; DISPLAY INIT
 ;-----------------------------
 DISPLAY_INIT
                 call    LCD_CLEAR
                 clrf    TMR0_L
                 clrf    TMR0_M
                 clrf    TMR0_H
                 clrf    TMR0

                 clrf    DIGIT1
                 clrf    DIGIT2
                 clrf    DIGIT3
                 clrf    DIGIT4
                 clrf    DIGIT5
                 clrf    DIGIT6
                 clrf    DIGIT7
                 clrf    DIGIT8
                 call    dec2char

                 return
 ;------------------------------------------------------------
 ; VALUE LCD DISPLAY 1SEC
 ;------------------------------------------------------------
 DISPLAY
                 movlw   0x04            ; LCD LOCATE ADDRES
                 call    LCD_SET_LOCATE

                 movf    DIGIT8,W
                 call    LCD_SEND_CHAR

                 movf    DIGIT7,W
                 call    LCD_SEND_CHAR

                 movlw   ','
                 call    LCD_SEND_CHAR

                 movf    DIGIT6,W
                 call    LCD_SEND_CHAR

                 movf    DIGIT5,W
                 call    LCD_SEND_CHAR

                 movf    DIGIT4,W
                 call    LCD_SEND_CHAR

                 movlw   ','
                 call    LCD_SEND_CHAR

                 movf    DIGIT3,W
                 call    LCD_SEND_CHAR

                 movf    DIGIT2,W
                 call    LCD_SEND_CHAR

                 movf    DIGIT1,W
                 call    LCD_SEND_CHAR

                 movlw   'H'
                 call    LCD_SEND_CHAR

                 movlw   'z'
                 call    LCD_SEND_CHAR

                 return

 ;------------------------------------------------------------
 ; DISPLAY OVER
 ;------------------------------------------------------------
 DISP_OVER
                 movlw   0x00            ; LCD LOCATE ADDRES
                 call    LCD_SET_LOCATE

                 movlw   STRING4

                 btfsc   FLAG,1          ;OVER Detect
                 movlw   STRING3         

                 call    LCD_SEND_STR
                 return

 ;-----------------------------
 ;Initialize LCD
 ;-----------------------------
 LCD_INIT
                 call    WAIT15MS        ;15mS WAIT

                 BCF     PORTB,RS        ;RS=0 COMMAND

                 movlw   B'00110000'     ;function set 8bit
                 call    SEND_DATA_4

                 call    WAIT5MS         ;5ms WAIT

                 movlw   B'00110000'     ;function set 8bit
                 call    SEND_DATA_4

                 call    WAIT5MS         ;5mS WAIT

                 movlw   B'00110000'     ;function set 8bit
                 call    SEND_DATA_4

                 movlw   B'00100000'     ;function set 4bit
                 call    SEND_DATA_4

                 movlw   B'00101000'     ;function set 4bit 2ROW
                 call    SEND_DATA_8
                 movlw   B'00001000'     ;DISPLAY OFF
                 call    SEND_DATA_8
                 movlw   B'00000001'     ;DISPLAY CLR
                 call    SEND_DATA_8

                 call    WAIT2MS         ;CLEAR BUSY

                 movlw   B'00000110'     ;Entry MODE SET
                 call    SEND_DATA_8

                 movlw   B'00001100'     ;DISPLAY ON CURSOR OFF
                 call    SEND_DATA_8
                 return

 ;-----------------------------
 ; CLEAR LCD
 ;-----------------------------
 LCD_CLEAR
                 movlw   B'00000001'     ; LCD CLEAR COMMAND
                 call    LCD_SEND_CMD
                 call    WAIT2MS
                 return
 ;-----------------------------
 ; SET LCD LOCATE
 ; 0x00 ROW1-LEFT
 ; 0x40 ROW2-LEFT
 ;-----------------------------
 LCD_SET_LOCATE
                 iorlw   B'10000000'     ; LOCATE ADDRES TO W
                 call    LCD_SEND_CMD    ;
                 return
 ;-----------------------------
 ; LCD STRING PUT  文字列の出力
 ;-----------------------------
 LCD_SEND_STR
                 movwf   STR_ADDRES      ;GET STRING ADDRES
                 movlw   0
                 movwf   STR_POS         ;INDEX COUNTER CLEAR
 STR_LOOP        
                 addwf   STR_ADDRES,W    ;ADDRES + INDEX -> W
                 call    GET_CHAR        ;GET CHAR
                 addlw   0               ;CHECK STRING END
                 btfsc   STATUS,Z        ;0=END
                 return
                 call    LCD_SEND_CHAR   ;SEND CHAR
                 incf    STR_POS,F       ;INDEX INC
                 movf    STR_POS,W
                 goto    STR_LOOP        ;
 GET_CHAR        
                 movwf   PCL             ;CHAR TO W
 ;-----------------------------
 ; LCD CHARACTER SEND
 ;-----------------------------
 LCD_SEND_CHAR
                 BSF     PORTB,RS        ;RS=1 (CHARACTER SEND MODE)
                 call    SEND_DATA_8
                 return
 ;-----------------------------
 ; LCD COMMAND SEND
 ;-----------------------------
 LCD_SEND_CMD    
                 BCF     PORTB,RS        ;RS=0 (COMMAND SEND MODE)
                 call    SEND_DATA_8
                 return
 ;-----------------------------
 ; 8BIT [UPPER 4BIT] SEND
 ;-----------------------------
 SEND_DATA_4
 ;UPPER 4BIT
                 movwf   SEND_DATA_H

                 movlw   0XF0    
                 andwf   SEND_DATA_H,F   ; SET UPPER 4BIT
                 movf    PORTB,W         ; READ PORT
                 andlw   0X0F
                 iorwf   SEND_DATA_H,W
                 movwf   PORTB           ; OUTPUT PORTB

                 BSF     PORTB,E         ; ENABLE SIGNAL ON
                 call    WAIT01MS
                 BCF     PORTB,E         ; ENABLE SIGNAL OFF
                 call    WAIT01MS
                 return
 ;-----------------------------
 ; 8BIT -> 4BIT X 2 SEND
 ; [UPPER] -> [LOWER]
 ;-----------------------------
 SEND_DATA_8
 ;UPPER 4BIT
                 movwf   SEND_DATA_H
                 movwf   SEND_DATA_L

                 movlw   0XF0    
                 andwf   SEND_DATA_H,F   ; SET UPPER 4BIT
                 movf    PORTB,W         ; READ PORT
                 andlw   0X0F
                 iorwf   SEND_DATA_H,W
                 movwf   PORTB           ; OUTPUT PORTB

                 BSF     PORTB,E         ; ENABLE SIGNAL ON
                 call    WAIT01MS
                 BCF     PORTB,E         ; ENABLE SIGNAL OFF
                 call    WAIT01MS
 ;LOW 4BIT
                 SWAPF   SEND_DATA_L,W   ; UPPER LOW SWAP -> W
                 movwf   SEND_DATA_L

                 movlw   0XF0    
                 andwf   SEND_DATA_L,F   ; SET LOW 4BIT
                 movf    PORTB,W         ; READ PORT
                 andlw   0X0F
                 iorwf   SEND_DATA_L,W
                 movwf   PORTB           ; OUTPUT PORTB

                 BSF     PORTB,E         ; ENABLE SIGNAL ON
                 call    WAIT01MS
                 BCF     PORTB,E         ; ENABLE SIGNAL OFF
                 call    WAIT01MS

                 return

 ;-----------------------------
 ; WAIT
 ;-----------------------------
 ;100mS WAIT
 WAIT100MS  
                 movlw   D'10'     ;100mS WAIT
                 movwf   WAIT3

 WLOOP3   
                 call    WAIT10MS
                 decfsz  WAIT3,F
                 goto    WLOOP3
                 return

 ;15mS WAIT
 WAIT15MS        
                 movlw   D'150'    ;15mS WAIT
                 movwf   WAIT2
                 goto    WLOOP2
 ;10mS WAIT
 WAIT10MS        
                 movlw   D'100'    ;10mS WAIT
                 movwf   WAIT2
                 goto    WLOOP2
 ;5mS WAIT
 WAIT5MS  
                 movlw   D'50'     ;5mS WAIT
                 movwf   WAIT2
                 goto    WLOOP2
 ;2mS WAIT
 WAIT2MS  
                 movlw   D'20'     ;2mS WAIT
                 movwf   WAIT2
                 goto    WLOOP2
 ;1mS WAIT
 WAIT1MS  
                 movlw   D'10'     ;1mS WAIT
                 movwf   WAIT2

 WLOOP2   
                 call    WAIT01MS
                 decfsz  WAIT2,F
                 goto    WLOOP2
                 return
 ;-----------------------------
 ; WAIT 0.1mS
 ;-----------------------------
 WAIT01MS
                 movlw   D'165'          ;0.1mS WAIT
                 movwf   WAIT1
 WLOOP1  
                 decfsz  WAIT1,F
                 goto    WLOOP1
                 return

                 END

    end


;*********************************************************************
;
;  7 Segment LED display 4 digit counter (Clock 4.19MHz)
;
        include 16f84.h

        .osc    hs
        .pwrt   on
        .wdt    off
        .protect off

countsw equ     rb.0            ; input port for count

        org     0ch

d1      ds      1               ; count data
d2      ds      1
d3      ds      1
d4      ds      1
sd      ds      1               ; segment data (0~9)
lc      ds      1               ; loop counter for wait


        org     0
        goto    start
        org     4
        goto    start

start:                          ; initialize
        bsf     3h,5            ; page 1

;               43210           ; port ra initialize
;               ioooo
        movlw   10000b
        movwf   85h

;               76543210        ; port rb initialize
;               oooooooi
        movlw   00000001b
        movwf   86h

        bcf     3h,5            ; page 0

        clrf    d1              ; clear count data
        clrf    d2
        clrf    d3
        clrf    d4

wpe:                            ; wait for positive edge
        call    disp
        btfss   countsw         ; if input=HIGH then addition
        goto    wpe             ; else wait for input becomes HIGH

        incf    d1,1            ; addition
        movlw   10
        subwf   d1,0
        btfss   3h,2
        goto    wne
        clrf    d1

        incf    d2,1
        movlw   10
        subwf   d2,0
        btfss   3h,2
        goto    wne
        clrf    d2

        incf    d3,1
        movlw   10
        subwf   d3,0
        btfss   3h,2
        goto    wne
        clrf    d3

        incf    d4,1
        movlw   10
        subwf   d4,0
        btfss   3h,2
        goto    wne
        clrf    d4

wne:                            ; wait for negative edge
        call    disp
        btfsc   countsw         ; if input=LOW then next
        goto    wne             ; else wait for input becomes LOW

        goto    wpe

;*********************************************************************
;       7 segment decoder
;
decode:
        bcf     3h,0            ; clear carry flag
        rlf     sd,1            ; 4-times
        rlf     sd,1
        movf    sd,0            ; copy sd to w
        addwf   pc,1            ; add to PC

       ; -- RB  76543210 -------
       ; - seg  fedcbag -------- 0 -> ON , 1 -> OFF
        movlw   00000010b       ; 0
        movwf   rb
        goto    dec10
        nop
        movlw   11100110b       ; 1
        movwf   rb
        goto    dec10
        nop
        movlw   10010000b       ; 2
        movwf   rb
        goto    dec10
        nop
        movlw   11000000b       ; 3
        movwf   rb
        goto    dec10
        nop
        movlw   01100100b       ; 4
        movwf   rb
        goto    dec10
        nop
        movlw   01001000b       ; 5
        movwf   rb
        goto    dec10
        nop
        movlw   00001100b       ; 6
        movwf   rb
        goto    dec10
        nop
        movlw   11100010b       ; 7
        movwf   rb
        goto    dec10
        nop
        movlw   00000000b       ; 8
        movwf   rb
        goto    dec10
        nop
        movlw   01100000b       ; 9
        movwf   rb
dec10:
        return

;*********************************************************************
;       Display all digit
;
disp:

                                ; Digit-4
        movlw   11111110b       ; blanking
        movwf   rb
        movlw   01110b          ; select digit
        movwf   ra
        movf    d4,0            ; set segment data
        movwf   sd
        call    decode          ; decode and output
        call    wait

                                ; Digit-3
        movlw   11111110b
        movwf   rb
        movlw   01101b
        movwf   ra
        movf    d3,0
        movwf   sd
        call    decode
        call    wait

                                ; Digit-2
        movlw   11111110b
        movwf   rb
        movlw   01011b
        movwf   ra
        movf    d2,0
        movwf   sd
        call    decode
        call    wait

                                ; Digit-1
        movlw   11111110b
        movwf   rb
        movlw   00111b
        movwf   ra
        movf    d1,0
        movwf   sd
        call    decode
        call    wait

        return

;*********************************************************************
;       wait for display 1 digit
;
;;      total cycles = ( iter - 1 ) * ( 1 + 2 ) + 1 + 1 + 2 + 2
;;                                     dec goto  mov mov dec ret
;;      this case is 195 cycles
;;      238.4ns * 4 * 195 = 186us ( at clock 4.19MHz )
;;                          ~~~~~
wait:
        movlw   64              ; # of iteration
        movwf   lc
wait10:
        decfsz  lc,1
        goto    wait10
        return

;*****************************************

ここから別プログラム

;                          ------   ------                              
;        <- RA2/AN2/VREF   |1    ---   18| RA1/AN1             ->       
;        <- RA3/AN3/CMP1   |2          17| RA0/AN0             <=       
;        => RA4/TOCKI/CMP2 |3          16| RA7/OSC1/CLKIN      <=       
; +5 VDC -> RA5/MCLR/VPP   |4          15| RA6/OSC2/CLKOUT     -- N/C   
;    GND -> VSS            |5 16F648a  14| VDD                 <- +5 VDC
;        <- RB0/INT        |6          13| RB7/T1OSI/PGD       ->       
;        <- RB1/RX/DT      |7          12| RB6/T1OSO/T1CKI/PGC ->       
;        <- RB2/TX/CK      |8          11| RB5                 ->       
;        <- RB3/CCP1       |9          10| RB4/PGM             ->       
;                          ---------------                              
; RA3 Reading SW & pulse,
; RA4 Frequency count input
; RB6 Reciprocal measurement input
;                              ------  -------                          
;  1 RE3/MCLR/VPP              | 1   --   28 | -- 28 RB7/ICSPDAT        
;  2 RA0/AN0/ULPWU/C12IN0-     | 2        27 |-- 28 RB6/ICSPCLK         
;  3 RA1/AN1/C12IN1-           | 3        26 |-- 28 RB5/AN13/T1G        
;  4 RA2/AN2/VREF-/CVREF/C2IN+ | 4        25 | -- 28 RB4/AN11/P1D       
;  5 RA3/AN3/VREF+/C1IN+       | 5        24 | -- 28 RB3/AN9/PGM/C12IN2-
;  6 RA4/T0CKI/C1OUT           | 6        23 | -- 28 RB2/AN8/P1B        
;  7 RA5/AN4/SS/C2OUT          | 7        22 | -- 28 RB1/AN10/P1C/C12IN3-
;  8 VSS GND                   | 8 16F886 21 | -- 28 RB0/AN12/INT       
;  9 RA7/OSC1/CLKIN            | 9        20 | -- 28 VDD                
; 10 RA6/OSC2/CLKOUT           |10        19 | -- 28 VSS                
; 11 RC0/T1OSO/T1CKI           |11        18 | -- 28 RC7/RX/DT          
; 12 RC1/T1OSI/CCP2            |12        17 | -- 28 RC6/TX/CK          
; 13 RC2/P1A/CCP1              |13        16 | -- 28 RC5/SDO            
; 14 RC3/SCK/SCL               |14        15 | -- 28 RC4/SDI/SDA        
;                              ---------------                          

   list      p=16F648A           ; list directive to define processor
    #include <p16F648A.inc>       ; processor specific variable definitions
    __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _EXTCLK_OSC
 ; 9-Digit 9-Pin Charlieplexed AC LED ISR Sample Code
 ;   (14-bit core instructions)
 ; Vars - BITPOS (float bit & digit position)
 ;        BUFPTR (buffer pointer)
 ;        DIGIT0 (start of 8 byte display data buffer)
 ;               (bit 7=dp, bit 6=G...bit 0=A)
 ;LEDMPX coment |B is bank
    org    20h
BITPOS    res    1
BUFPTR    res    1
DIGIT0    res    1
DIGIT1    res    1
DIGIT2    res    1
DIGIT3    res    1
DIGIT4    res    1
DIGIT5    res    1
DIGIT6    res    1
DIGIT7    res    1
DIGIT8    res    1
DIGIT9    res    1
WORK    res    1
SDWPA    res    1
SDWPB    res    1
SDWTA    res    1
SDWTB    res    1
;CLOCKFREQ    EQU    12.8        ;  12.8 MHz X-tal used
; dispdata
D0_  equ b'00111111'
D1_  equ b'00000110'
D2_  equ b'01011011'
D3_  equ b'01001111'
D4_  equ b'01100110'
D5_  equ b'01101101'
D6_  equ b'01111101'
D7_  equ b'00000111'
D8_  equ b'01111111'
D9_  equ b'01101111'
Dp_  equ b'10111111'
D0p_ equ b'10111111'
D1p_ equ b'10000110'
D2p_ equ b'11011011'
D3p_ equ b'11001111'
D4p_ equ b'11100110'
D5p_ equ b'11101101'
D6p_ equ b'11111101'
D7p_ equ b'10000111'
D8p_ equ b'11111111'
D9p_ equ b'11101111'
    org    0
    goto    start
    org    4
start    org    5
    goto init_
init_;
    movlw    D0_
    movwf    DIGIT0
    movlw    D1_
    movwf    DIGIT1
    movlw    D2_
    movwf    DIGIT2
    movlw    D3_
    movwf    DIGIT3
    movlw    D4_
    movwf    DIGIT4
    movlw    D5_
    movwf    DIGIT5
    movlw    D6_
    movwf    DIGIT6
    movlw    D7_
    movwf    DIGIT7
    movlw    D8_
    movwf    DIGIT8
    movlw    D9_
    movwf    DIGIT9
    movlw    b'00000111'    ;all DIGTAL
    movwf    CMCON        ;
    goto    isb9
isrled;
    movf    BUFPTR,W    ;Z,32~3A
    movwf    FSR          ;setup indirect address
;9dig Hi
    movf    BITPOS,W    ;Z,DigData '00000001'    digPOS
      bcf    SDWPA,0        ; ,DP9=0      Dig9    9dig Lo
    btfsc    STATUS,Z    ; ,DG9 ? 0 1        9dig ?=1
    bsf    SDWPA,0        ; ,DP9=1 | *        9dig Hi
;1,2,3,5,6,7,8dig Hi=Com
    xorwf    SDWPB,W        ; ,Old Com Data
    andlw    b'11110111'    ; ,Not Bit3
    xorwf    SDWPB,F        ; ,NeW Com Data
;4dig Hi
    bcf    SDWPA,1        ; ,DP4=0      Dig4    4dig Lo
    btfsc    BITPOS,3    ; ,PB3 ? 0 1        4dig ?=1
    bsf    SDWPA,1        ; ,DP4=1 | *         4dig Hi
;Fbit,9dig on
    andwf    INDF,W        ;Z,
    bsf    SDWTA,0        ; ,DT9=1      F&D9    Fbit,9dig off
    btfsc    STATUS,Z    ; ,Fbt ? 0 1        Fbit ?=0 on
    btfsc    SDWPA,0        ; ,DG9 ? | 0 1        9dig ?=1 on
    bcf    SDWTA,0        ; ,DT9=0 * | *        Fbit,9dig on
;Seg                ; ,       *
    movf    BITPOS,W    ;Z,pickup the BITPOS bit  |B0 * 00000001
    iorwf    INDF,W        ;Z,get digit segment bits |B0   00000110 00000111
    movwf    WORK        ;
;Dbit,4dig on
    bsf    SDWTA,1        ; ,DT4=1      F&D4    Dbit,4dig off
    btfsc    WORK,3        ; ,PB3 ? 0 1        Dbit,4dig ?=1
    bcf    SDWTA,1        ; ,DT4=0 | *  SegD    Dbit,4dig on
    comf    WORK,W        ;Z,     R~>W
        xorwf    SDWTB,W        ; ,Old Data
    andlw    b'11110111'    ; ,Not Bit3
        xorwf    SDWTB,F        ; ,NeW Data
    movf    SDWPA,W        ;
    movwf PORTA        ;display new digit
    movf    SDWPB,W        ;
    movwf PORTB        ;display new digit
    movf    SDWTA,W        ;
    bsf   STATUS,RP0    ;Bank 1 (RP1 is clr)     |B1
    movwf TRISA        ;display new digit
    bcf   STATUS,RP0    ;Bank 0 (RP1 is clr)     |B0
    movf    SDWTB,W        ;
    bsf   STATUS,RP0    ;Bank 1 (RP1 is clr)     |B1
    movwf TRISB        ;display new digit
    bcf   STATUS,RP0    ;Bank 0 (RP1 is clr)     |B0
    movf    BITPOS,W    ;DigData '00000001'Z
;                          ;STATUS,Z'xxxxx2xx'
    btfss    STATUS,Z    ;Z=          1 0
    goto     isbp         ;         | *@
isb9;                ;         |  |
    movlw     b'00000001'     ;Digitreset1 *  |
     movwf     BITPOS         ;LoDigit write  |
     movlw     DIGIT0         ;Segment Data   |
     movwf     BUFPTR         ;Pointa Write   |
    goto     israll         ;Next Flow      |
isbp;                ;            |
    incf     BUFPTR,f     ;DigitPointa +1 *
     bcf     STATUS,C     ;cl carry      *
    rlf     BITPOS,f     ;Shift Left      |
    goto     israll         ;Next Flow   | *@ |
;                ;            |
israll;                ;            |
    nop            ;            *
     goto     isrled
;next flow is on time & etc prosses
     end
    
    
     


コメント(0) 

PICとAVR セグメント表示 [種々雑感]

/*8ビットだけを使い*/
/*7SEG-小数点無し*/
/*任意の固定小数点*/
/*を表示する工夫*/

/*PIC16F648A*/
/*attiny2313*/

/*どちらでも同様の考えですが*/
/*PICの場合はRMW問題があるので*/
/*シャドーレジスタ上で計算して*/
/*ポートに出力する方法がお勧めです*/

/*AVR方はこの問題がありませんが*/
/*シリアルポートを使ってしまうと*/
/*書き込みなどがHVタイプを使う必要があります*/
/*出来ればISPを使わないようにして下さい*/


/*10MHz以上の高速カウンタにする場合は*/
/*PICのTMR0プリスケーラを使うと良いようです*/

/* PB0  seg_a,  1桁目の走査    a            */
/* PB1  seg_b,  2桁目の走査     ━          */
/* PB2  seg_c,  3桁目の走査   f┃ ┃b       */
/* PB3  seg_d,  4桁目の走査     ━g         */
/* PB4  seg_e,  5桁目の走査   e┃ ┃c       */
/* PB5  seg_f,  6桁目の走査     ━          */
/* PB6  seg_g,  7桁目の走査    d  *dot none */
/* PB7  float bit                           */

/*avr portb data=1 pullup=1*/
/*avr ddrb output=1*/
/*avr pinb data=1*/
/*avr pud Disable=1*/


const unsigned char segtb[] = { // セグメントデータテーブル正論理
 0x3F, 0x06, 0x5B, 0x4F, // 0,1,2,3
 0x66, 0x6D, 0x7D, 0x07, // 4,5,6,7
 0x7F, 0x6F, 0x77, 0x7C, // 8,9,A,b
 0x39, 0x5E, 0x79, 0x71, // C,d,E,F
 0x38, 0x76, 0x5C, 0x00} // L,H,o,off segtb 20
/*-------------*/
/*正論理 コード パターン*/
/*0011 1111-3F-0*/
/*0000 0110-06-1*/
/*0101 1011-5B-2*/
/*0100 1111-4F-3*/
/*0110 0110-66-4*/
/*0110 1101-6D-5*/
/*0111 1101-7D-6*/
/*0000 0111-07-7*/
/*0111 1111-7F-8*/
/*0110 1111-6F-9*/
/*0111 0111-77-A*/
/*0111 1100-7C-b*/
/*0011 1001-39-C*/
/*0101 1110-5E-d*/
/*0111 1001-79-E*/
/*0111 0001-71-F*/
/*0011 1000-38-L*/
/*0111 0110-76-H*/
/*0101 1100-5C-o*/
/*0000 0000-00- -off*/
/*-------------*/
const unsigned char degtb[] = { // デジットデータ テーブル正論理
 0x01, 0x02, 0x04, 0x08, // 0,1,2,3
 0x10, 0x20, 0x40, 0x80, // 4,5,6,7
 0x00                  } //degtb 8
/*-------------*/
/*桁位置桁-コード-桁*/
/*00000001-0-       1*/
/*00000010-1-       2*/
/*00000100-2-       3*/
/*00001000-3-       4*/
/*00010000-4-       5*/
/*00100000-5-       6*/
/*01000000-6-       7*/
/*10000000-7-       8*/
/*-------------*/
unsigned char bufp;      //データバッファーポインター
/*-------------*/
unsigned char dbuf[8] =  // 表示データバッファー
{0, 1, 2, 3, 4, 5, 6, 7} //dbuf 8
/*-------------*/
unsigned char degp;      //表示桁ポインター
/*-------------*/
unsigned char csdr;      //カソードセグメントL
/*-------------*/
unsigned char andr;      //アノードデジットH
/*-------------*/
bufp = 0;
degp = 1;

//csdr = (~((csdtr&degtr)(1<<PB7)|(csdtr)))|(degtr);//7seg PORTB 設定
//&で桁とセグメントの一致を見る、有ればPORTB7Hを足して逆転セグメントL、桁H
//degr = (csdr&~(degp));//degcom TRISB 出力設定L
//
/*avr portb data=1 pullup=1*/
/*avr ddrb output=1*/
/*avr pinb data=1*/
/*avr pud Disable=1*/


/*-------------*/
    while (1){
/*-------------*/
        
        DDRB  = 0x00;                                // オンセグメントのみ出力ポートに
        PORTB = 0x00;                                // 全桁OFF?
        
        dsdtr = dbuf[bufp];                    //データバッファからコード取り出し
        csdtr = segtb[dsdtr];                //コードをカソードセグメント変換
        egtr = degtb[bufp];                    //アノード、デジット位置
/*-------------*/
        if((csdtr & degtr) == 0x00){//8桁目はフロートビットがありません。
            csdtr &= 0x7f;                        // フロートビットL
        }else{
            csdtr |= 0x80;                        // フロートビットH
        }
/*-------------*/
        DDRB  =  csdtr | degtr;            // オンセグメントのみ出力ポートに
        PORTB = ~csdtr | degtr;            // 桁走査データと合成 セグメントと桁走査を出力
        degtr <<= 1;                                // 桁走査データ更新

/*-------------*/
        if(++dig_no > DIG_SIZE){        // 表示桁を更新
            bufp = 0;                                    // 表示桁初期値設定 桁走査データ初期設定
        }
/*-------------*/
        // 1msec遅延
        TCNT0 = 0x00;
        while( TCNT0 < T1MSEC );    // 8μsec*125=1msec待ち
/*-------------*/
    }

/*************************************/

;
;7segLED are eight containing a decimal point,
;This one requires more ports than that.
;Floating bits are devoted to the desired position.
;Specific action to avoid the port can be placed on all other bits are free.
;Copyleft by nonno
;

;ledmpx1
--
-- LEDMPX.jal
--;Design "nonno" is.
-- Author: nonno
-- [author's name], Copyright (c) YEAR..YEAR, all rights reserved.
-- Adapted-by: nonno [adapters' name, comma seperated]
-- Compiler: jalv2
--
-- This file is part of jallib (http://jallib.googlecode.com)
-- Released under the BSD license (http://www.opensource.org/licenses/bsd-license.php)
-- Sources:
-- Description: [describe what is the functional purpose of this lib]
-- Notes: [put here information not related to functional description]
-- [code start here...]
--                          ------   ------                              
--        <- RA2/AN2/VREF   |1    ---   18| RA1/AN1             ->       
--        <- RA3/AN3/CMP1   |2          17| RA0/AN0             <=       
--        => RA4/TOCKI/CMP2 |3          16| RA7/OSC1/CLKIN      <=       
-- +5 VDC -> RA5/MCLR/VPP   |4          15| RA6/OSC2/CLKOUT     -- N/C   
--    GND -> VSS            |5 16F628a  14| VDD                 <- +5 VDC
--        <- RB0/INT        |6          13| RB7/T1OSI/PGD       ->       
--        <- RB1/RX/DT      |7          12| RB6/T1OSO/T1CKI/PGC ->       
--        <- RB2/TX/CK      |8          11| RB5                 ->       
--        <- RB3/CCP1       |9          10| RB4/PGM             ->       
--                          ---------------                              
-- RA3 Reading SW & pulse,
-- RA4 Frequency count input
-- RB6 Reciprocal measurement input
--
I count it and input,

-- Version:
--
include 16f628a
;--
pragma target clock             10_000_000
pragma target OSC               EC_NOCLKOUT ;= 0x3                   -- ec
----OSCCON_IRCF = 0b_111
pragma target WDT               disabled       -- no watchdog
pragma target LVP               disabled       -- no low-voltage programming
--pragma target CCP1MUX         RB0            -- ccp1 pin on B0
--pragma        bootloader   long_start     -- for TinyBootloader

;@jallib section ccp
-- ccp setup
--var volatile bit pin_ccp1_direction is pin_b0_direction
--
--include delay
;Design "nonno" is.
;
;7segLED are eight containing a decimal point,
;This one requires more ports than that.
;Floating bits are devoted to the desired position.
;Specific action to avoid the port can be placed on all other bits are free.
;Copyleft by nonno
;
;12 -- decimal
;0x12 -- hexadecimal
;0b01 -- binary
;0q01 -- octal
;"a" -- ASCII
;ledmpx1

--pragma  data    0x20-0x6f,0xa0-0xef,0x120-0x14f

--var     volatile    byte    freg    =   0x20 ;
--const   volatile    byte    wreg    =   0x00 ;
--const   volatile    byte    dreg    =   0x01 ;
--const   volatile    byte    knum    =   0x01 ;
--const   volatile    byte    tnum    =   0x05 ;
--const   volatile    byte    bnum    =   0x06 ;
--
--var     volatile    byte    acontr  =   tmr1h
--var bit*7  a_data                             --make bit mask
--a_data = (acontr & 0x7f)

const   volatile    byte      digits = 0x30 ;
var     volatile    byte      bitpos = 0x30;(float bit & digit position)桁位置ポインタ
var     volatile    byte      bufptr = 0x31;(buffer pointer)表示セグメントポインタ
var     volatile    byte      digit0 = 0x32;(1 of 8bit)1桁目表示セグメント
var     volatile    byte      digit1 = 0x33;(2 of 8bit)
var     volatile    byte      digit2 = 0x34;(3 of 8bit)
var     volatile    byte      digit3 = 0x35;(4 of 8bit)
var     volatile    byte      digit4 = 0x36;(5 of 8bit)
var     volatile    byte      digit5 = 0x37;(6 of 8bit)
var     volatile    byte      digit6 = 0x38;(7 of 8bit)
var     volatile    byte      digit7 = 0x39;(8 of 8bit)
var     volatile    byte      digit8 = 0x3a;(9 of 8bit)9桁目表示セグメント
var     volatile    byte      pparef = 0x70;porta.0 reprace  3bでも良い、フローティングビットリプレース(補テン)
;
--    list    p=16f628a
--    radix dec
--    include "p16f628a.inc"
;
;12 -- decimal
;0x12 -- hexadecimal
;0b01 -- binary
;0q01 -- octal
;"a" -- ascii
;

assembler
 local     kstar_s,interrupt,a_init1,s_init1,isrled,isrnxt,n9dig,israll
;start,interrupt
;                org     0x0000
;kstart_s:
                goto    a_init1
;                org     0x0004
interrupt:
                goto    isrled
a_init1:
;assembler
; local     s_init1,isrled,isrnxt,n9dig,israll
s_init1:           ;初期設定
 movlw 0b11111111  ;all hi
 movwf pparef      ;porta input
 bsf status,_rp0    ;bank 1 (rp1 is clr) |b1
 movwf trisb       ;portb input
 movwf trisa       ;porta input
 bcf status,_rp0    ;bank 0 (rp1 is clr) |b0
 goto isrled   ;1digit start  最初の行程へ
isrled:
 movf bufptr,w     ;32~3a             z  桁ポインタを
 movwf fsr         ;indirect pointa  間接指定に
 movf bitpos,w     ;digdata '00000001'z  桁位置はフローティングビットでもある
 movwf portb       ;segdata 'pgfedcbx'  桁データはh
                   ;dign,z=n /n       ;status,z'xxxxxzxx'
 bsf pparef,0      ;dig9=1
 btfsc status,_z   ;if dign=  1  0  フローティング桁か
 bcf pparef,0      ;dig9=0    0  |  フローティングビットリプレース(補テン)に保存
 movf pparef,w     ;digit9  '00000001'z  桁か
 movwf porta       ;digit9 out  porta,0  桁出力に
                   ;digdata '00000001'z
 andwf indf,w      ;segdata 'pgfedcba'z  桁が使用する位置のセグメント
                   ;flotbit,z=f /f   
                   ;status,z'xxxxxfxx'  をフローティングビットに回す
 bsf status,_rp0    ;bank 1 (rp1 is clr) |b1  バンク変更はこの付近に集める
 bsf trisa,0       ;dark=1
 btfss status,_z    ;if segf=    0 1  フローティングセグメントか
 btfsc pparef,0    ;if dign=  1 * | 0  フローティング桁か
 bcf trisa,0       ;bright=0  0   0 |  フローティングビットリプレース(補テン)に保存
                   ;ptaref  '1111111x'
 movf bitpos,w     ;digdata '00000001'z  桁か
 iorwf indf,w      ;segdata 'pgfedcba'z  セグメントが有れば
 xorlw 0b11111111  ;trisb   'oooooooi'z  逆転して
 movwf trisb       ;segment&digit out  trisb  方向出力に
 bcf status,_rp0    ;bank 0 (rp1 is clr) |b0
 movf bitpos,w     ;digdata '00000001'z  9桁目の検査
                   ;status,z'xxxxx2xx'
 btfss status,_z    ;z2 to nxt,nz0 to jmp
 goto isrnxt       ;|        
; goto n9dig         ;|         |

                   ;|         |
n9dig:;            ;v         |
 movlw 0b00000001  ;*         |  1桁目に戻す
 movwf bitpos      ;digit  top|  ポインタ戻す
 movlw digits      ;          |
 movwf bufptr      ;pointa top|
 goto israll       ;          |
;                  ;          |

isrnxt:            ;          v
 incf bufptr,f     ;z         *  ポインターを+1
 bcf status,_c      ;status,z'xxxxxxx0'
 rlf bitpos,f      ;digdata '00000010'c  桁を+1
 goto israll       ;

israll:
;                  ;next flow is on time & etc prosses  この間の処理が1桁分点灯時間
 nop
 goto isrled

end assembler

forever loop
end loop

; end
 
 


コメント(0) 

コイルとラムダダイオード [ラムダダイオード]

表題のコイルはラジオの修理のための試し巻きです。
昔のコイルは巻き枠が無くても良いハネカム巻きで多層に巻いてかつ、寄生容量を下げる工夫があります。
(調べてみるとハネカム巻きはそんなにも寄生容量が下がらず、かえって巻き枠を使っての分割巻きの方がよいようでした)

元のコイルは下側から1次側8.2mH(既に切れていった載せ推定)
33.4m 絹巻き外径0.15のエナメル単線0.1mm を675回(推定)
2段目 100回 直列 3段目75回 両方で8.3m 絹巻き外径0.2mm0.5φ5本撚りリッツ線 の同調コイルでした。
後で判って残念、2段目3段目は解かずに、1段目だけまき直せば良かったのでした。
しかし空芯は機械がないと675回も巻けないのが難点で、
他の工夫を考えています。

ラムダ(FET)ダイオードは高い周波数には向かないようですが、
並列数をSWで切り替え、並列可変抵抗で、負性抵抗とを変えて
共振回路損失に見合う、負性抵抗最適点を変化できます。
バリコンが1個で済み、SW切り替えでや容量を変化させる選択肢があります。
(100MHを越えるという報告もあります)
WS000943.JPG
始めはGND側に付け、プラス電源側からチョークで電圧供給しますが、チョークの分布容量による分割共振が出るので、
半導体チョークを考察していました、
しかし2SAタイプは種類が限られ周波数特性や定電流性が得られず、
困っていました。
(高抵抗で電圧差を無くするようにキャパシタで積分しながら導通度を変え低電流域を使う半導体チョークが最良のようです)
WS000942.JPG
チョット見方を変えラムダダイオードをプラス側に配置して
半導体チョークをGND側に持ってくるとトランジスタ
選択範囲が大幅に増え、もっと高性能になるのではと気づき
TRの選定中です。

WS000941.JPGこれを見ますとトランジスタでも負性抵抗になるようですが、

LTSpiceでシミュレートしてみますときれいな波形にはなりません。

PchFETは 2N4342 は見つけられず RF Pch FET ほとんど全滅で

FETとトランジスタの組み合わせ を考えていました。

Web検索するとなんと同じ回路がありました。

www.zen22142.zen.co.uk/Theory/neg_resistance/negres.htm

WS000947.JPG

シミュレータでは高い周波数にも対応できています。

7.5k+75kをVRにした方がよいかも・・

それと 便利なページを見つけました。

www2.renesas.com/microwave/ja/cross/marking.html

 

 

 

https://blog.so-net.ne.jp/MyPage/blog/article/edit/input?id=46902034

 


コメント(0) 

ミシンボビンコイルのインダクタンス [コイル]

5mm巾X21φのミシン用ボビンに2EUW-0.22φ(ウレタン被覆電線)を

成るだけ整列しないように振りながら巻き込んでみました。

ADEのLCRメータで測ってみますと、2.33mHの値を示しました。

2段にしますと4倍くらいのインダクタンスに成りそうです。sIMG_0144.jpg

約2週間で 注文していたリッツ線が来ました。

sIMG_0135.jpg

8本44AWGと言う 日本ではお目に掛からない品でした。

(やく$13)

 


コメント(6) 

TQ-77 用の回路を設計してみました。 [半田鏝]

PX-366と同じサイズで取り付けることが出来るんですが、

ヒーターの分離の仕方が違うため、コモン側を統一、

それにはフォトカプラ(トライアック型) で極性を反転分離しなければ成りません。

回路の動作実験をして回路図の何カ所かを変更しました。

WS000917.JPG


コメント(0) 

発振回路研究 [ラムダダイオード]

ラムダダイオード、FETラムダダイオードが入手できたので発振回路を試してみます。

直列型で始めたのですが、ラムダダイオードは発振しにくく並列にしたりして負性抵抗を大きくせねば成りませんでした。

FETラムダの場合は電圧調節で周波数が大きく変わり、負性抵抗の非直線性が大きく影響するようです。

 

今度は並列型を試しました。

電圧を調節できる点から2種のインダクタを通してラムダダイオードをバイアスし、GNDに接続します。

インダクタとラムダの接続点から大きめのコンデンサで共振回路に接続しますと、

発振できる電圧範囲が広くなり、電圧を換えても周波数の変化が少なくなりました。

ラムダダイオードも1個で十分発振しました。

(FETラムダはまだ試していません)

追記

わーい、6月に入手して、(オークションでバリキャップとして出ていた)

使ってみようと身近においていたら、 行方不明になってしまっていた MA520 が出てきました。

「rlc」さんの カーブトレーサのデータ を見させて頂きまして

MA520 270uA 1.3~3.2v 

MA522-R 75uA 1.5~3.5v

発振回路用には MA520 の方が 電流が大きい分 向いていそうです。

追記、周波数カウンタを省いた回路図を書きました。

WS000902.JPG

 

 

 

 


コメント(0) 
メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。