FC2ブログ
コンテントヘッダー

割り込み処理時の動作

※MSP430x2xx Family User's Guide 2.2.3 Interrupt Processing より。

他のマイコンはどうなっているのか知らないが、MSP430シリーズでは割り込みが発生した場合、
1)現在実行中の命令を完了させる。
2)スタックポインタ(SP)の値を1減じ、SPの示すアドレスにプログラムカウンタ(PC)の値を書き込む。
3)SPの値を1減じ、SPの示すアドレスにステータスレジスタ(SR)の値を書き込む。
4)最後の命令までに複数の割り込みフラグが発生していたら、その中のもっとも優先度の高いフラグを選択する。
5)割り込みフラグをリセットする。
6)SRをクリアする。このときローパワーモードも終了する。GIEビットもクリアされるので以後の割り込みも行われなくなる。
7)割り込みベクタで指定された内容(割り込み処理の開始アドレス)がPCに書き込まれる。
※2.2.3.1 Interrupt Acceptance より
という処理を行います。

以降、reti命令のあるまで割り込み処理を行います。
reti命令があったら、
8)SPの示すアドレスに書かれている「割り込みに入る前のSRの内容」をSRに書き戻し、SPを1増ずる。
9)SPの示すアドレスに書かれている「割り込みに入る前のPCの内容」をPCに書き戻し、SPを1増する。
※2.2.3.2 Return From Interrupt より
という処理を行って、メインの処理に戻ります。

このことから、割り込みに入る前と後とで割り込みの可否やローパワーモードのモードを変更したい場合には、割り込み処理においてSRを書き換えても意味が無いことが分かります。8)にあるように、割り込み処理が終わった時点でSRは割り込み処理前の内容に戻ってしまうからです。
だから、割り込みの前後でこれらを変更したい場合には、割り込み処理中に『SPの示すアドレスに書かれている「割り込みに入る前のSRの内容」を変更』しないといけません。
関連記事
スポンサーサイト



このページのトップへ
コンテントヘッダー

はんだごての補修部品

普段愛用している半田ごて「白光 MACH-I No.921」のこて先めっきがはがれてきたので、交換したいと思います。
こて先をはずしてみると、それを外から押さえている”保護パイプ”にはまってしまって外れません。無理して歪めてしまってはいけないし、たいした金額ではないだろうとこて先のほかにこれも購入することに。

まず千石電商で、カタログを見てこて先の型番を調べて、先端が少し平たくなっている「920-T-BC」を選びました。610円。ちなみに標準のこて先は先端が丸の「920-T-B」。
続いて”保護パイプ「B1788」を探しましたが千石電商には在庫がないようなので、ガード下へ戻って(有)さいとうで購入。210円。さいとうの店主に聞けば、保護パイプにこて先がはまってしまうことは良くあるようで、多くの人が一緒に求めていくようです。

家に帰ってからググって見たら、白光のホームページで補修パーツがすべて掲載されていました。
http://www.hakko.com/japan/products/hakko_mach-i_parts.html#productNav

関連記事

テーマ : アマチュア無線
ジャンル : 趣味・実用

このページのトップへ
コンテントヘッダー

半田ごてさらにその後

温度調整付き半田ごて921ZJですが、千石電商の店頭在庫が復活していました。
関連記事
このページのトップへ
コンテントヘッダー

通信販売情報(通販専門業者)

※下記は全て2011年7月20日現在。

Digi-key http://www.digikey.jp/
ローンチパッド最安(397円)。
DIPのマイコン単品は14Pのものが在庫多い。
7500円未満の注文は送料2000円かかる。
1万円以上の注文で消費税が必要。

MOUSER Electronics http://jp.mouser.com/
ローンチパッドは若干高め(451円)。
DIPのマイコン単品は14PINに加え20Pも在庫多い。
7500円未満の注文は送料2000円かかる。

チップワンストップ http://www.chip1stop.com/
ローンチパッドはかなり高い(1個1000円、10個で@676円)。

