2016年12月29日

オープンソースのKiCADでLPC824のDIP化基板を作ってみる(29) スイッチを使ってみる(2)

なぜ、スイッチを押しても0(GND)にならないか?

半田不良ではなさそうです。

自分で書いた回路図を見直してみます。

Image 360.png

大ミスです。
3.3Vに吊っておいて、スイッチを押したらGNDに落ちる ようにしていたつもりが
GNDには接続されておらず、スイッチを押したら3.3Vに吊られるようになっていました。


困りました。。


ちょっと考えてみると、スイッチを押しても押さなくても1になる。

ということはLPC824はプルアップされている?

じゃん太を外して、ピンを浮いている状態にしてもやはり1のままです。


プルアップされている、ということはプルダウンもできるのでは?


調べてみたところ、lib_lpc_chip_82xのipcon_8xx.cに
/* Set the pin mode (pull-up/pull-down). */
void Chip_IOCON_PinSetMode(LPC_IOCON_T *pIOCON, CHIP_PINx_T pin, CHIP_PIN_MODE_T mode)
{
 uint32_t reg;
 reg = pIOCON->PIO0[pin] & ~(PIN_MODE_MASK);
 pIOCON->PIO0[pin] = reg | (mode << PIN_MODE_BITNUM);
}

という関数を見つけました。

mainに追記してみます。


int main(void)
{
  static int pin_state = 0;
  int prev_state;
  static int count = 0;
   
 SystemCoreClockUpdate();
 Board_Init();
 Board_LED_Set(0, false);
 
        Chip_IOCON_PinSetMode(LPC_IOCON, IOCON_PIO1, PIN_MODE_PULLDN);      
        Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, 1);
 
 /* Enable SysTick Timer */
 SysTick_Config(SystemCoreClock / TICKRATE_HZ);
        prev_state = Chip_GPIO_GetPinState(LPC_GPIO_PORT, 0, 1);
      
       
 /* Loop forever */
 while (1) {
  //__WFI();
          pin_state = Chip_GPIO_GetPinState(LPC_GPIO_PORT, 0, 1);
          if(pin_state != prev_state)
          {
            prev_state = pin_state;
            count++;
          }
         
 }
}

無事動作しました!
スイッチを押していないときは0,押しているときは1。

チャタリング防止を回路上入れていないので、雑に押すと
数カウントアップします。

まあ、ソフト的に対応可能ですね。

Image 361.png


回路図 間違えてしまいましたが
なんとかリカバリーできました^^
posted by EWRXJP at 12:00| Comment(0) | TrackBack(0) | NXP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/444679658
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック