2012-10-07

メモリー制限のないHI-TECH C で12F629を使う

いままでPICはmikroBASICを使っていましたが、ちょっと凝ったプログラムを組むと2kの壁にぶつかり思うようにできていませんでした。
そこで、無償のMAPLABで使える無償でメモリー制限の無いHI-TECH C とC18を使ってみるもとにしました。

CONFIGとか初期設定がPIC毎に重要になってくるので、覚書としてブログに投稿しています。

まずは手持ちのPICを 12F629を試してみることにしました。
Googleで検索して調べながらしましたが、どうもHI-TECH CのバージョンによりCONFIGビットの書き方が違うようでかなり悩みました。検索すると古いバージョンのサンプルが多いようです。

__CONFIG(UNPROTECT & MCLRDIS & BORDIS & PWRTEN & WDTDIS & INTIO) ;
このパターンは古いバージョンとなり、ソースの先頭に
#define _LEGACY_HEADERS
が必要になります、このおまじないをつければ、古いバージョンのソースが使えます。

ここでつかったサンプルソースは新しいバージョンのCONFIGです。
#define _LEGACY_HEADERSは必要ないのでコメントにしています。

ソースは以下の通りです。

 
// test001.c
//#define _LEGACY_HEADERS
 
#include "pic.h"
#include  // Required to interface with delay routines
 
#ifndef _XTAL_FREQ  
// Unless already defined assume 4MHz system frequency  
// This definition is required to calibrate __delay_us() and __delay_ms()  
#define _XTAL_FREQ 4000000
#endif


 
__CONFIG(CP_OFF & BOREN_OFF & MCLRE_OFF & PWRTE_OFF & WDTE_OFF & FOSC_INTRCIO); //Idoling current 0.06uA
 
void main(void){
  int i;
 
  GPIO=0;
  CMCON = 0b00000111;
  TRISIO = 0b00000000;
  //ANSEL = 0x00;  

  while(1){
    for (i=0;i<5 p="p">      GPIO=0b00111111;
      __delay_ms(30);
      GPIO=0b00000000;
      __delay_ms(70);
    }
     __delay_ms(50);
 
    for (i=0;i<2 nbsp="nbsp" p="p">      GPIO=0b00111111;
      __delay_ms(30);
      GPIO=0b00000000;
      __delay_ms(170);
    }
  __delay_ms(500);
 }

}


2011-12-19

ジュールシーフ

http://pc.watch.impress.co.jp/docs/column/musashino_proto/20091008_320118.html?mode=pc
ここのサイトで紹介されているジュールシーフをブレッドボードで試しているところです。
使い古した電池でつけっぱなしで3日目、0.5vまで電圧が下がっていますが、まだついています。
以前、ガーデニングライトの回路図を調べた時に間違って書いた回路、そのものです。

2011-10-16

VBAUSBIO.DLL V1.00 公開間近!!

久々の書き込みになります。

Km2Net様からUSB-IO2.0と書籍「かんたん!USBで動かす電子工作」が販売開始されたので
自分が公開しているvbausbio.dllを対応させようと作業していました。

新命令を追加することでUSB-IO2.0に対応させました。
今までの汎用USB-IOにも対応できるように今までの命令は残してあります。

また今回の対応でUSB-FSIOの動作確認、
Windows7 32bit/64bitでの動作確認も合わせて出来ています。

今回はVB2010EXPRESSとExcel VBAで動作確認しましたので、
両方の定義ファイルも用意しています。

まだ、ドキュメントが整備できていないので暫定での公開になりますが
以下の場所からダウンロードできます。
http://bake-san.com/download/vbausbio/v100/vbausbio_v100.lzh
これも暫定ですが、VB2010EXPRESSのサンプルも
以下の場所からダウンロードできます。
http://bake-san.com/download/sample/VB2010/VBAUSBIOTEST.LZH




Km2Net様のUSB-IO2.0は秋月から購入できるようになりました。(1000円です)
http://akizukidenshi.com/catalog/g/gM-05131/


書籍はアマゾンから購入できます。


参考資料:


2010-10-30

PICkit2購入


前から欲しいと思っていたのですが秋月で部品を購入するときに衝動買いをしてしまいました。
これにピン配列変換ケーブル、ICテストクリップ、ブレッドボードを追加購入して使っています。


PICkit2はICSP方式なので書き込みアダプターを自作するなどして皆さんは使われているようですね。

