So-net無料ブログ作成
検索選択
種々雑感 ブログトップ

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) 

自然放射能と人工放射能 [種々雑感]

先日、M氏の番組で自然放射能が高い地方があり、そこの方々は福島の状況を見て、

高いと思わない・・云々、と言われておられた。

その時 M氏の表情が引きつっていたのが印象に残る 。

確かに自然放射能が高い地域があり、京都の嵐山「大文字」の近くに「褐簾石」という石があって

放射性元素を含んだ鉱物研究の先駆けと成ったそうです。

重要なのは短半減期の放射性元素も娘核種、孫核種 が放射能を持つ場合、短い半減期のものほど

強い放射線を出し、全体的に平衡した状態で放射線を出し続ける。

総合的な 放射線強度を問題とすべきで、有る瞬間、有る核種のみの放射線を問題にすべきではない。

また、アルファ線のように内部被曝が外へ出ずに近傍のみに多大な影響を与えるかどうかも問題である。

(内部のα崩壊は一部γ線を生じるのでそれを測定することが出来るが、極弱く、その何倍ものα線による障害を予測される)

どうか外部被曝と内部被曝を同列で考えないで頂きたい。

 

自然放射能は宇宙線由来、ウラン系元素、ラジューム系由来などがあり、

http://ja.wikipedia.org/wiki/%E5%B4%A9%E5%A3%8A%E7%B3%BB%E5%88%97

によりますと以下のようになるようです。

普通は偶数系列で一部奇数があるが奇妙な振る舞いをすることがあり注意が必要です。

トリウム系列

トリウム232 から鉛208 に至る系列をトリウム系列という。質量数 4n の核種から成る。

ウラン系列 (ラジウム系列)

ウラン238 からラジウム226 を経て鉛206 に至る系列をラジウム系列、またはウラン系列と呼ぶ。質量数 4n+2 の核種から成る。

アクチニウム系列

ウラン235 からアクチニウム227 を経て鉛207 に至る系列をアクチニウム系列と呼ぶ。質量数 4n+3 の核種から成る。

ネプツニウム系列

ネプツニウム237 からビスマス209、タリウム205 に至る系列をネプツニウム系列という。質量数 4n+1 の核種から成る。ビスマス209以前の核種は全て半減期が短いため、天然にはほとんど現存しない。

ベータ崩壊系列

原子核は重くなるほど安定であるために必要な中性子/陽子数 比が大きくなり、核分裂反応を起こすような重い原子核は陽子に比べて中性子の比率がはるかに大きい。このため、核分裂により生成した核種は、その質量数で 安定な状態に比べて中性子/陽子数比が高い状態にある。これらの核分裂生成核種は複数のベータ崩壊を連続して起こして中性子を陽子に変換してゆき、その質 量数で安定な中性子/陽子数比へ近づいてゆく。最初の崩壊は比較的高い崩壊エネルギーと短い半減期を有するが、最後の崩壊では崩壊エネルギーが低くなった り半減期が長くなる。

例えば、ウラン235は 92個の陽子と143個の中性子を持っている。核分裂においては1つ中性子を取り込み、その後に2つまたは3つ以上の中性子を生成する。つまり、最大で 92個の陽子と142個の中性子からなる2つの核種に核分裂する。生成される2つの核種の例としては質量数99(39個の陽子と60個の中性子)のイットリウム-99、および 質量数135(53個の陽子と82個の中性子)のヨウ素-135 があげられる。

この崩壊系列は、次のようになる。

核種 半減期
99Y 1.470(7) 秒
99Zr 2.1(1) 秒
99Nb 15.0(2) 秒
99Mo 2.7489(6) 日
99Tc 2.111(12)E+5 年
99Ru 安定
核種 半減期
135I 6.57(2) 時間
135Xe 9.14(2) 時間
135Cs 2.3(3)E+6 年
135Ba 安定

系列を構成しない天然放射性同位元素

宇宙線によって生成されている放射性核種を除いた、系列を構成しない天然放射性核種も存在する。これらは地球誕生時から存在し続けているが、新たに宇宙線の作用によって生成されることもある。 これらの内、カリウム40は経口摂取による体内被爆の大きな原因である。

参考としてそれら核種を表で示す。娘核種は安定である。

