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

割り込みが?なソース [jalv2_PIC]

こんにちは 書くべき所を間違って済みません。

156 end procedure  -- ############# this is err ここをコメントアウトすると、

エラーはなくなりますが、思う様には動作しません。

174 --  _timend_isr() -- is set

ここの部分が良く判りません。

-- --------------------------------------------------------------------------
-- Title: Test program for custom chars on lcd_hd44780.
-- Author: Joep Suijs, Copyright (c) 2011-2011, all rights reserved.
-- Adapted-by:
-- Compiler: >=2.4m
-- Revision: $Revision: 2811 $
--
-- This file is part of jallib    (http://jallib.googlecode.com)
-- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html)
--
-- Description:
-- This sample shows how to setup an LCD for use with custom characters.
-- This file defines a test for JALLIB testing, using a test-board
--  defined by a BOARD file .
--
-- Sources: Diego Demeulemeester (http://tech.groups.yahoo.com/group/jallist/message/29985)
-- by nonno
-- Notes:
-- setup: an hd44780 compatible display, used in 4-bit mode.
--
-- ********************
-- LCD
-- 1  Vss    2 Vdd
-- 3  VO     4 RS
-- 5  R/W(G) 6 E
-- 7  D0     8 D1
-- 9  D2     10 D3
-- 11 D4     12 D5
-- 13 D6     14 D7
-- 15 BLA    16 BLK

-- 16F628A
-- 1 RA2 LCD_5          18 RA1 LCD_6
-- 2 RA3 LCD_4          17 RA0 LCD_7
-- 3 RA4 NC          16 RA7 OSC1 XTal IN
-- 4 RA5 MCLR ICSP Vpp 15 RA6 OSC2 XTal OUT
-- 5 Vss ICSP Vss      14 Vdd ICSP Vdd
-- 6 RB0 SW1          13 RB7 LCD_EN ICSP PGD
-- 7 RB1 SW2          12 RB6 T1CK_IN ICSP PGC
-- 8 RB2 LED          11 RB5 NC LCD_RW(G)
-- 9 RB3 uPB1507GV SEL 10 RB4 LCD_RS

-- SC802A Command
-- Clear Display           00 0000 0001    1.53 mS
-- Return Home               00 0000 001X    1.53 mS
-- Entry Mode Set           00 0000 01DD    39 uS
-- Display ON/OFF Control       00 0000 1DDD    39 uS
-- Cursor or Display Shift       00 0001 DDXX    39 uS
-- Function Set            00 001D DDXX    39 uS
-- Set CGRAM Address           00 01AA AAAA    39 uS
-- Set DDRAM Address           00 1AAA AAAA    39 uS
-- Read Busy Flag and Address       00 DAAA AAAA    0uS
-- Write Data to RAM           10 DDDD DDDD    43uS
-- Read Data From RAM           01 DDDD DDDD    43uS

--    Available functions for application programs:
--    __lcd_write(<byte>)            sends byte from value to
--     _lcd_write(<byte>)               register of the lcd and
--                           shift cursor position 1 right
--    _lcd_write_data(<byte>)            write data to lcd using
--                           __lcd_write(<byte>) lcd_rs high
--    _lcd_write_data(<byte>)            write command to lcd using
--                           __lcd_write(<byte>) lcd_rs low
--    lcd_init()                   initialize the LCD controller
-- --------------------------------------------------------------------------
--
-- var volatile byte   TMR2             at { 0x11 }
-- ------------------------------------------------
-- var volatile byte   T2CON             at { 0x12 }
-- var volatile bit*4  T2CON_TOUTPS         at T2CON : 3
-- var volatile bit    T2CON_TMR2ON         at T2CON : 2
-- var volatile bit*2  T2CON_T2CKPS         at T2CON : 0
-- This file has been generated from:
--    * board: board_16f628a_js.jal
--    * test : test_lcd_hd44780_custom.jal
--
;@jallib section chipdef
-- chip setup
include 16f628a
include chipdef_jallib
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target OSC HS           -- HS crystal or resonator
pragma target clock 20_000_000       -- oscillator frequency
pragma target WDT  disabled
pragma target LVP  disabled
-- pragma interrupt
;@jallib section lcd_hd44780_4
--    1. Declare the following constants:
-- const byte LCD_ROWS    = 2          -- 1, 2 or 4 lines
-- const byte LCD_CHARS    = 8          -- 8, 16 or 20 chars per line
--     and aliases for handshake lines:

--    2. Set the chosen LCD dataport and handshake pins to output:
alias    lcd_rs        is  pin_B4      -- cmd/data select
alias    lcd_en        is  pin_B7      -- trigger

pin_B4_direction       = output
pin_B7_direction       = output

pin_B4_direction    = output           -- cmd/data select
pin_B7_direction    = output           -- trigger

alias  lcd_d4        is    pin_A3           -- lcd databit d4
alias  lcd_d5        is    pin_A2           -- lcd databit d5
alias  lcd_d6        is    pin_A1           -- lcd databit d6
alias  lcd_d7        is    pin_A0           -- lcd databit d7

pin_A3_direction    = output           -- lcd databit d4
pin_A2_direction    = output           -- lcd databit d5
pin_A1_direction    = output           -- lcd databit d6
pin_A0_direction    = output           -- lcd databit d7

const byte LCD_ROWS    = 2        -- 2 lines
const byte LCD_CHARS    = 8        -- 8 chars per line

;@jallib section led
-- LED IO definition
alias led          is pin_b2
alias led_direction   is pin_b2_direction
alias led2          is pin_b3
alias led2_direction  is pin_b3_direction
CONST bit led_on = 1 , led_off = 0
include delay
enable_digital_io()
led_direction = output
-- led2_direction = output
include lcd_hd44780_4             -- LCD library with 4 data lines
--
lcd_init()                  -- init the lcd controller
--
include delay                  -- fetch delay library
--
--    0: return 0x00
--    1: return 0x40
-- --- generate LCD screen activity ---------
--var byte line1[LCD_CHARS] = "ABCDEFGH"
--var byte line2[LCD_CHARS] = "01234567"
--var byte i, k

BLOCK -- tmr2 set
  PR2 = 0x80 --
  T2CON_TOUTPS = 8 -- 1 to 16
  T2CON_T2CKPS = 1 -- 0 = 1 , 1 = 4 , 2 = 16
--PIE1_TMR2IE
--PIR1_TMR2IF
END BLOCK

procedure _timend_isr()
--   pragma interrupt FAST
   PIR1_TMR2IF = 0 -- interrupt flag clear
--   PIE1_TMR2IE = 0 -- tmr2 interrupt to stop
--   T1CON_TMR1ON = 0 -- tmr1 gate off (stop)
     T2CON_TMR2ON = 0 -- tmr2 stop
   led = led_off  -- exst sig
end procedure  -- ############# this is err

--    __lcd_write(<byte>)            sends byte from value to
--     _lcd_write(<byte>)               register of the lcd and
--                           shift cursor position 1 right
--    _lcd_write_data(<byte>)            write data to lcd using
--                           __lcd_write(<byte>) lcd_rs high
--    _lcd_write_data(<byte>)            write command to lcd using
--                           __lcd_write(<byte>) lcd_rs low
--    lcd_init()                   initialize the LCD controller
forever loop
   lcd_clear_screen()          -- (to first line)
--   delay_1ms(5)
--     interrupt start
  PIE1_TMR2IE = 1   -- tmr1 interrupt enable
  INTCON_GIE = 1    -- all interrupt enable
  T2CON_TMR2ON = 1  -- tmr2 start
  led = led_on  -- exst sig
--  _timend_isr() -- is set
   lcd_cursor_position(0,0)      -- to 1st line
   __lcd_write(TMR2)          -- tmr2 count
   delay_1ms(1)
   lcd_cursor_position(1,0)      -- to 2nd line
   __lcd_write(PIR1_TMR2IF)   -- tmr2
      delay_1ms(1)          -- pause between bytes
   delay_100ms(5)
end loop
--
 


コメント(0) 

今度はjalv2の出番です [jalv2_PIC]

表示が出来るかのテストで、押しボタン(デバウンス)等は組み込んでいません」。

-- --------------------------------------------------------------------------
-- Title: Test program for custom chars on lcd_hd44780.
-- Author: Joep Suijs, Copyright (c) 2011-2011, all rights reserved.
-- Adapted-by:
-- Compiler: >=2.4m
-- Revision: $Revision: 2811 $
--
-- This file is part of jallib    (http://jallib.googlecode.com)
-- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html)
--
-- Description:
-- This sample shows how to setup an LCD for use with custom characters.
-- This file defines a test for JALLIB testing, using a test-board
--  defined by a BOARD file .
--
-- Sources: Diego Demeulemeester (http://tech.groups.yahoo.com/group/jallist/message/29985)
-- by nonno
-- Notes:
-- setup: an hd44780 compatible display, used in 4-bit mode.
--
-- ********************
-- LCD
-- 1  Vss    2 Vdd
-- 3  VO     4 RS
-- 5  R/W(G) 6 E
-- 7  D0     8 D1
-- 9  D2     10 D3
-- 11 D4     12 D5
-- 13 D6     14 D7
-- 15 BLA    16 BLK

-- 16F628A
-- 1 RA2 LCD_5          18 RA1 LCD_6
-- 2 RA3 LCD_4          17 RA0 LCD_7
-- 3 RA4 NC          16 RA7 OSC1 XTal IN
-- 4 RA5 MCLR ICSP Vpp 15 RA6 OSC2 XTal OUT
-- 5 Vss ICSP Vss      14 Vdd ICSP Vdd
-- 6 RB0 SW1          13 RB7 LCD_EN ICSP PGD
-- 7 RB1 SW2          12 RB6 T1CK_IN ICSP PGC
-- 8 RB2 LED          11 RB5 NC LCD_RW(G)
-- 9 RB3 uPB1507GV SEL 10 RB4 LCD_RS

-- SC802A Command
-- Clear Display           00 0000 0001    1.53 mS
-- Return Home               00 0000 001X    1.53 mS
-- Entry Mode Set           00 0000 01DD    39 uS
-- Display ON/OFF Control       00 0000 1DDD    39 uS
-- Cursor or Display Shift       00 0001 DDXX    39 uS
-- Function Set            00 001D DDXX    39 uS
-- Set CGRAM Address           00 01AA AAAA    39 uS
-- Set DDRAM Address           00 1AAA AAAA    39 uS
-- Read Busy Flag and Address       00 DAAA AAAA    0uS
-- Write Data to RAM           10 DDDD DDDD    43uS
-- Read Data From RAM           01 DDDD DDDD    43uS

--    Available functions for application programs:
--    __lcd_write(<byte>)            sends byte from value to
--     _lcd_write(<byte>)               register of the lcd and
--                           shift cursor position 1 right
--    _lcd_write_data(<byte>)            write data to lcd using
--                           __lcd_write(<byte>) lcd_rs high
--    _lcd_write_data(<byte>)            write command to lcd using
--                           __lcd_write(<byte>) lcd_rs low
--    lcd_init()                   initialize the LCD controller
-- --------------------------------------------------------------------------
--
-- This file has been generated from:
--    * board: board_16f628a_js.jal
--    * test : test_lcd_hd44780_custom.jal
--
;@jallib section chipdef
-- chip setup
include 16f628a
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target OSC HS           -- HS crystal or resonator
pragma target clock 20_000_000       -- oscillator frequency
pragma target WDT  disabled
pragma target LVP  disabled

;@jallib section lcd_hd44780_4
--    1. Declare the following constants:
-- const byte LCD_ROWS    = 2          -- 1, 2 or 4 lines
-- const byte LCD_CHARS    = 8          -- 8, 16 or 20 chars per line
--     and aliases for handshake lines:

--    2. Set the chosen LCD dataport and handshake pins to output:
alias    lcd_rs        is  pin_B4      -- cmd/data select
alias    lcd_en        is  pin_B7      -- trigger

pin_B4_direction       = output
pin_B7_direction       = output

pin_B4_direction    = output           -- cmd/data select
pin_B7_direction    = output           -- trigger

alias  lcd_d4        is    pin_A3           -- lcd databit d4
alias  lcd_d5        is    pin_A2           -- lcd databit d5
alias  lcd_d6        is    pin_A1           -- lcd databit d6
alias  lcd_d7        is    pin_A0           -- lcd databit d7

pin_A3_direction    = output           -- lcd databit d4
pin_A2_direction    = output           -- lcd databit d5
pin_A1_direction    = output           -- lcd databit d6
pin_A0_direction    = output           -- lcd databit d7

const byte LCD_ROWS    = 2        -- 2 lines
const byte LCD_CHARS    = 8        -- 8 chars per line

;@jallib section led
-- LED IO definition
alias led          is pin_b2
alias led_direction   is pin_b2_direction
alias led2          is pin_b3
alias led2_direction  is pin_b3_direction

include delay
enable_digital_io()
led_direction = output
led2_direction = output

include lcd_hd44780_4             -- LCD library with 4 data lines

--
lcd_init()                  -- init the lcd controller
--
include delay                  -- fetch delay library
--
--    0: return 0x00
--    1: return 0x40
-- --- generate LCD screen activity ---------
var byte line1[LCD_CHARS] = "ABCDEFGH"
var byte line2[LCD_CHARS] = "01234567"
var byte i, k

forever loop
   lcd_clear_screen()          -- (to first line)
   delay_1ms(5)
  
   lcd_cursor_position(0,0)      -- to second line
   for LCD_CHARS using i loop
      lcd_write_char(line1[i])      -- write using procedure
   end loop
   delay_1ms(1)
  
   lcd_cursor_position(1,0)      -- to second line
   for LCD_CHARS using k loop
      lcd = line2[k]          -- write using pseudo variable
      delay_1ms(1)          -- pause between bytes
   end loop
   delay_100ms(5)
      LED = !LED          -- flip the LED
end loop
--
sIMG_0541.jpg

やはりカウンターはjalv2かCVASMになりそうです。

mikroC Pro はもう少し期待したんですか。


コメント(0) 

C言語は方言がきついのでしょうか? [mikroC PRO]

mikroC PRO は 例文が少なく マニュアルだけでは、LCD表示の法則が見いだされません。
表示の確認
sIMG_0539.jpg 
// ********************
// LCD SC802A
// 1 Vss 2 Vdd
// 3 VO 4 RS
// 5 R/W(G) 6 E
// 7 D0 8 D1
// 9 D2 10 D3
// 11 D4 12 D5
// 13 D6 14 D7
// 15 BLA 16 BLK

// 16F628A
//1 RA2 LCD_5 18 RA1 LCD_6
//2 RA3 LCD_4 17 RA0 LCD_7
//3 RA4 NC 16 RA7 OSC1 XTal IN
//4 RA5 MCLR ICSP Vpp 15 RA6 OSC2 XTal OUT
//5 Vss ICSP Vss 14 Vdd ICSP Vdd
//6 RB0 SW1 13 RB7 LCD_EN ICSP PGD
//7 RB1 SW2 12 RB6 T1CK_IN ICSP PGC
//8 RB2 LED 11 RB5 NC LCD_RW(G)
//9 RB3 uPB1507GV SEL 10 RB4 LCD_RS

// ********************
// Lcd_INT;
// Lcd_Custom_Config(&PORTA,0,1,2,3,&PORTB,4,5,7);
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D7 at RA0_bit;
sbit LCD_D6 at RA1_bit;
sbit LCD_D5 at RA2_bit;
sbit LCD_D4 at RA3_bit;

// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit;
// End LCD module connections
// ********************

char *res;
char t;
char txt[4];

void main() {
CMCON = 0b00000111; //Comparators Off
VRCON = 0b00000000; //RA7
// PORT is SET
TRISA = 0b10100000; // PORTAの方向 osc1 osc2 mclr nc lcd4 lcd5 lcd6 lcd7
TRISB = 0b01000011; // PORTBの方向 en sigin r/w rs 64 led sw2 sw1
OPTION_REG.F7 = 0; // PORTB PULLUP

// ********************
// LCD(DISP)INIT
LCD_Init(); // 2.4mS
Delay_us(2400);
Lcd_Cmd(_LCD_CURSOR_OFF); // 40uS
Delay_us(40);
Lcd_Cmd(_LCD_CLEAR); // 1.6mS
Delay_us(1600);

for ( ; ; ) {

t = 11;
// t = 01;
ByteToStr(t, txt); // txt is "11" (one blank here)
res = Ltrim(txt);
Lcd_Out(1, 1, txt);
Delay_us(1600);

t = 23;
ByteToStr(t, txt); // txt is "23" (one blank here)
res = Ltrim(txt);
Lcd_Out(1, 3, res);
Delay_us(1600);

t = 45;
ByteToStr(t, txt); // txt is "45" (one blank here)
res = Ltrim(txt);
Lcd_Out(1, 5, res);
Delay_us(1600);

t = 67;
ByteToStr(t, txt); // txt is "67" (one blank here)
res = Ltrim(txt);
Lcd_Out(1, 7, res);
Delay_us(1600);

Delay_ms(1000);

Lcd_Out(2, 1, "01234567");
Delay_ms(1000);

// Lcd_Cmd(_LCD_CLEAR); // 1.6mS
// Delay_us(1600);

// I Can Display
// "11234567"
// "01234567"
// or
// "1 234567"
// "01234567"
// I Want Display
// "01234567"
// "01234567"
// Is it possible?
}
}
押しボタンによる計数
sIMG_0536.jpg 
For UP / DOWN counter.

Hello everyone
Using the two push buttons, and made the UP / DOWN counter.
Display will cycle through the numbers from 0 to 63.
Has issued a LCD8-2 displayed in order to know the internal state.
Count will continue to press the push button and fast.
Numbers, but will stop when you release, the rate of change is slower.
Speed ​​will change to the stage from 10 to 50mS 5mS.
1 is equivalent to 5mS.
When you press the button in the middle of a change, and then counted with a rate of change at that time.
(HOLD is 1) will display the number of state circulation, rate of change, of buttons,
Stability, although it is planned to become 10 in HOLD,
Are shown thinner the position of "0" 10.
What has actually changed, what looks past the display position is changed, not be determined.
Can you confirm that?
Sincerely yours
APOLLO21


コメント(0) 

少しだけC言語のお勉強が進みました。 [mikroC PRO]

と言いましても、対象は「MIKROC PRO」でして、

制御に必要な記述方法を見つけ出すことが出来ません。

TMR1とTMR2を使い、精度は追求しませんが、小型で使いやすいものにしたいのです。

普通のカウンタは1秒と0.1病のレンジが多いのですが、今回は0.6秒レンジも付けたいと思っています。

(経験から0.6秒が一番見やすかった、そのため精度が少し心配です)

まずは試験のため、2個の押しボタンをファンクション設定に使い、

長押しでだんだん早くなり、離すとカウントタイマー速度が低下する様にしました。

以前見たことがあるのは離すとカウントもゆっくりに成って停止しますが、

今回のは離したら即停止で、タイマーだけが戻って行き、途中で押すとその時の速度でカウントします。

もう一つ良く判らないのは、バイナリを文字に変換して、決めた位置に表示させるのが上手く行かず、

1桁ずれてしまいますが、(ずれない部分もある)マニュアルを何度読んでもその辺りの所が判りませんでした。

ICPSを使える様にすると、コンパイラーとPickit2を交互に使い、

LCDを外してPickit2を差し、コンパイルできると、自動的に書き込んでくれるのは便利でした。

また「CTL-ALT-D」 で表示される(とメーカーは云う)文例で

Bpoart の PULLUP フラグSET

// const register unsigned short int NOT_RBPU = 7;  // poartb pullup enable
// sbit                                  NOT_RBPU_bit at OPTION_REG.B7;

は働かず、「 OPTION_REG.F7 = 0; // PORTB PULLUP」で働きました。

(実は働いたのもあるのですが、働かないのもあって、その条件をメーカに問い合わせても要領を得ず諦めました)

LCD コンフィグレーションの

 Lcd_Cmd(_LCD_CURSOR_OFF); 等のコマンドは

あらかじめ 

#define                            LCD_Custom_Init    LCD_Init

の様に定義をして読み替えることが出来ますが、

//            Lcd_INT;
//            Lcd_Custom_Config(&PORTA,0,1,2,3,&PORTB,4,5,7);
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D7 at RA0_bit;
sbit LCD_D6 at RA1_bit;
sbit LCD_D5 at RA2_bit;
sbit LCD_D4 at RA3_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit;
// End LCD module connections

はメーカの指定通りでないと働かなかったです。

次は 押しボタン関連の練習プログラムですが、書いた様には動くのですが、

思う様には書けないものです。

// ********************
// LCD
// 1  Vss    2 Vdd
// 3  VO     4 RS
// 5  R/W(G) 6 E
// 7  D0     8 D1
// 9  D2     10 D3
// 11 D4     12 D5
// 13 D6     14 D7
// 15 BLA    16 BLK

// 16F628A
//1 RA2 LCD_5         18 RA1 LCD_6
//2 RA3 LCD_4         17 RA0 LCD_7
//3 RA4 NC            16 RA7 OSC1 XTal IN
//4 RA5 MCLR ICSP Vpp 15 RA6 OSC2 XTal OUT
//5 Vss ICSP Vss      14 Vdd ICSP Vdd
//6 RB0 SW1           13 RB7 LCD_EN ICSP PGD
//7 RB1 SW2           12 RB6 T1CK_IN ICSP PGC
//8 RB2 LED           11 RB5 NC LCD_RW(G)
//9 RB3 uPB1507GV SEL 10 RB4 LCD_RS

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

#define        sw1 PORTB.F0
#define        sw2 PORTB.F1
#define        LED PORTB.F2

//#define        SW1_ON   Button(&PORTB, 0, 30, 0)
//#define        SW1_OFF  Button(&PORTB, 0, 30, 1)
//#define        SW2_ON   Button(&PORTB, 1, 30, 0)
//#define        SW2_OFF  Button(&PORTB, 1, 30, 1)

//#define        SW_UP  ((SW1_ON) * (SW2_OFF))
//#define        SW_DW  ((SW2_ON) * (SW1_OFF))
//#define        SW_HOLD  ((SW2_ON) * (SW1_ON) + (SW2_OFF) * (SW1_OFF))

// ********************
 static char* msg;
 static char  txt[20];
 static char  txt1[2];
        char  SW_HOLD;
 static char  COUNT;
 static char  TIMA;
 static char  TIMB;

// const register unsigned short int NOT_RBPU = 7;  // poartb pullup enable
// sbit                                  NOT_RBPU_bit at OPTION_REG.B7;

//            Lcd_INT;
//            Lcd_Custom_Config(&PORTA,0,1,2,3,&PORTB,4,5,7);
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D7 at RA0_bit;
sbit LCD_D6 at RA1_bit;
sbit LCD_D5 at RA2_bit;
sbit LCD_D4 at RA3_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit;
// End LCD module connections

// ********************
void                main()                {
 CMCON = 0b00000111; //Comparators Off
 VRCON = 0b00000000; //RA7
// PORT is SET
 TRISA = 0b10100000; // PORTAの方向 osc1 osc2 mclr nc lcd4 lcd5 lcd6 lcd7
 TRISB = 0b01000011; // PORTBの方向 en sigin r/w rs 64 led sw2 sw1
//sbit                                  NOT_RBPU_bit at OPTION_REG.B7;
 OPTION_REG.F7 = 0; // PORTB PULLUP
 sw1 = 1; //  pullup
 sw2 = 1; //  pullup
 COUNT = 0; // start
// ********************
// LCD(DISP)INIT
 LCD_Init();  // 2.4mS
 Delay_us(2400);
 Lcd_Cmd(_LCD_CURSOR_OFF);  // 40uS
 Lcd_Out(2, 1, "FC ___V8");
 Delay_us(1600);
// Lcd_Cmd(_LCD_BLINK_CURSOR_ON);
 Lcd_Cmd(_LCD_CLEAR);   // 1.6mS
 Delay_us(1600);
 
// ********************
// sw_in
//#define        SW1_ON   (Button(&PORTB, 0, 30, 0))
//#define        SW1_OFF  (Button(&PORTB, 0, 30, 1))
//#define        SW2_ON   (Button(&PORTB, 1, 30, 0))
//#define        SW2_OFF  (Button(&PORTB, 1, 30, 1))

 COUNT = 0;
 TIMA = 10;

 do {     //SW_HOLD
    SW_HOLD = (((Button(&PORTB, 0, 30, 1)) * (Button(&PORTB, 1, 30, 1))) + ((Button(&PORTB, 0, 30, 0)) * (Button(&PORTB, 1, 30, 0))));
    if (SW_HOLD == 1) {
       if (TIMA < 10) TIMA++;
           ByteToStr(TIMA, txt);// txt is "num"
           Lcd_Out(1, 4, txt);
           Delay_us(1600);
           msg = "SW__HOLD"; // hold
    }
// ********************
         // SW_UP
    if ((Button(&PORTB, 0, 30, 0)) * (Button(&PORTB, 1, 30, 1))) {
       if (TIMA > 1) TIMA--;
           ByteToStr(TIMA, txt);// txt is "num"
           Lcd_Out(1, 4, txt);
           Delay_us(1600);
       TIMB = TIMA;
       do {
          Delay_ms(5);
          TIMB--;
          } while (TIMB > 1);
       LED = 1; // on
           msg = "SW____UP";
       COUNT++;
       if(COUNT >= 64) COUNT = 0;
    }
// ********************
         // SW_DW
    if ((Button(&PORTB, 1, 30, 0)) * (Button(&PORTB, 0, 30, 1))) {
          if (TIMA > 1) TIMA--;
           ByteToStr(TIMA, txt);// txt is "num"
           Lcd_Out(1, 4, txt);
           Delay_us(1600);
       TIMB = TIMA;
       do {
          Delay_ms(5);
          TIMB--;
          } while (TIMB > 1);
       LED = 0; // on
           msg = "SW__DOWN";
       COUNT--;
       if(COUNT > 64) COUNT = 63;
    }
// ********************
 Lcd_Out(2, 1, msg);
  Delay_us(1600);
 ByteToStr(COUNT, txt);// txt is "num"
 Lcd_Out(1, 1, txt);
  Delay_us(1600);
 ByteToStr(SW_HOLD, txt);// txt is "num"
 Lcd_Out(1, 6, txt);
 }
// ********************
 while(1); // Endless loop
 Delay_ms(500);
}
// ********************

sIMG_0531.jpg

sIMG_0530.jpg

sIMG_0534.jpg

 


コメント(0) 

最適発振条件を検討しました [ディップメータ]

TRとMESFETの違いを調べていたら、
japan.renesas.com/products/discrete/transistor/ssmos_hfamp/device/BB502M__Documentation.jsp
に行き当たりました。

メーカーではRFICと呼んでいるみたいですが、デュアルゲートMOSFET

G2の電圧でゲインを変えられます。

TRですと2SC3355シリーズがUHFでも簡単に発振してくれるんですが 、

手持ちの3SK166aが低域と高域では定数を変化しないと発振してくれません。

このかいろは、スタート時に最高のゲインから始まり、発振をすると自動的にケインを絞り、

回路電流を検出してメータまで振らせようと云う横着な発想から始めました。

G2電圧を可変してスタートやメーターの振れに反映させるつもりです。

WS001279.JPG

 

 


コメント(0) 

ディップメーター用に特化した PIC周波数カウンタを企画しまた。 [PIC]

オリジナル作成者の許可を貰っていませんので、ハッキリした内容は掛けませんが、

PIC16F628a の T1 とT2 を使い、元16桁2行であったのを、

8桁2行に切りつめました。

コンパイラは「mikroC PRO for PIC」を使っています。

周波数レンジ選択を4bit16セレクトswで選択しやすい様にしています。

桁数の取扱が良く判らないので、不要なプログラムを二重に含んだりしているので

もう少し切りつめられそうです。(1/64のプリスケーラはプログラムには組み込んでいますが、実装はしません)

//    **********************************************************************
//
//                <FRIQ COUNTER>
//    *FUNCTION

//         11 12 13 14 15 16 17 18                NNNNNNNN
//         21 22 23 24 25 26 27 28                XXXXXXXX
//         sw1=0,sw2=0,sw3=0,sw4=0        msg =  "________";
//         sw1=1,sw2=0,sw3=0,sw4=0        msg =  "01M___K_";
//         sw1=0,sw2=1,sw3=0,sw4=0        msg =  "08_M___K";
//         sw1=1,sw2=1,sw3=0,sw4=0        msg =  "1M___K__";
//         sw1=0,sw2=0,sw3=1,sw4=0        msg =  "8_M___K_";
//         sw1=1,sw2=0,sw3=1,sw4=0        msg =  "01M455K_";
//         sw1=0,sw2=1,sw3=1,sw4=0        msg =  "08_M455K";
//         sw1=1,sw2=1,sw3=1,sw4=0        msg =  "1M455K__";
//         sw1=0,sw2=0,sw3=0,sw4=1        msg =  "8_M455K_";
//         sw1=1,sw2=0,sw3=0,sw4=1        msg =  "064M___K";
//         sw1=0,sw2=1,sw3=0,sw4=1        msg =  "64__M___";
//         sw1=1,sw2=1,sw3=0,sw4=1        msg =  "064M455K";
//         sw1=0,sw2=0,sw3=1,sw4=1        msg =  "64__M455";
//         sw1=1,sw2=0,sw3=1,sw4=1        msg =  "________";
//         sw1=0,sw2=1,sw3=1,sw4=1        msg =  "________";
//         sw1=1,sw2=1,sw3=1,sw4=1        msg =  "________";

//    *コンフィグ設定
//    LVP_OFF
//    MCLR_OFF
//    WDT_OFF
//    HS_CLK

//    *PIN ASIGN
//    Pin-01    LCD:D5
//    Pin-02    LCD:D4
//    Pin-03    LED
//    Pin-04    MCLR
//    Pin-05    Vss(GND)
//    Pin-06   
//    Pin-07   
//    Pin-08   
//    Pin-09   
//    Pin-10    LCD:RS
//    Pin-11    LCD:WR 1/64 SEL
//    Pin-12    SIG INPUT
//    Pin-13    LCD:EN
//    Pin-14    Vdd +5V
//    Pin-15    XTal OUT
//    Pin-16    XTal IN 20MHz
//    Pin-17    LCD:D7
//    Pin-18    LCD:D5

//   
//    LCD
//    1 Vss    2 Vdd
//    3 VO    4 RS
//    5 R/W    6 E
//    7 D0    8 D1
//    9 D2    10 D3
//    11 D4    12 D5
//    13 D6    14 D7
//    15 BLA    16 BLK
//
//    LCD POSTION
//    11 12 13 14 15 16 17 18
//    21 22 23 24 25 26 27 28
//
//    bit 1?bit 0 or 1
//    sbit 1?bit 0 or 1
//    (unsigned) char 1 0 .. 255
//    signed char 1 - 128 .. 127
//    (signed) short (int) 1 - 128 .. 127
//    unsigned short (int) 1 0 .. 255
//    (signed) int 2 -32768 .. 32767
//    unsigned (int) 2 0 .. 65535
//    (signed) long (int) 4 -2147483648 .. 2147483647
//    unsigned long (int) 4 0 .. 4294967295
//
// **********************************************************************
//        16F628A
//    1 RA2 LCD_5    18 RA1 LCD_6
//    2 RA3 LCD_4    17 RA0 LCD_7
//    3 RA4 LED    16 RA7 OSC1 XTal IN
//    4 RA5 MCLR    15 RA6 OSC2 XTal OUT
//    5 Vss        14 Vdd
//    6 RB0 SW1    13 RB7 LCD_EN
//    7 RB1 SW2    12 RB6 T1CK_IN
//    8 RB2 SW3    11 RB5 LCD_RW (1/64 uPB1507GV SEL)
//    9 RB3 SW4    10 RB4 LCD_RS
// **********************************************************************

#define             sw1                    PORTB.F0
#define             sw2                    PORTB.F1
#define             sw3                    PORTB.F2
#define             sw4                    PORTB.F3

#define             LED                    PORTA.F4

#define             GATETIME_100MSEC     10
#define             GATETIME_1SEC        1

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

static                unsigned            int                MeasurementCnt;
static                char                phase;
static                char                phase1;


//                    Lcd_INT;
//                    Lcd_Custom_Config(&PORTA,0,1,2,3,&PORTB,4,5,7);
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D7 at RA0_bit;
sbit LCD_D6 at RA1_bit;
sbit LCD_D5 at RA2_bit;
sbit LCD_D4 at RA3_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit;
// End LCD module connections


void                interrupt()
{
                PIR1.TMR2IF = 0;
                //
                MeasurementCnt--;
                if (MeasurementCnt == 0) {
                                T1CON.TMR1ON = 0;    //    GATE OFF
                                T2CON.TMR2ON = 0;    //    TIMER N
                }
}

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

unsigned        long            FreqMeasurement(unsigned char gateTime)

{
                static            unsigned        long        freq;    //(int) 4
                // TIMER1 is SET
                PIR1.TMR1IF = 0;
                TMR1L = 0;
                TMR1H = 0;
                // TIMER2 is SET
                PIR1.TMR2IF = 0;
                freq = 0;
                // ENABLE INT
                INTCON.PEIE = 1;
                INTCON.GIE = 1;
                // 開始
                T2CON.TMR2ON = 1;        //    TIMER START
                //            Delay
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                asm         nop;
                //
                T1CON.TMR1ON = 1;    //GATE ON
                //    MES
                while (T2CON.TMR2ON != 0) {
                                if (PIR1.TMR1IF == 1) {
                                                PIR1.TMR1IF = 0;
                                                freq++;
                                }
                }
                if (PIR1.TMR1IF == 1) {
                                PIR1.TMR1IF = 0;
                                freq++;
                }
                //    CONV
                freq = freq * 65536;   //?
                freq = freq + ((unsigned)TMR1H * 256) + (unsigned)TMR1L;
                //
                return (freq);// friq?
}

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

void main()
{
                static        char*                        msg;
                static        unsigned        long        freq, temp;        //(int) 4     // 0...4294967295
                static        unsigned        char        buf[20], prescaler, gateTime;
                //char 1    //ch = str[20];    // 20th element
                // ANALOG is SET
                //ANSEL  = 0b00000000;        // NOT USE
                CMCON  = 0b00000111;
                // PORT is SET
                TRISA  = 0b11100000;
                TRISB  = 0b01001111;
                OPTION_REG.F7 = 0;        // PORTBPULL UP
                // TIMER2 is SET
                PIE1.TMR2IE = 1;
                PIR1.TMR2IF = 0;
                T2CON.TOUTPS0 = 0;
                T2CON.TOUTPS1 = 0;
                T2CON.TOUTPS2 = 0;
                T2CON.TOUTPS3 = 0;
                T2CON.TMR2ON = 0;
                T2CON.T2CKPS0 = 1;
                T2CON.T2CKPS1 = 1;
                TMR2 = 0;
                // TIMER1 is SET
                PIE1.TMR1IE = 0;
                PIR1.TMR1IF = 0;
//                T1CON.T1RUN = 0;
                T1CON.T1CKPS0 = 0;
                T1CON.T1CKPS1 = 0;
                T1CON.T1OSCEN = 0;
                T1CON.NOT_T1SYNC = 1;
                T1CON.TMR1CS = 1;
                T1CON.TMR1ON = 0;
                TMR1L = 0;
                TMR1H = 0;
                // VAL INIT
                prescaler = 1;
                gateTime = GATETIME_1SEC;
                // LCD(DISP)INIT
//                Lcd_Custom_Config(&PORTA,0,1,2,3,&PORTB,4,5,7);
                LCD_Init();
                Lcd_Cmd(_LCD_CURSOR_OFF);
                Lcd_Out(2, 1, "FC V8");
                Delay_ms(1000);
                Lcd_Cmd(_LCD_CLEAR);

                while (1) {
                                //    FRIQ MES
                                LED = 1;
                                freq = FreqMeasurement(gateTime);
                                LED = 0;
                                //    CONV
                                freq = freq * prescaler * gateTime;

                                // EXT PRISCALER

                phase1 = phase;
                phase = (sw1 + sw2 * 2 + sw3 * 4 + sw4 * 8);

                if (phase1 != phase)
                switch (phase) {
                case 1:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    msg = "01M___K_";
                                    break;
                case 2:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 1;
                                    T1CON.T1CKPS1 = 1;
                                    prescaler = 8;
                                    msg = "08_M___K";
                                    break;
                case 3:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    msg = "1M___K__";
                                    break;
                case 4:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 1;
                                    T1CON.T1CKPS1 = 1;
                                    prescaler = 8;
                                    msg = "8_M___K_";
                                    break;
                case 5:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    freq -= 455000;
                                    msg = "01M455K_";
                                    break;
                case 6:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 1;
                                    T1CON.T1CKPS1 = 1;
                                    prescaler = 8;
                                    freq -= 455000;
                                    msg = "08_M455K";
                                    break;
                case 7:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    freq -= 455000;
                                    msg = "1M455K__";
                                    break;
                case 8:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 1;
                                    T1CON.T1CKPS1 = 1;
                                    prescaler = 8;
                                    freq -= 455000;
                                    msg = "8_M455K_";
                                    break;
                case 9:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    msg = "064M___K";
                                    break;
                case 10:            MeasurementCnt = 123;
                                    TMR2 = 0xEE;        // 31250=0.1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    msg = "64__M___";
                                    break;
                case 11:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    freq -= 455000;
                                    msg = "064M455K";
                                    break;
                case 12:            MeasurementCnt = 1221;
                                    TMR2 = 0x4C;        // 312500=1/((1/20000000) * 4 * 16)
                                    T1CON.T1CKPS0 = 0;
                                    T1CON.T1CKPS1 = 0;
                                    prescaler = 1;
                                    freq -= 455000;
                                    msg = "64__M455";
                                    break;
}
                                Lcd_Out(2, 1, msg);

                                // 周波数の表示
//      11 12 13 14 15 16 17 18    NNNNNNNN
//      21 22 23 24 25 26 27 28    XXXXXXXX
                                Lcd_Out(1, 1, &buf[3]); // friq?
                                //
                                Delay_ms(500);
                }
}

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


コメント(0) 

mikroC PRO for PICについて

 

拙はpicによる周波数カウンタの新しい方法をWebにて知りました。

それは mikroC for PICによって記述されているため、コンパイルすることが出来ませんでした。

何度も書き換えてもダメで最後に「MikroElektronika Support」 に教えて貰い解決しました。

ポイントは "LCD_INT(); It is" で(実際に記載するコマンドではありません)

実際には LCD.c と言うライブラリ 裏でなにかしている様で、extern に相当するようです。

"static	unsigned	int	MeasurementCnt;"
から 次の間には実際のLCDポート配置を記載します。
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB7_bit;
sbit LCD_D7 at RA0_bit;
sbit LCD_D6 at RA1_bit;
sbit LCD_D5 at RA2_bit;
sbit LCD_D4 at RA3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB7_bit;
sbit LCD_D7_Direction at TRISA0_bit;
sbit LCD_D6_Direction at TRISA1_bit;
sbit LCD_D5_Direction at TRISA2_bit;
sbit LCD_D4_Direction at TRISA3_bit; 
"
void	interrupt()"
**************************** 
その他
"static	unsigned	int	MeasurementCnt;" の次に

"#define	Lcd_Custom_Cmd	Lcd_Cmd
#define	LCD_Custom_Init	LCD_Init
#define	Lcd_Custom_Out	Lcd_Out"
を宣言しました。
プログラム中の以前に有った位置で
//	LCD_Init();
	LCD_Custom_Init();
//	Lcd_Cmd(_LCD_CURSOR_OFF);
	Lcd_Custom_Cmd(_LCD_CURSOR_OFF);
//	Lcd_Out(1, 1, "FreqCounter V7");
	Lcd_Custom_Out(1, 1, "****");” 
これにより以前の記載文法を使用できました。
******************************** 
私は 次の部分を変更することによって、
「16f88」のソースファイルを「16f628a」用に変換できました。
"//	ANSEL  = 0b00000000;                  // 使用しない。
	CMCON  = 0b00000111;
//	T1CON.T1RUN = 0;"
表示内容は簡単に決めることが出来、8桁のLCDへの変更が簡単そうです。 
それではまた。 

 

 


コメント(0) 

SPICE Model の書き方

色々な書き方があるようですが、

スタンダード位置に書く方法と

\lib\sym\local\ に(*.asy)コンポーネントを書き

\lib\local_sub\ に *.cir(サブサーキット) と *.asc(回路) または (*.asy)コンポーネント を

書く方法があります。

次はその書き方ですが、最後の コンポーネントと サブサーキットを結びつける方法が判りません。

(何となく出来てしまったのもあるのですが、こうすれば必ず出来るという方法が判りません)

**************************

LTspice シンボルの作成(複製)
ここでは 2SC1815 を例にとります。

新しい回路図を作成し「C:\Program Files\LTC\LTspiceIV\lib\sym\local」から
デバイス図形「2SC1815.asy」を呼び出し 回路に貼り付け
「C:\Program Files\LTC\LTspiceIV\lib\local_sub」の
「2SC1815.asc」と「2SC1815.cir」を関連づけて シミュレーションに使用できる様にします。
「2SC1815.cir」は 数理設計研究所
www.madlabo.com/mad/edat/spice/model/index.htm#SEC2 にありました。
*********************
下準備をします。(「2SC1815.asc」と「2SC1815.cir」は既にあるとします)
マイコンピュータから「C:\Program Files\LTC\LTspiceIV\lib\sym\npn.asy」を
「C:\Program Files\LTC\LTspiceIV\lib\sym\local」に
「2SC1815.asy」としてコピペします。(外形が同じですから)

「C:\Program Files\LTC\LTspiceIV\lib\local_sub」に
「2SC1815.asc」と「2SC1815.cir」を貼り付けます。
*********************
LTspcie を起動します。
ファイル ニューシンボルを選びますと、
中央に十字丸が出ます。
ファイル オープン (先に用意した2SC1815.asyを選びます)
「C:\Program Files\LTC\LTspiceIV\lib\sym\local\2SC1815.asy」

将来呼び出すフォルダ位置の
「C:\Program Files\LTC\LTspiceIV\lib\sym\local」に保存します。
本来はありませんが、今回は既にあるので、保存を確認されますがOKをして保存します。

LTspiceを一度終了します。

回路を保存するか聞かれますが、既に変更しているので、NOを選んで下さい。
*********************
これで「\lib\sym\local\2SC1815.asy」を呼び出す準備が出来ました。

LTspiceを起動 ファイル 新しい回路図を選びます。

コンポーネント を選び [local] を 選択 「2SC12815」 OK して貼り付けます。 
場合によってESCを押して連続を中断します。

この図形「2SC12815」は
「C:\Program Files\LTC\LTspiceIV\lib\local_sub\」に
「2SC1815.asc」回路 と 「2SC1815.cir」サブサーキット が有りますので
シミュレーションをすることができるはずですが、実際には上手く結びついていません。

 


コメント(6) 

XKPさんの LCD128.asm (pa.exe) を cvasm16でアセンブルできました。 [PIC]

XKPさんの LCD128.asm を少し(16f628a用に)変更しました。

cvasm16はサポートされているデバイスの種類が多いのがよいです。

インクルード文を

    include 'C:\pictools\16f628a.inc' ; デバイス変更
    FUSES _HS_OSC                     ; 20MHz clockで動作
    FUSES _WDT_OFF
    FUSES _CP_OFF

次をコメントアウト
;            .16f84            ; pic16f84に設定
;        .include    16f84.h ; ここでは16f84を選択
;        .osc        hs        ; 0sc hs
;        .wdt        off        ; wtd off
;        .pwrt        on        ; pupt on
;        .protect    off        ; cp off
;option_reg    equ    1            ;*    option register
;option        equ    081h        ;*    option ; backwards compatab

秀丸エディターにてソースを一括置換

置換内容 配列変数の表現変更

検索文字
\+([0-9]+)
置換文字
+\1
正規表現をチェック、条件コメントを除外して、
全置換を実行。

置換内容 pc, の名前変更

検索文字
pc,1
置換文字
pcl,1
正規表現をチェック、条件コメントを除外して、
全置換を実行。

D:\_users\_cvasm\_apps\FDC128D.src に名前を変更して保存。
(cvasm16用のソースファイル

C:\pictools\tdemake.bat
に 次の内容のバッチファイルを作り、

@echo off
set PATH=c:\pictools
CVASM16.exe fcd128d.src  /l > fdc128d.ERR
if ERRORLEVEL 1 goto ERROR
if exist fcd128d.obj copy fcd128d.obj fcd128d.HEX
goto done
:error
if exist tde.err type tde.err >>fdc128d.ERR
echo (last command = %CMDLINE%) >>fdc128d.ERR
echo ERRORS! >>fdc128d.ERR
:done
@cls

これを D:\_users\_cvasm\_apps\tdemake.batへのショートカットを複写。
(ショートカットのファイル名を編集すると、実際のバッチファイルも編集されます)

これを実行しますと、以下がつくられました。
(実際ににはC:\pictools\tdemake.batが実行されます)

D:\_users\_cvasm\_apps\以下の
FCD128D.OBJ techtool 用オブジェクト
FCD128D.LST リストファイル
fcd128d.HEX hex ファイル これはpickit2でかき込めました。
fdc128d.ERR エラーファイル 内容は次です。

===== ClearView PIC16Cxx Assembler V6.2
===== Copyright (C) TechTools 1997-2002
===== Tel (972) 272-9392 : web: www.tech-tools.com
===== Fax (972) 494-5814 : email: support@tech-tools.com

Pass 0 - resolving symbols... okay
Pass 1 - generating HEX... okay

===== Done - 982 words, 1066 free - symbol table used: 8%

しかし小生は16桁2行のLCDを持って居らず、
8桁1行のLCDで周波数直読(測定できない周波数は表示しなくてもかまいません)
10000000 *00Hzの表示または
100.000.00
    ^   ^KHz の(固定小数点書き込み式)表示をしたいのですが、
何処を変更したらよいのか判りません。


コメント(0) 

比較的機能を有効に使った回路が出来ました [ディップメータ]

あくまでシミュレーションでしか確認していませんので、

回路定数は変化があると思います。

基本は3SK166のダブルゲートMESFETです。

下段を主に発振に使い上段はカスケード回路と共に、ゲート電流を検出に回しています。

発振していない電圧より0.7v高いバイアス回路を通して、PNPトランジスタ例えばA1115などで6.8kの

抵抗に電流を流し、500uAのラジケータ(ダイソウボタン電池用など)で100%振り切れます。

sIMG_0509.jpg

発信勢力は10kVR1個で調節でき停止から100%まで振れます。

(あくまで中波帯しか試していないのでもとおうえはどうなるかこれから検討します。)

WS001258.JPG

 

WS001264.JPG

視点を変えた、グラフを出します。

このMESFET内部でカスケードになっていて、
最初第1ゲートは2個の下側ソース並列とソース抵抗で、
マイナスバイアスされています。

第2ユニットのインダクタは有れば振幅が大きくなり、
電源電圧を超えます。(100uHくらいの方が良いみたいです)
無ければ電源電圧以下です。

第2ゲートは+に流し込まれていて、+に成るとSが増える方向で、
発信により上側ソース電圧が下がることで、
ゲート電流を吸い込んでゲート電流、電圧は-側に振り、

両方の第2ゲートは、パスコンでGND(1nF)されていて、
メータアンプ用TRはDC動作です。
エミッタ点をVRにするとメーターゼロが取りやすくなります。

共振回路の電圧はGNDを中心に振りますが、下側ソース電圧を超えるほど振ると、大きく電流が流れます。

c4-10pは周波数計のダミーです。

r5-6.8kはメーターフルスケールです。

WS001266.JPG

トランジスタカスケードでやって見ました。

これなら十分いけます。

ところで, 2SC3355のspiceデータはありませんか?

WS001270.JPG

 

 


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

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

×

この広告は1年以上新しい記事の更新がないブログに表示されております。