自分の場合はPICに合わせてPICkit2とICテストクリップをつなげてPICをそのクリップで挟んで書き込みをしています。
ブレッドボードテスト回路を組んでPICをブレッドボードにつけたままできるようになり便利に使っています。

もちろん、PICkit2とブレッドボードを直接つなげてもできるのですが、つけたり外したりが楽なのでクリップを使っています。
また実装した後でもICSP用のピンを用意しなくても挟むだけで書き換えができます。

回路設計は面倒になりますが、実装した後でも書き換えができるのは便利ですね。

2010-05-26

USB-FSIO(汎用USB-IOの後継)がキャンペーン価格で購入できます。

Km2Netさんから2010/05/28から出荷予定のUSB-FSIOです。
今までの汎用USB-IOと同サイズにもかかわらず、かなり機能アップしています。
今はキャンペーン中で今までの汎用USB-IOの1500円に+500円の2000円で購入出来るようです。
Km2Netさんの意気込みが感じられますね、購入を検討されている方は耳よりな情報だと思います。

自分が公開しているvbausbio.dllは現在対応作業中です。
おそらく、USB-FSIOのコマンド追加という形で今までのUSB-IOも使えるものになるのではと思います。

VB.NET(VB2008)のサンプルはKm2NetさんのHPで入手出来ます。
Linuxのサンプルは私が公開しているソースを手直ししていただいているのでそれが使えると思います。vbausbio.dllの対応を優先しているのでそのソースのテストが出来ていません、時間をみてテスト予定です。
未テスト了解のもとであれば以下のリンクから入手出来ます。
http://bake-san.com/download/usbfsio/linux/

また、前回のブログにもあるようにRubyにも対応を考えています。
とりあえずは従来の汎用USB-IOに対応させて、USB-FSIOにも対応を考えています。



USB-FSIOの概要は以下の通り。

・USBインターフェイスを使った入出力基盤で、デジタル入出力、アナログ入力、PWM制御が行える入出力基板です。
・USB 2.0(FullSpeed)で入出力制御を行います。
・デジタル入出力最大19ピン、アナログ入力最大5Ch、PWM制御最大5Chが利用可能です。
※モーター、RCサーボ、LED調光が簡単に行えます。
・1回の命令で複数の出力が出来るようになり、効率的に信号送信が可能です。
・62Byteのユーザー用フラッシュロムを利用すれば、シリアル番号の登録やセキュリティーデバイスも作成可能です。

使ってみての感想
PICと同様に電流が扱えるのでLEDも直接点灯出来ます(Max200mA、LEDで10~20個、電流制限抵抗は必要です)
どのピンをデジタル、アナログ、PWMの割り当てもPIC同様にコマンド出来るのもいいですね。
ブレッドボードで使えるようにピン配列が変更されているので便利になりました。
USB-FSIOから電源を取る場合は右側のフリースペースにVCC、GNDが用意されているのでリード線を付ければ取れますが、USBの規格上500mAまでなので200mAを超える場合は外部電源を用意したほうがいいと思います。

2010-05-06

Rubyで汎用USB-IOを使う Windows、VBA用Dllを使用

最近、Rubyを良く聞くようになってきたので、すこしずつ触ってみているところです。
目的が無いとすぐ飽きてしまいそうなので、汎用USB-IOを使えるようにしてみたいと思っています。

まず、簡単なところから、Windows限定になりますが、自分が公開しているVBA用Dll(vbausbio.dll)で使えるようにしてみました。

RubyはWindows版 で下記 1.8.7 のインストールをしています。
Ruby MSI Packages 安定版配布サイト
http://arton.hp.infoseek.co.jp/indexj.html
ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub
http://arton.hp.infoseek.co.jp/ActiveRuby.msi

最新版のVBA用Dllをダウンロードしソースを格納するフォルダーにコピーしてください。

RubyでVBA用Dllが使えるように定義をしたソースをダウンロードして同じくソースを格納するフォルダーにコピーしてください。
usbio.rb というファイル名の定義ファイル(プログラム)です。

あとは以下のようにプログラムを記述すれば汎用USB-IOを制御できるようになります。

require 'usbio'

p USBIO.find()

p USBIO.out(0,0,0)
p USBIO.out(1,0,0)

16.times do |j|
USBIO.out(1,j,0)
256.times do |i|
USBIO.out(0,i,0)
end
end