核種 半減期 娘核種
核種 半減期 娘核種
40K 1.3×109 40Ca(88.8%)
40Ar(11.2%)
  48Ca 4.3×1019 48Ti
50V 1.5×1017 50Ti(83%)
50Cr(17%)
  76Ge 1.8×1021 76Se
82Se 1.1×1020 82Kr   78Kr 2.3×1020 78Se
87Rb 4.8×1010 87Sr   94Zr 1.1×1017 94Mo
96Zr 2.0×1019 96Mo   100Mo 7.8×1018 100Ru
113Cd 9.0×1015 113In   115In 4.4×1014 115Sn
116Cd 2.9×1019 116Sn   120Te 2.2×1016 120Sn
123Te 1.3×1013 123Sb   128Te 2.2×1024 128Xe
130Te 7.9×1020 130Xe   138La 1.3×1011 138Ba(65.6%)
138Ce(34.4%)
147Sm 1.1×1011 143Nd   149Sm 2.0×1015 145Nd
150Nd 6.7×1018 150Sm   160Gd 1.3×1021 160Dy
174Hf 2.0×1015 170Yb   176Lu 3.8×1010 176Hf
180W 1.8×1018 176Hf   186Os 2.0×1015 182W
187Re 5.0×1010 187Os(100%)
183Ta(<0.001%)
  190Pt 6.0×1011 186Os
204Pb 1.4×1017 200Hg   209Bi 1.9×1019 205Tl

 

天然放射性核種はアルファ崩壊系列を成す。

核種 半減期
156Dy 1.0×1018
152Gd 1.1×1014
148Sm 7.0×1015
144Nd 2.4×1015
140Ce 安定

 

補足です 内容がダブっている部分があり校正していませんがご勘弁下さい。


昔の大気中から降った放射性物質の量や近海の海水中の放射性物質の量に関する記事が掲載されている刊行物です:
1960年代には、1㎡当たり、数百ベクレル/月の放射性物質が降り続いていたようです。
人体への、この影響に関する医学文献を知りたいものです。
Hirose, K., Y. Igarashi, M. Aoyama, Analysis of the 50-year records of the atmospheric deposition of long-lived radionuclides in Japan. Applied Radiation and Isotopes, 66, 1675-1678, 2008.

と言う件があって

最近番組でこの手の蒸し返しがありました。
元々自然放射能の多い地域の方は、福島は多いと思わない・・云々。
司会のM氏はどうも顔が引きつっていたようなきもいたします。

私の考えでは各地自然放射線があり、その地の方はそれに耐えて生きてこられて
いると解釈しています。

さて新たに増えた地域はその変化に耐えるのにどのくらいの期間を要するのかは
ブラックボックス。

そこで世界で集まって年1ミリシーベルトまでを限度としよう、と決めてと思っ
ています。

従って現実に増えたから、それに合わせて基準値を水増しするのはいかがなものか?
また線種や内部外部の区別により評価は大きく異なるので、
核種変遷、娘核種孫核種が放射能を持つ場合は総合的な放射能平衡状態
に成りその線種や線量を総合的に考える必要があります。
(ほとんどの場合元の線量より多いようです)

新たに規格を決めるのであればそれなりの決め方をしなければ成りません。
ゴヨウと言われる方が音頭を取って勝手に決めてしまうのは言語道断、
(やらせ公聴会のように)

また諸外国の方の言うには優秀な日本ですら福島を解決できない、
まして我々はこれからどうすべきか等と聞きます。

過去の実験に置いて現実に相当被曝したのは確かですし、
日本の特殊性(多雨気候で結構早く海に流れ、広い海は相当の被曝を許容してく
れた)のも事実のようです。

しかしと言ってこれからも被曝の機会を増やすことばかり考えるのも、
問題です。

上の分は以前紫外線ランプや山が名刺代わりに配っていたのににていますね。

下の分は有名な御用学者「福士政広教授」の監修ですから、心して使う必要があ
ります。
年1ミリシーベルト(0.11マイクロシーベルト時)を越えるときは危険と判
断しようと思っています。

ベクレルに関して100ベクレルを超えないよう、品目は多岐にわたるので
1品目10ベクレルを越える分を食べたら、要注意、吸い込んだら戦慄ものです。
内部に入って有るハー線を出しているものは計れず、全くの盲目状態ですから・・
 


コメント(0) 
種々雑感 ブログトップ
メッセージを送る

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

×

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