方形波ジェネレータの作成

(2017.5.8作成)
トランジスタアンプを作ってみたものの、周波数特性が真空管式よりは伸びているでしょうがPC測定器では測れませんので、方形波で簡易に様子見しようかと思い方形波ジェネレータを作ってみました。
方形波ジェネレータ、色々方法がありそうですが一寸の様子見が目的なので精確なことより簡単な仕掛けで100/1K/10KHzが出せるのが第一。タイマーIC(555)も考えましたが、マイコンの方が簡単かと。ルネサス3664ではちと大袈裟なのでPIC(12F509)で作ってみました。久々に使いましたがPICのアセンブラ(ハード命令)、一般的なマイコンとは異なっているので少々疲れました。

色々あって、後日改修しました。
100Hz、出力自体がサグになっていて、...、結局マンガン乾電池を使用していたのが原因と判明。
その他、エミッターフォロアよりエミッタ接地1段の立ち下/上がりが若干いいかな、となりました。

≪回路

≪基板図≫

≪プログラムリスト≫

MPASM  5.34                        SAMPLE.ASM   6-20-2017  10:36:27         PAGE  1

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001                 LIST    P=12F509,ST=OFF
                      00002
                      00003                 INCLUDE P12F509.INC
                      00001         LIST
                      00002 ; P12F509.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.
                      00115         LIST
                      00004                 ERRORLEVEL  1
                      00005
0FFF   0FEA           00006                 __CONFIG    _MCLRE_OFF & _CP_OFF &_WDT_OFF & _IntRC_OSC
0400   000F 000F 000F 00007                 __IDLOCS    H'FFFF'
       000F
                      00008 ;
  00000007            00009 LCTU    EQU             0x07
  00000008            00010 LCTL    EQU             0x08
  00000009            00011 LCT0U   EQU             0x09
  0000000A            00012 LCT0L   EQU             0x0A
  0000000B            00013 LCTK    EQU             0x0B
  0000000C            00014 PCCTU   EQU             0x0C
  0000000D            00015 PCCTL   EQU             0x0D
                      00016 ;
  00000001            00017 LC100U  EQU             d'1'                    ;loop ct(up) for 100Hz out
  0000003B            00018 LC100L  EQU             d'59'                   ;loop ct(lw) for 100Hz out
  00000000            00019 LC1KU   EQU             d'0'                    ;loop ct(up) for 1KHz out
  0000001F            00020 LC1KL   EQU             d'31'                   ;loop ct(lw) for 1KHz out
  00000000            00021 LC10KU  EQU             d'0'                    ;loop ct(up) for 10KHz out
  00000003            00022 LC10KL  EQU             d'3'                    ;loop ct(lw) for 10KHz out
  00000050            00023 PCCTK   EQU             d'80'                   ;skip key chattering
                      00024 ;
  00000000            00025 CLKUP   EQU             0                               ;decrement osc ct
  00000001            00026 CLKDW   EQU             1                               ;increment osc ct
  00000003            00027 CLKCHG  EQU             3                               ;change ocs 1K, 10K, 100, 1K, ...
                      00028 ;
  00000020            00029 BOSC    EQU             0x20
                      00030 ;
0000                  00031                 ORG             0x0000
0000   0A05           00032                 goto    START
                      00033 ;
0005                  00034                 ORG             0x0005
0005   0CBF           00035 START   movlw   0xBF
0006   0002           00036                 option
0007   006C           00037                 clrf    PCCTU
0008   006D           00038                 clrf    PCCTL
0009   0C01           00039                 movlw   1
000A   002B           00040                 movwf   LCTK
000B   0C00           00041                 movlw   LC1KU
000C   0027           00042                 movwf   LCTU
000D   0029           00043                 movwf   LCT0U
000E   0C1F           00044                 movlw   LC1KL
000F   0028           00045                 movwf   LCTL
0010   002A           00046                 movwf   LCT0L
0011   0CDF           00047                 movlw   0xDF
0012   0006           00048                 tris    6                               ;ot GPIO5 only
                      00049 ;
MPASM  5.34                        SAMPLE.ASM   6-20-2017  10:36:27         PAGE  2

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00050 ;
0013   02E8           00051 loop10  decfsz  LCTL,F
0014   0A20           00052                 goto    loop50
0015   0227           00053                 movf    LCTU,F
0016   0643           00054                 BTFSC   STATUS,Z
0017   0A1A           00055                 goto    loop12
0018   00E7           00056                 decf    LCTU,F
0019   0A20           00057                 goto    loop50
                      00058 ;
001A   0209           00059 loop12  movf    LCT0U,W
001B   0027           00060                 movwf   LCTU
001C   020A           00061                 movf    LCT0L,W
001D   0028           00062                 movwf   LCTL
001E   0C20           00063                 movlw   BOSC
001F   01A6           00064                 xorwf   GPIO,F
                      00065 ;