p USBIO.free()

サンプルソース等は以下の場所にUPしています。
まだ、テストが出来ていないので不具合がでるかもしれません。
不具合等あれば、連絡を頂けたらと思います、よろしくお願いいたします。

http://bake-san.com/download/sample/ruby/

移転しました

バケさんの電子工作(ブログ)は移転をしました。
http://bake-san.com/bdenshi/ から
http://bake-san.blogspot.com/ に変更しました。

セキュリティ面から見直しをして変更することになりました。
当分の間過去のブログは両方で見れるように考えています。

ご迷惑をおかけしますが、よろしくお願いいたします。

2010-02-27

1.2VでLED点灯回路の明暗センサー改良? @バケさん


簡単な回路で暗くなると点灯させていたのですが、明るい時に発振を止めて昇圧しないようにしてLEDを点灯させないようになっています。
これでは消えている時でもLEDに1.2Vがかかってしまいます。
LEDは点灯に必要な電圧より低くなると電流も流れにくくなりますが、効率を考えると無視できないと思います。

そこで、CDSの抵抗値で電源自体をON/OFFして消灯時の電流をできるだけ少なくするように回路を考えてみました。
トランジスタ1個でも可能なのですがトランジスタを2段にして、点灯時の消費電力も抑えるようにまた反応が良くなるように考えています。

トランジスタを1つ介して点灯する形になるので、そのトランジスタが抵抗(電圧降下して)になり、少し暗くなった感じがします。

簡単な回路では無くなりつつありますが、効率がよくなればと思い考えてみた回路です。
まだまだ、改良の余地がありますね、またいい回路が思いつけばアップします。

補足:CDSと直列にある5kの抵抗を変えることにより、ON/OFFするタイミングを変えれます。
また電源の電圧にも影響するので調整が必要になります。

2010-01-29

LED照明を作る2 @バケさん

出来ました、20Wぐらいの明るさですね。
直下は明るいのですが、離れるとくらいです。次の課題ですね。

テスターで測ると30mA、3Wでした。
こんなもんかな、といった感じです。
常夜灯に使うナツメ球が5W程度なのでそれより省電力になります。


ちなみに回路は家庭電源用LED電球の製作の通りに作っています。

2010-01-28

LED照明を作る @バケさん

製作記事としては珍しくないと思いますが、日曜大工で子供部屋を作成中なので照明も作ってしまおう!と思い作り始めました。

簡単に効率がいいものを考えてトランスレス電源を使う事にしました。
今回はサイトにあった回路でそのまま作成しています。回路図はまたアップします。

写真の右側が電源回路で左側がLEDです。
基板のサイズをあわせたので2段構造にする予定です。

回路の原理がわかったので、これで上手くできれば次回は自分で回路設計をして作りたいと思います。

2009-12-12

1.2Vで白色LED、明暗センサー付き @バケさん

間違い! ガーデニングLEDライトをばらしてみた
この回路をちょっと変更してLEDを直列に4つでもつけれるようにできそうです。



ためしに並列に4つつけてみましたが、これもOKのようです。

また、上側の回路の抵抗と並んでいるコンデンサー(103)は0.01μFですが、0.1μFでも、1μFでもOKでした。
しかし、下側の回路は0.01μFでないとだめでした。

部品は入手可能なものでよさそうです。
発生している電圧を測ってみたらLEDを付けない状態で上側の回路で14V、下側の回路で20Vまででていました。
LED1個では2.8Vまで落ちます。
直列の数を増やしてゆくとそれに合わせて電圧が高くなる感じでした。
上側の回路は1つ問題があって、2個のインダクタ(コイル)は離れているとダメでできるだけくっつけたほうがいいようです。

注意、LEDを増やしても点くことは点くのですが、個数を増やすとその分電流が少なくなり、暗くなってしまいます、今回の部品構成では2個が限度のような気がします。

2009-12-10

1.2Vで7色LED点灯、暗くなると点灯(補足) @バケさん



ブレッドボードでテストした時のアップ画像です。
自分も試してみたい方は参考にしてみてください。

2009-11-17

1.2Vで7色LED点灯、暗くなると点灯 @バケさん


点灯回路はDC/DC用ICを使用して5Vを発生させ、7色LEDを点灯させています。
ソーラーバッテリーの電圧を監視して暗くなると点灯させるように回路を作成しています。