アールエスコンポーネンツ http://jp.rs-online.com/
ローンチパッドは高い(1個650円)。
DIPのマイコン単体は種類が少ない。
関連記事
このページのトップへ
コンテントヘッダー

MSP430のアドレスモード

MSP430x2xx Family User's Guide (Rev.h) 3.3より。

1.レジスタモード
レジスタ(R4~R15)を使用するモード。
例:
      mov.w  R10,R11

 R10の内容をR11に書き込む。

2.インデックスモード
レジスタの内容(値)をメモリアドレス指定に使用するモード。
使用するレジスタをカッコで囲み、その前に数字をおく。「レジスタの内容+前に置いた数字」がアドレス(番地)として指定される。
例:レジスタR5の内容が01080h、レジスタR6の内容が0108Ch、メモリ01082h(=01080h+02h)番地の内容が01234hのとき
      mov.w  2(R5),6(R6)

 01082h番地の内容(=01234h)が01092h(=0108Ch+06h)番地に書き込まれる。

3.シンボルモード
メモリアドレスを直接指定するモード。
例:
      mov.w  0F016h,01114h

 0F016h番地の内容が01114h番地に書き込まれる。
次のアブソリュートモードとの違いは、ROM上に書き込まれる数値が「プログラムカウンタからのオフセット値」になるという点。

4.アブソリュートモード
メモリアドレスを直接指定するモード。
例:
      mov.w  &0F016h,&01114h

 0F016h番地の内容が01114h番地に書き込まれる。
先のシンボルモードとの違いは、ROM上に書き込まれる数値が絶対値になるという点。

5.インダイレクトレジスタモード
レジスタの内容(値)をメモリアドレス指定に使用するモード。
例:レジスタR5の内容が01080h、レジスタR6の内容が0108Ch、メモリ01080h番地の内容が01234hのとき
      mov.w  @R5,0(R6)

 01080h番地の内容(=01234h)が0108Ch番地に書き込まれる。
インダイレクトレジスタモードはソースにしか使用できない。デスティネーションは必ず0(Rd)となる。

6.インダイレクトオートインクリメントモード
レジスタの内容(値)をメモリアドレス指定に使用するモード。但しソースに使用したレジスタの内容は自動的に増加する。
例:レジスタR5の内容が01080h、レジスタR6の内容が0108Ch、メモリ01080h番地の内容が01234hのとき
      mov.w  @R5+,0(R6)

 01080h番地の内容(=01234h)が0108Ch番地に書き込まれ、R5の内容は01082hになる。
インダイレクトオートインクリメントモードはソースにしか使用できない。デスティネーションは必ず0(Rd)となる。

7.イミディエートモード
メモリやレジスタに書き込む内容(値)を直接指定するモード。
例:
      mov.w  #053h,R13

 053hをレジスタR13に書き込む。
イミディエートモードはソースにしか使用できない。
関連記事

テーマ : アマチュア無線
ジャンル : 趣味・実用

このページのトップへ
コンテントヘッダー

半田ごてその後

18時の時点で、開封展示品を除いて残り1個でした。
関連記事
このページのトップへ
コンテントヘッダー

本日の戦利品(笑)

Weller model 921ZJ
千石電商本店で、Wellerの温度調節付き半田ごてが1980円でした。
型番は921ZJとあります。
Weller model 921ZJ
箱はかなり大きいですが、1箱に1セット入ってます。かなり重いです。
921ZJ_ペン先
ペン先は平たくなっています。

今日の時点でまだ20セットぐらいありましたが、店頭限りなのであれば来週末にはもうないのでしょう。
関連記事
このページのトップへ
コンテントヘッダー

過放電防止回路の部品表を書いてみた

