PIC18F23K20 電子工作を始めよう #5 LEDフラッシャー改

今回は前回のLEDフラシャーのプログラムに改良を加えます。

タイマー割込みを使うことで、点滅タイミング切り替え時

長押しをしなくてよくなります。

またスイッチを押している間点滅が停止することもなくなります。

 

PIC入門GUIプログラミング#5LEDフラッシャー改 - YouTube

【ゆっくり】PIC入門GUIプログラミング#5LEDフラッシャー改 by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

完成形のプログラムを提示します。

main.c

/**
Generated Main Source File

Company:
Microchip Technology Inc.

File Name:
main.c

Summary:
This is the main file generated using MPLAB(c) Code Configurator

Description:
This header file provides implementations for driver APIs for all modules selected in the GUI.
Generation Information :
Product Revision : MPLAB(c) Code Configurator - 4.15
Device : PIC18F23K20
Driver Version : 2.00
The generated drivers are tested against the following:
Compiler : XC8 1.35
MPLAB : MPLAB X 3.40
*/

/*
(c) 2016 Microchip Technology Inc. and its subsidiaries. You may use this
software and any derivatives exclusively with Microchip products.

THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.

IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.

MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
TERMS.
*/

#include "mcc_generated_files/mcc.h"

/*
Main application
*/
#define LED0 PORTAbits.RA0
#define LED1 PORTAbits.RA1
#define LED2 PORTAbits.RA2
#define LED3 PORTAbits.RA3
#define SW0 !PORTBbits.RB0
#define SW1 !PORTBbits.RB1
#define SW2 !PORTBbits.RB2
#define SW3 !PORTBbits.RB3

void interrupt_10ms(void);
int mode=0;
void main(void)
{
// Initialize the device
SYSTEM_Initialize();

// If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
// If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
// Use the following macros to:

// Enable high priority global interrupts
//INTERRUPT_GlobalInterruptHighEnable();

// Enable low priority global interrupts.
//INTERRUPT_GlobalInterruptLowEnable();

// Disable high priority global interrupts
//INTERRUPT_GlobalInterruptHighDisable();

// Disable low priority global interrupts.
//INTERRUPT_GlobalInterruptLowDisable();

// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();

// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();

// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();

// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();

TMR0_SetInterruptHandler(interrupt_10ms);
unsigned int i;
while (1)
{
// Add your application code
switch(mode){
case 0:
LED0=1;
LED1=1;
LED2=1;
LED3=1;
for(i=0;i<30000;i++);
LED0=0;
LED1=0;
LED2=0;
LED3=0;
for(i=0;i<30000;i++);
break;
case 1:
LED0=1;
LED1=0;
LED2=1;
LED3=0;
for(i=0;i<30000;i++);
LED0=0;
LED1=1;
LED2=0;
LED3=1;
for(i=0;i<30000;i++);
break;
case 2:
LED0=1;
LED1=1;
LED2=0;
LED3=0;
for(i=0;i<30000;i++);
LED0=0;
LED1=0;
LED2=1;
LED3=1;
for(i=0;i<30000;i++);
break;
case 3:
LED0=1;
LED1=0;
LED2=0;
LED3=1;
for(i=0;i<30000;i++);
LED0=0;
LED1=1;
LED2=1;
LED3=0;
for(i=0;i<30000;i++);
break;

}
}
}

void interrupt_10ms(void){
if(SW0) mode=0;
if(SW1) mode=1;
if(SW2) mode=2;
if(SW3) mode=3;

}
/**
End of File
*/

 

 

PIC18F23K20 電子工作を始めよう #4 LEDフラッシャー

前回はLチカまでやりましたので、今回はLEDフラッシャを作ります。

自転車のライトとかスイッチを押すたびに発光パターンがかわりますよね。

アレをつくります。

回路にLEDとスイッチを追加しましょう。

回路図はこちらです。

f:id:Hamakita:20170416181840p:plain

単純にLEDとスイッチを追加するだけです。

スイッチをつないでるピンが抵抗を介してVCCへ接続されているわけは、

もしこの抵抗がないと、スイッチが押されていない時にピンが

どこにもつながっていない状態になります。つまり0か1かわからない状態となります。

これではまずいのでスイッチを押したら0押されていないときは1となるように抵抗を介してVCCへ繋いでます。このような抵抗の事をプルアップ抵抗と呼んだりします。

直接VCCに繋ぐとスイッチを押したときにショートするので抵抗を介してるわけです。

完成したハードウェアは次のようになります

f:id:Hamakita:20170416182422p:plain

プログラミングの方は動画を製作したのでこちらをご覧ください。

youtube