LEDライトを使って明るくしてON/OFFをテストしてみました、その様子の動画をUPしています。

2009-11-13

電圧低下でOFFにする回路 @バケさん



ソーラーパネルをつけてバッテリーに充電してLED照明や携帯電話の充電につかっていますが、電圧が低下したまま使うとバッテリーの性能が悪くなってしまいます。

電圧が低くなればOFFにしてバッテリーを保護しようと考えたのが今回の回路です。

なんだか複雑になっていますが理由があります。
OFFになる電圧とONになる電圧を変えたかったからです、シュミットトリガーの動作ですね。
電流を多く流すと電圧降下してOFFになりますが負荷がなくなれば電圧が上がってONになる。
これを繰り返して点滅状態になるのを防ぐためです。

基本はフリップフロップ回路で状態を保持できるようにして、ON、OFFそれぞれの電圧でスイッチしています。

本当はマイコンで作れば簡単なのですが、トランジスタで作ってみたかったので今回の回路になりました。
もっと簡単にできるのではと始めましたが、結局今回の回路しか考えれませんでした。
シュミットトリガー回路をぐぐってみましたが電源電圧自体が変動しているので上手く応用できなかった。
アハッと思えるような回路が見つかったらまらUPします。

動作の様子を動画でUPしました。
11.50V辺りでOFFになり、12.10Vまで復旧すればONなるように設定しています。

1.2Vで白色LEDを点滅に明暗センサー @バケさん



エレ工房さくらいさんのサイトを参考にして明暗センサーを付けてみました。
薄暗い時が不安定な動作をして点きっぱなし(おそらく点滅速度がかなり遅くなっている)になったりしますが、上手く動作しています。
また、LEDに電流が流れすぎて動作が不安定になったのでLEDに電流制限抵抗を付加してみました。

動画もUPしておきます、蛍光灯の下で少し暗かったので点きっぱなしになったりした様子も撮れています。

2009-11-12

1.2Vで白色LED点滅回路 @バケさん



専用IC使いまくりで回路を組んでみました。
DC/DC用ICHT7750A、点滅用M34-2Lを使って部品点数を少なくしています。
いままでで一番単純で確実に明るく点滅する回路です。
明暗センサーをどうつけるか悩んでいます。
どこかでM34-2Lにその機能をつけていたように思います、
良く探して明暗センサーもつけたいと思っています。

今回も動画をUPしてみました。

ガーデニングLEDライトを保安灯に!その2 @バケさん



点滅専用IC(M34-2L)を使ってみました。
点滅回路がかなり単純になったと思います。

動画もUPしておきます。

写真 : ガーデニングLEDライトを保安灯に! @バケさん

バケさんの電子工作 : ガーデニングLEDライトを保安灯に! @バケさん

実際に点滅回路を組み込んだ状態の写真です。
LEDは色々差し替えて使えるように丸ピンソケットをつけています。



動画もUPしてみました。

2009-11-11

ガーデニングLEDライトの正しい回路 @バケさん





ガーデニングLEDライトの正しい回路です。
手持ちの部品を使って動作確認をしてみました。
抵抗を最初は10kを使っていましたが、上手く点いてくれなかったので1kに変更しています。
たぶんコイルが違うので調整が必要だったのではと思っています。

この回路も特別の部品の使用無しで上手く点いています。

間違い! ガーデニングLEDライトをばらしてみた @バケさん

バケさんの電子工作 : ガーデニングLEDライトをばらしてみた @バケさん



この回路だと思っていたのですがちょっと違っていました、すみません。
回路を確認してまた報告します。

この回路は実際に手持ちの部品を使って試したものです、LEDもしっかりつくと思います。
コイルは100μHのマイクロインダクタを使っています。
2個ありますが通常はくっつけて配置します。
抵抗は10k、コンデンサは103(0.01μF)、トランジスタはC1815と一般的な部品を使っています。
自分がテストした環境では抵抗と並列にあるコンデンサがあると安定してLEDが光っています。

ベースをマイナスに落とすと光らなくなるので、ここに点滅回路を仕掛けると簡単に点滅できそうです。
前回の点滅回路は電源を直接ON/OFFしているので部品が多くなっています。
他に応用はできると思うので参考にはなりますが、ちょっと複雑になりすぎました。
もう少し回路を考えてみます。


正しい回路はこちら