過放電防止回路の部品表をまとめてみました。
番号部品名型名メーカー単価小計※単位購入先
IC1マイコンMSP430G2231NI14テキサスインスツルメンツ1
IC2基準電圧原TL431ACZ-APSTマイクロエレクトロニクス1101010個秋月
Tr1MOSFET2SJ668東芝18080千石
Tr2トランジスタRN1202東芝13030千石
R1炭素皮膜抵抗7.5kΩ 1/4W ±5%(不明)1
R2~R6金属皮膜抵抗MF1/4CC3302FKOA51050千石
R7抵抗アレイBDN-3-472GLFBIテクノロジ12020千石
C1積層セラミックコンデンサ0.1μF 50V村田製作所11010千石
J1ヒンヘッダーDF1BZ-6P-2.5DSヒロセ電機12020千石
J2ヒンヘッダーDF1BZ-2P-2.5DSヒロセ電機12020千石
P1ソケットDF1B-6S-2.5Rヒロセ電機12020千石
P2ソケットDF1B-2S-2.5Rヒロセ電機12020千石
コンタクトDF1B-R24ヒロセ電機8540千石
BC1バッテリーケース単3型 2本 リード付き(不明)580400千石
基板75×100mmサンハヤト1120120千石
合計840
簡単な回路なのに、金額が結構張ることに驚きました。
電池ケースがおおよそ半分を占めます。電池の途中の電圧を取り出すために単3型2個用のケースを5個使うからなんですが。
ちなみにR1は手持ちの物を使いました。
関連記事

テーマ : 模型・工作・おもちゃの製作日記
ジャンル : 趣味・実用

このページのトップへ
コンテントヘッダー

MSP430ローンチパッド取扱店舗情報

7月2日現在、秋葉原の千石電商本店2階で、595円で販売されています。
なお、オンラインショップでの取り扱いはなくなったようです。
関連記事
このページのトップへ
コンテントヘッダー

過放電防止回路のプログラムリスト

過放電防止回路のプログラムリストを書いてみました。
※例によって半角スペース2個を全角スペース1個に変換しています。

#include "msp430G2231.h"
#define   STOPVLT 062h          ; Discharge Stop Voltage (=1.9/2.5*(4.7/37.7)V)
;-------------------------------------------------------------------------------
      ORG   0F800h         ; Program Reset
;-------------------------------------------------------------------------------
RESET    mov.w  #0280h,SP        ; Initialize stackpointer
SetupWDT  mov.w  #WDT_ADLY_250,&WDTCTL  ; WDT 250ms interval timer
      bis.b  #LFXT1S_2,&BCSCTL3   ; ACLK = VLO
      bis.b  #WDTIE,&IE1       ; Enable WDT interrupt
SetupADC10 mov.w  #SREF_0+ADC10SHT_2+ADC10ON+ADC10IE,&ADC10CTL0
                      ; ADC refernce is VDD to VSS
      mov.b  #0111110b,&ADC10AE0   ; ADC10 correspond channel sets
      mov.w  #30,&TACCR0       ; Delay to allow Ref to settle
      bis.w  #CCIE,&TACCTL0     ; Compare-mode interrupt.
      mov.w  #TACLR+MC_1+TASSEL_2,&TACTL ; up mode, SMCLK
      bis.w  #LPM0+GIE,SR      ; Enter LPM0, enable interrupts
      bic.w  #CCIE,&TACCTL0     ; Disable timer interrupt
      dint

SetupP1   mov.b  #000h,&P1REN      ; Disable P1 Pullup/Pulldown Resistor
      bis.b  #01h,&P1DIR       ; P1.0 output
      mov.b  #01h,&P1OUT       ; P1.0 = 1

      mov.w  #010h,R12        ; Count LOWVOLTAGE

main    bis.w  #LPM0+GIE,SR      ; LPM0, enable interrupts
      nop               ; Required only for debugger

;-------------------------------------------------------------------------------
WDT_ISR;  Charge Control
;-------------------------------------------------------------------------------
      mov.w  #STOPVLT,R13      ; Discharge stop voltage set to R13
      mov.w  #05000h,R15       ; ADC10 INCHx set to R15
Subloop   bic.w  #0F000h,&ADC10CTL1   ; ADC10 INCHx clear
      bis.w  R15,&ADC10CTL1     ; ADC10 INCHx sets from R15
      bis.w  #ENC+ADC10SC,&ADC10CTL0 ; Start sampling/conversion
      bis.w  #LPM0+GIE,SR      ; LPM0, ADC10 ISR will force exit
      bic.w  #ENC,&ADC10CTL0
