goo blog サービス終了のお知らせ 

マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

PICのBOOTLOADER一覧

2011年04月27日 | 電子工作
実用的なPICを目指して、Bootloaderの動作に挑戦しているが私のスキルがいまいちのため、思うように先に進んでいない。

現在試しているのは本家本元Microchip社のAN1310 PIC16/PIC18デバイス用高速シリアルブートローダーです。
もともとRS-232Cで接続するものを秋月のFT232RLを介して通信しようとするから、できるものもできなくなっているのではないかと思っています。
いいわけですが、我が家のパソコン側には今では貴重になったRS-232C端子があるのですが、ブレットボード側にRS-232C端子がないので接続ができない・・・・
とりあえず、今度アキバへ言ったときにでもそこら辺を物色してこようと思っています。

ネットで検索すると他にも試してみたいBootloaderがあります。

サイト名bootloader名対象PIC
MicrochipC.comPIC16BOOTLOAD: PIC16F87x / PIC16F87xA bootloaderPIC16F87x / PIC16F87xA
sparkfunBloader and Screamer 877APIC16F877A
highschoolrobots.comTiny BootloaderPIC16F88
Claudiu Chiculita
Tiny PIC bootloader

などなどさまざまなBOOTLOADERがあります。

ぜひともUSBで使用できるBOOTLOADERを開発してください。
しかも簡単に!!
よろしくお願いいたします。

逆にさまざまなPICに対応ではなくあるPICに的を絞って、HEXファイルで配布しても良いかもしれません。
手間無く、挫折無しで行きたいモノです。

PICでA/D変換をしてみた

2011年04月16日 | 電子工作
あいかわらず、PICを理解するのは一苦労だ。
おかげで、英語アレルギーが少しは治ってきたような気がする。
ただ、学生の頃にこんなに英語に接していたら今のオレはなかっただろうな・・・

A/D変換を理解するだけで、貴重な休日を丸々一日費やしてしまった。
なんとかならんものかのぉー

今回の落とし穴は数々あったが、一番の落とし穴は抵抗無しのLEDを5つ以上PICに繋ぐと誤動作をすると言うことに気がつかなかったことです。
「お約束は守りましょう」と言うことです。

とりあえず、サーミスタを接続して、温度測定みたいなことをしています。

// Analog to Digital Converter
// PORTB = LED * 8
// RA2 = Variable Register
// Internal OSC

#include "pic16f88.h"
#include "htc.h"
#define _XTAL_FREQ 8000000

__CONFIG(FOSC_INTOSCIO & WDTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & WRT_OFF & DEBUG_OFF);
//intrc & watch dog off & BOR disabled & Low-Voletage disabled & Write protection off & Degugger enabled

void init(void){
OSCCONbits.IRCF = 7; //Inernal RC Oscillater Frequency = 8MHz
OSCCONbits.SCS = 0; //
CCP1CONbits.CCP1M = 0;
TRISA = 0b00000100; //RA2=Input Other=Output
TRISB = 0b00000000; //All=Output
ANSEL = 0b0000100; //RA2 = Analog,Other = Digital
ADCON1bits.VCFG = 0b00;//A/D Voltage Reference
ADCON0bits.CHS = 0b010;
ADCON1bits.ADCS2 = 0b0;
ADCON0bits.ADCS = 0b10;
ADCON0bits.ADON = 1;
ADCON1bits.ADFM = 1;
GIE = 0;
PEIE = 0;
}

void main(void){
init();
while(1){
ADCON0bits.GO_DONE = 1;
while (ADCON0bits.GO_DONE);
PORTB = ADRESL;
RA0 = ADRESH & 0b1;
RA1 = (ADRESH >> 1) & 0b1;
__delay_ms(1000);
}
}

PICのチャタリング対策-改

2011年04月10日 | 電子工作

昨日、プログラムを書いている間も腑に落ちなかった。
「プログラム中にあるwhileは3つ必要なのだろうか・・・」

今朝、会社に向かう自転車の上で「やっぱりいらない」と結論づけをした。

帰宅後、修正しました。
前回よりもレスポンスを良くしました。

ゲームセンターあらしのように「1分間に何回連打できるか」なんてソフトを作ってみてみても良いかも・・・

Microchip社のPICを使ってみた。

2011年04月09日 | Weblog

Arduinoのすばらしさが分かってきたので、原点回帰と言うことでPICに戻ってみました。

しかし、PICは使い始めるまでの予備知識が半端じゃない。
まず、PICマイコンにはいろいろな種類があって「このPICはこれができるけど、このPICじゃこれはできない」を知らなければいけない。
プログラム言語もアセンブラからC言語まである。いまさらアセンブラでもないのでC言語を使おうと思っても、ネットでの情報はアセンブラがほとんどでC言語は少ない。さらに対応しているC言語はいろいろなメーカーから出ていて、フリーのものじゃライブラリーが少ないだの。ネットでチュートリアルを見つけてもC言語の種類が違うので参考にもならないだの。
マイコンにプログラムを書き込むのにライターが必要だの。このPICにはこのライターで書けるけど、他のPICはこのライターでは書き込めないので別のライターが必要だの。
プログラミングをするためのOSがほぼWindowsに固定されていて、UbuntuでやろうとしてもPICのメーカーであるMicrochipからの正式なサポートがないソフトだとか、オープンソースのソフトがあるにはあったのですが、C言語のコンパイルはできたけど、最新のライターのファームウェアには対応していないので書き込みができないだの。結構時間をかけましたが、私のスキルではUbuntuでPICを使うことはできませんでした。

とにかく、めんどくさい。

「Arduinoに戻っちゃおうかな」とあきらめ半分・・・・・・

苦節、数日。
やっとこさ、PIC16F88にLEDを点灯することができました。

5000円で買ったライターが無駄にならなかった。よかったよかった。

使えるようになるとPICのすばらしさが分かるのですが、使えるようになるまでの壁が高すぎます。これが初心者が敬遠する原因になってしまうのだと思います。
取っつきやすさではArduinoはピカイチ。

参考資料