pic18F23K20 LEDフラッシャー - YouTube

ゆっくり解説版

【ゆっくり】PIC18F23K20 LEDフラッシャーを作る - YouTube

ニコニコ動画

pic18f23k20 LEDフラッシャー by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

 ゆっくり解説版

【ゆっくり】PIC18F23K20 LEDフラッシャーを作る by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

#5へ続く

 

 

PIC18F23K20 電子工作を始めよう #3 Lチカ

LED点滅をします。

マイコン工作ではまず初めにLED点滅をしてみるのが定番なのです。

Lチカと言われています。

ハードウェアは#1で制作したものを使用します。

PICとPICkit3の接続方法を説明します。

PICkitは1ピンから順に

  1. MCLR
  2. VDD
  3. GND
  4. PGD
  5. PGC
  6. PGM(このピンは使いません)

です.

1ピン、4ピン、5ピンはPICのデータシートを見れば、同じ名前の端子があるはずなので

そこへ繋ぎましょう。

PIC18F23K20の外形図は次のようになっています。

f:id:Hamakita:20170408202839p:plain

1ピン、27ピン、28ピンにそれぞれ割り当てられているのでそこへ繋ぎましょう。

PICkit3の2ピン、3ピンは電源線です。2ピンはプラスに3ピンはマイナスに繋ぎましょう。

正しく接続されれば写真のような形になります。

f:id:Hamakita:20170404234453j:plain

写真ではブレッドボードの上下の電源ラインをつなぎ忘れてますが、ジャンパーでつないで下さい。

Lチカのプログラムは動画を製作したのでこちらをご覧ください。

youtube

youtu.be

ニコニコ動画

PIC18F23K20 MCCによるLチカ by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

#4へ続く

PIC18F23K20 電子工作を始めよう #2 MPLAB X IDEインストール

PICをC言語により開発するために開発環境を構築します。

動画での解説もしております。

youtube

youtu.be

ニコニコ動画

MPLAB X IDE インストール方法 MCCまで by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

 

 

  1. MICROCHIP社のホームページにアクセス
    http://www.microchip.com/

  2. MPLAB X IDEのページへ移動

  3. 画面下のDownloadsからMPLAB X IDEをダウンロード

  4. Download ArchiveからXC8コンパイラをダウンロード
  5. それぞれインストーラを起動しインストールしてください。
  6. インストール完了したらIDEを起動します。
  7. Tollos/Pluginsをクリック
  8. Available PluginsよりMPLAB Code Configuratorを選択しInstallをクリック

以上です。動画の方がわかりやすいと思いますのでよければそちらを見てください。

#3へ続く

 

PIC18F23K20 電子工作を始めよう #1

PIC18F23K20を用いて電子工作入門記事を書いていきます。

開発環境は

microchip社のMPLAB X IDEとMPLAB Code Configurator

今回は使用部品の紹介です。

 

電子工作界では有名な秋月電子から購入できるものを使用します。

この記事で紹介する部品は

マイコンの初歩であるLチカ(LED点滅)を行う最低限の部品です。

PIC18F23K20

使用するマイコンです。MCCがサポートされている点、安価な点でこちらを採用

http://akizukidenshi.com/catalog/g/gI-05383/

※現在は秋月電子で販売していないようです。

かわりにこちらを使いましょう。

http://akizukidenshi.com/catalog/g/gI-05397/

PICkit3

PICに書き込みを行うためのツールです。お高め。

http://akizukidenshi.com/catalog/g/gI-05383/

ブレッドボード

回路の実験用に使われる板です。

http://akizukidenshi.com/catalog/g/gP-09257/

ジャンパー線

ブレッドボード上での配線を行います。

http://akizukidenshi.com/catalog/g/gP-02315/

LED

LEDです。

http://akizukidenshi.com/catalog/g/gI-01318/

タクトスイッチ

スイッチを押すことでショートさせます。

http://akizukidenshi.com/catalog/g/gP-03646/

カーボン抵抗

1kΩLED用

http://akizukidenshi.com/catalog/g/gR-25102/

10kΩプルアップ、ダウン用

http://akizukidenshi.com/catalog/g/gR-25103/

セラミックコンデンサ

0.1ufバイパスコンデンサ用

http://akizukidenshi.com/catalog/g/gP-00090/

部品を買い揃えたら以下の回路図のようにブレッドボードへ組みましょう。

配線する際はpicのデータシートの外形図を参考にするとよいでしょう。

http://akizukidenshi.com/download/ds/microchip/PIC18F23K20_24K20_25K20_26K20_43K20_44K20_45K20_46K20.pdf

 

 