LOVLTCMP  cmp.w  R13,&ADC10MEM      ; Compare ADC10MEM & R13
      jlo   LOVOLTAGE        ; IF ADC is low then jump to LOVLOTAGE
DECR_AX   cmp.w  #01000h,R15       ; IF INCHx = A2
      jz   WDTISREND        ; RETURN
      mov.w  &ADC10MEM,R13      ; Set BATT voltage to R13
      add.w  #STOPVLT,R13      ; Add STOPVLT to R13
      sub.w  #01000h,R15       ; ADC Channel change
      jmp   Subloop         ; loop
LOVOLTAGE  dec   R12           ; Countdown R12
      jnz   DECR_AX         ; If R12 = 0
      bic.b  #01h,&P1OUT       ; P1.0 = 0
      clr.b  &IE1          ; Disable interrups, don't work any more.
WDTISREND  reti              ; RETURN

;-------------------------------------------------------------------------------
TA0_ISR;  ISR for TACCR0
;-------------------------------------------------------------------------------
      clr.w  &TACTL         ; Clear Timer_A control registers
      bic.w  #LPM0,0(SP)       ; Exit LPM0, interrupts enabled
      reti              ;

;-------------------------------------------------------------------------------
ADC10_ISR; Exit LPM0 on reti
;-------------------------------------------------------------------------------
      bic.w  #LPM0,0(SP)       ; Exit LPM0 on reti
      reti              ;

;-------------------------------------------------------------------------------
;      Interrupt Vectors
;-------------------------------------------------------------------------------
      COMMON INTVEC         ; Interrupt Vectors
;-------------------------------------------------------------------------------
      ORG   ADC10_VECTOR      ; ADC10 Vector
      DW   ADC10_ISR
      ORG   TIMERA0_VECTOR     ; Timer_A0 Vector
      DW   TA0_ISR
      ORG   WDT_VECTOR       ; WDT Vector
      DW   WDT_ISR
      ORG   RESET_VECTOR      ; POR, ext. Reset
      DW   RESET
      END
関連記事

テーマ : アマチュア無線
ジャンル : 趣味・実用

このページのトップへ
このページのトップへ
無料アクセス解析
Adobe Flash Player を取得
プロフィール

@ぽっけ

Author:@ぽっけ
底辺Makerを自負する@ぽっけが日々製作している「初歩の電子工作」の記録です。
自分で「あっ、あれ欲しい!」と思ったものを猪突猛進、地で製作しています。

★略歴

電子工作は中学のとき、授業でやるよりも早く自分で始めました。・・・といっても小遣いも少なく技術も未熟だったので、ラジオを作るのさえもやっとでした。

高校・大学でも工作を続け、大学在学中にようやくトランジスタ回路の基礎が理解できるようになってきました。

大学卒業後はメーカーに就職し設計職で忙しい毎日を過ごす中で工作からは遠ざかっていましたが、事務職に配転となり時間に余裕ができてまた工作を始めました。そんな中で2011年のCP+(カメラショー)併設展の「Business Meets」に出展していたテキサス・インスツルメンツのブースで「MSP430 Launchpad」に出会ってから、マイコンを使った電子工作を始めました。

また、鉛フリーはんだに興味を持って、10数種類のはんだをリールで購入。個人で使うには約1200年分の在庫を持つという暴挙を成し遂げ(?)ました。

★イベント出展実績
●Make: Tokyo Meeting 07
●Make: Ogaki Meeting 2012
●Maker Faire Tokyo 2012
●ニコニコ超会議「作ってみタワー ワークショッププロジェクト」
●NT金沢2013
●Maker Faire Tokyo 2013
●ポタアン自作er展示会 atポタ研2014冬
○NT金沢2014(予定)

☆TwitterID:
  @pokke_yamada

FC2カウンター
カテゴリ
最新記事
月別アーカイブ
リンク
最新コメント
最新トラックバック
RSSリンクの表示
検索フォーム
QRコード
QR
ブロとも申請フォーム

この人とブロともになる