0020   022C           00066 loop50  movf    PCCTU,F
0021   0643           00067                 btfsc   STATUS,Z
0022   0A27           00068                 goto    loop52
0023   00ED           00069                 decf    PCCTL,F
0024   0643           00070                 btfsc   STATUS,Z
0025   00EC           00071                 decf    PCCTU,F
0026   0A54           00072                 goto    loop99
                      00073 ;
0027   0706           00074 loop52  btfss   GPIO,CLKUP
0028   0A4A           00075                 goto    loop60
0029   0726           00076                 btfss   GPIO,CLKDW
002A   0A4F           00077                 goto    loop70
002B   0666           00078                 btfsc   GPIO,CLKCHG
002C   0A54           00079                 goto    loop99
                      00080 ;
002D   022B           00081                 movf    LCTK,F
002E   0743           00082                 btfss   STATUS,Z
002F   0A39           00083                 goto    loop53
0030   0C02           00084                 movlw   2
0031   002B           00085                 movwf   LCTK
0032   0C01           00086                 movlw   LC100U
0033   0027           00087                 movwf   LCTU
0034   0029           00088                 movwf   LCT0U
0035   0C3B           00089                 movlw   LC100L
0036   0028           00090                 movwf   LCTL
0037   002A           00091                 movwf   LCT0L
0038   0A52           00092                 goto    loop90
                      00093 ;
0039   00EB           00094 loop53  decf    LCTK,F
003A   0743           00095                 btfss   STATUS,Z
003B   0A43           00096                 goto    loop54
003C   0C00           00097                 movlw   LC10KU
003D   0027           00098                 movwf   LCTU
003E   0029           00099                 movwf   LCT0U
003F   0C03           00100                 movlw   LC10KL
0040   0028           00101                 movwf   LCTL
0041   002A           00102                 movwf   LCT0L


MPASM  5.34                        SAMPLE.ASM   6-20-2017  10:36:27         PAGE  3

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0042   0A52           00103                 goto    loop90
                      00104 ;
0043   0C00           00105 loop54  movlw   LC1KU
0044   0027           00106                 movwf   LCTU
0045   0029           00107                 movwf   LCT0U
0046   0C1F           00108                 movlw   LC1KL
0047   0028           00109                 movwf   LCTL
0048   002A           00110                 movwf   LCT0L
0049   0A52           00111                 goto    loop90
                      00112 ;
004A   022A           00113 loop60  movf    LCT0L,F
004B   0643           00114                 btfsc   STATUS,Z
004C   00E9           00115                 decf    LCT0U,F
004D   00EA           00116                 decf    LCT0L,F
004E   0A52           00117                 goto    loop90
                      00118 ;
004F   02AA           00119 loop70  incf    LCT0L,F
0050   0643           00120                 btfsc   STATUS,Z
0051   02A9           00121                 incf    LCT0U,F
                      00122 ;
0052   0C50           00123 loop90  movlw   PCCTK
0053   002C           00124                 movwf   PCCTU
                      00125 ;
0054   0A13           00126 loop99  goto    loop10
                      00127 ;
                      00128                 END


MEMORY USAGE MAP ('X' = Used,  '-' = Unused)

0000 : X----XXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXX----------- ---------------- ----------------
0400 : XXXX------------ ---------------- ---------------- ----------------
0FC0 : ---------------- ---------------- ---------------- ---------------X

All other memory blocks unused.

Program Memory Words Used:    81
Program Memory Words Free:   943


Errors   :     0
Warnings :     0 reported,     0 suppressed
Messages :     0 reported,     0 suppressed

カウンターとプログラムループで出力ポートの1/0を切り替えるだけです。入力ポートで100/1KHz/10KHzの切替とカウンターの増減(周波数の微調整)を行います。

これで先日作ったトランジスタアンプを動かしましたが、100Hzで若干のサグが見えた他は、入力との差は何も(オーバーシュートなど)現れませんでした。エミッターフォロア出力なので、10KHzでの立ち下がりが元波形から若干甘くなってはいますが。

次からは、PCで測れない高域の周波数特性が幾らかは覗えそうです。

以前に作ったトランジスタアンプ(エミッタ接地1段+バッファ)の波形を観測しました。
使用したUSBオシロは、OWON VDS2062。これのPCソフトはウインドウのリサイズが出来ないので、小型ノートPCでは全体が表示できなくなります(最新ソフトでは改善されてるかもしれません)。

赤:入力信号波形
黄:出力信号波形


100Hzでは、トランジスタアンプの入力インピーダンスが小さいので、既に入力端子(ジェネレータ出力)の信号にサグが出てしまっています。ただ、アンプの出力にコンデンサが入っているので、若干サグが悪化しています。入力インピーダンスが高い場合は、



まあ、ちゃんとした波形で出力できています(最初に使用していたマンガン乾電池では、電源電圧変動でサグになっていました)。