f:id:Hamakita:20170404231133p:plain

pic18f23k20のパーツライブラリがなかったので21~28ピンはピン割り当てが少し違うので注意。今は気にしなくてよいです。

ブレッドボードへは下の例を参考に配線してください。

黒い基板はブレッドボード用の電源基板です。12vから5vと3.3vを流してくれます。

3.3vマイコンなので3.3vを流してください。

アマゾンで購入できます。便利なのでおすすめです。

https://www.amazon.co.jp/gp/product/B010PZZX74/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

12vACアダプターはこのあたりが使えます。

http://akizukidenshi.com/catalog/g/gM-06642/

f:id:Hamakita:20170404234410j:plain

今回はここまで

#2へ続く

 

 

100円ジャンクパソコンをスペックアップ

 

行きつけのジャンクショップではなく、新品パーツ中心のお店の

小さなジャンクコーナーにて見つけました。

フルタワーのジャンクPCです、なんと驚きの100円!

すぐさまレジへもって行き購入しました。

購入時パソコンはしばってあったため、中身を見ることができませんでしたが、

隙間からPCIe端子やSATA端子、どでかいCPUファンが見えたため、パーツ取りに

使えると思ったしだいです。

f:id:Hamakita:20170404174800j:plain

しかしこのパソコンは思ったほど古くなく、LGA775世代のマザーボードを積んでいました。購入当初のスペックは以下の通りです。

  • CPU pentiumD 3Ghz
  • マザー ASUS P5LD2
  • メモリ 512MB x2
  • GPU winfast PX6600 TD

早速電源スイッチを押してみましたが

電源が入りませんでした。。。。

数か月ジャンク品を漁った勘でおそらく電源が他界しておられると予想、

電源を交換したら無事動いてくれました。

HDDはついてなかったので別で買ってきました。ジャンクで約700円です

本体より高い(ー。ー;)

 

この100円君がどれほどのスペックなのか測るためOSを入れていきます。

インストールするのはwindows7 enterpriseです。少しでも軽くするため32bitを入れます

各種ベンチマークの結果は以下の通りです。

f:id:Hamakita:20170309132414p:plain

 

 

ここからできる限り100円君のスペックアップを目指していきたいと思います。

ただし、金にものを言わせても面白くないので、全てジャンク品で運よく入手できた

部品でスペックアップをしていきたいと思います。

このマザーボードオーバークロックに対応しているので、こちらもいじっていきたいと思います。

メモリを1Gx4の計4GBへ

 さらにGPUを9800GTへ交換をしました。

f:id:Hamakita:20170309132434p:plain

 ドラクエ10のような軽めのゲームなら動かせるようになったようです。

次にCPUをオーバークロックしてみます。

電圧もいじってみましたが、自分の環境だと3.6Ghzが限界のようです。

これ以上の周波数だと、OSは起動しますが、ベンチ中に動作が停止しました。

f:id:Hamakita:20170309132452p:plain

このマザーボードLGA775ソケットではあるものの、

core2duoには対応していませんでしたので、CPUのスペック向上はこれ以上はできません。(マザーボードホームページによるとPCB,Rev2では対応している模様)

結果として、軽いゲームなら動く程度にはなりました。ネットサーフィンなどの用途であれば、消費電力を気にしなければ充分使えるでしょう。

Blancco消去されたHDDにOSをインストール

最近マザーボードの調子がおかしい

具体的にはPCいじってると突然固まってしまう。

HDDアクセスランプの点滅が完全に消えているのでおそらく

SATA関連で不具合が起き、接続がきれてしまっている。

このマザボでは光学ドライブがつながったりつながれなかったりする事を確認ずみなので、おそらく原因はマザボにあると踏んでいる。

ジャンクで買ってきたマザボなのでしょうがない・・・

しかし、OSインストールしているSSDの故障とも考えれれるので(SSDも中古)別のHDDへクローンして様子をみることに、

そして、ジャンクでHDDを購入しクローンした。

さっそくクローンしたHDDからブートしようとしたら、Blanccoと大きく書かれた画面が表示されてwindowsが起動できなかった。

調べてみると、Blanccoで消去されたHDDはそのログが残りブートの邪魔をするらしい。解決方法を忘れないようにメモしておく。

  1. windowsインストール用のDVDを用意
    (今回はwindows7のものを使用,修復したのはwindows10ですが大丈夫です)
  2. 問題のHDDと光学ドライブをPCへ接続しDVDからブート
  3. システムの回復からコマンドプロンプトを起動
  4. bootsect(スペース)/nt60(スペース)sys(スペース)/mbrと入力
  5. PCを再起動しHDDからブート