* はじまり * 概要 * なぜFirewingなのか? * Firewingダウンロード * 対応マイコンと対応コンパイラの関係 PIC18F: PIC24F: dsPIC33F: PIC32MX: * Firewingはいかなるものか? BASIC言語からC言語へのトランスレータ * 外部コンパイラを使う手順 * 外部コンパイラ: ここまでの結果 orz * PIC24Fのコンパイル成功 デバイス・ファイルの修正点: * PIC24FJ64GA002 でLEDチカチカとUART出力 (^^)/ 実験ハードウエア: LEDチカチカとUART出力 プログラム: ポイント: コンパイラはXC 1.11 Pickit2 Download: ファイル一式: config設定ファイル: UART出力: * コンパイラのバグ * コンパイラと使用可能なPICマイコン * PIC32MX220F032BでLEDチカチカとUART出力 (^^)/ Download: ファイル一式: * Pickit2/Pickit3の登録方法 * ワンクリック・コンパイル&書込み * はじまり LunaAVRを見つけたばかりだけど、 今度はPIC用のスゴそうな :D 無料BASICコンパイラを発見しました。 Firewing http://www.firewing.info/ フォーラム http://www.firewing.info/forum/ ダウンロード http://www.firewing.info/pmwiki.php?n=Firewing.Download Firewing BASIC言語マニュアル http://www.firewing.info/pmwiki.php?n=Firewing.Reference VB.NETの言語仕様に近いBASICコンパイラで PIC18F / PIC24F / PIC32MX 系を網羅しています。 浮動小数も使えます。 作者は、あのSwordfishという業界最強?のPIC18F用のBASICコンパイラを作った人の様です。 http://www.sfcompiler.co.uk/swordfish/ ページの作りがそっくりだったりします。xD * 概要 (1) 開発環境はWindows専用です。 (2) ブートローダ方式も使える。 (3) 一つのIDEで PIC18F/PIC24F/PC32MXのBASICソースをコンパイル可能。 (4) PIC18Fは独自のコンパイラでMicrochipのアセンブラコードを 吐き出し、最終的にmpasmwin.exeでアセンブルされます。 (5) PIC24F/PIC32MXは内部でGCCのソースに変換されGCCでコンパイルされます。 (6) デフォルトはFirewing内蔵コンパイラで特定のマイコンだけコンパイルできます、 (7) また、MPLABのデバイスファイルを変換したものとMPLABXコンパイラを使えば、 全てのPICマイコン(18F系,24F系,32MX系)に対応可能です。(後述) (8) デバイスファイル・クリエータ(ジェネレータ)があるので、今後出る新しいPICにも対応可能。 IDEは結構そっけないものの、登録ボタンを押せばPickit2/3を自動検索して登録してくれます。 * なぜFirewingなのか? 作者がフォーラムに書き込んだ概要です。 PIC18F用のSwordfishコンパイラを作ったけど、ユーザから仕様が独自で Swordfishコンパイラの書式を覚えても将来のスキルにつながらないと 言われた様です。 それを受けて、VB.NETに準拠したBASICコンパイラを開発したそうです。 Firewingで覚えた書式は将来VB.NET系に生かせるということを狙っています。 あるいは、本物のVB.NETを使ったことがあれば簡単にFirewingで 組み込みプログラムが書けるということになります。 http://www.firewing.info/forum/viewtopic.php?f=7&t=75 * Firewingダウンロード ダウンロード http://www.firewing.info/pmwiki.php?n=Firewing.Download 安定版 Download Firewing 1.0.0.6 その下の Firewing 1.0.0.7 B3 自分はこちらをメインで試しています。 実は、ちょっとややこしいのでメモしておきます。 * 対応マイコンと対応コンパイラの関係 (1) Firewing内蔵コンパイラ(インストール直後)は以下のマイコンのみコンパイル可能です。 (このブログでは「もっとたくさんのマイコンでも使えるという作り」に着目しています。) xD 後述。 ( *印は秋月電子で販売している物、又は容量違い等として使える or 使えそうなマイコン) PIC18F: PIC18F14K50 * 220円 FLASH/SRAM=16KB/8KB USB http://akizukidenshi.com/catalog/g/gI-03031/ PIC18F25K22 * 170円 FLASH/SRAM=32KB/1.5KB http://akizukidenshi.com/catalog/g/gI-05557/ PIC18F26K22 PIC18F45K22 PIC18F46K22 PIC24F: PIC24HJ128GP502 dsPIC33F: dsPIC33FJ128GP802 * 互換で使えるPIC: * 480円 dsPIC33FJ64GP802 FLASH/SRAM=64KB/16KB http://akizukidenshi.com/catalog/g/gI-08458/ (詳細未調査 * 380円 dsPIC33FJ32GP802 FLASH/SRAM=32KB/2KB) PIC32MX: PIC32MX150F128B PIC32MX250F128B * 360円 PIC32MX250F128B FLASH/SRAM=128KB/32KB http://akizukidenshi.com/catalog/g/gI-07644/ * 互換で使えるPIC?: ( 詳細未調査 * 320円 PIC32MX230F64B FLASH/SRAM=64KB/16KB http://akizukidenshi.com/catalog/g/gI-07643/ ) PIC32MX320F128H PIC32MX795F512L (2) 内蔵コンパイラでPIC32MXの場合、全て「32bitのMIPSコード」にコンパイルされます。 mips16は非対応の様です。orz * Firewingはいかなるものか? BASIC言語からC言語へのトランスレータ (1) 基本的に、BASIC言語からC言語に変換してコンパイルする。 (内蔵のPIC18F用コンパイラは直接アセンブラ・ファイルをはき出す) (2) 従って、Firewing内蔵コンパイラ以外に多数の既存コンパイラに対応している。 内蔵コンパイラ以外に以下のC言語コンパイラ(以下、外部コンパイラ)を登録すれば、 BASIC言語ソースをコンパイルすることが出来る。 (a) PICBasic PRO / PIC18F (b) Swordfish / PIC18F (c) XC16 / PIC24/PC3x 系 (d) XC32 / PIC32MX (e) MPIDE付属のGCC /PIC32MX http://chipkit.net/started/install-chipkit-software/ というスゴことになってるみたい。 一網打尽とはこのことか。xD (3) 外部コンパイラ使用時は「そのコンパイラで使えるマイコン」は基本全部使えるが(デバイスジェネレータ依存)、 外部コンパイラが持つ使用制限範囲内(Free版、お試し版等)で使うことになる。 (4) 外部コンパイラを使う時は、専用のデバイスファイルを登録する必要がある。 (5) デバイスファイルは各種コンパイラ専用で、同じマイコンでも互換はない。(自信ない :D 多分ある オイ) 外部コンパイラ用のデバイスファイルがそれぞれ用意されている。 (6) 新規マイコン用や「デバイスファイルの再生成」をするためのツールが用意されている。 デバイス・クリエータ(ジェネレータ) * 外部コンパイラを使う手順 http://www.firewing.info/pmwiki.php?n=FirewingUser.Articles 上のページの以下の項目に手順が記載されています。 Adding More Devices to Firewing 例えば、XC16コンパイラを登録したい時は、 Installing the XC16 Toolsuite http://www.firewing.info/pmwiki.php?n=FirewingUser.XC16Toolsuite というページに従います。 * 外部コンパイラ: ここまでの結果 orz (1) XC16を登録してみたが、コンパイルエラーで orz (2) XC32もorz お〜〜い! orz どうやら、 Firewingのバージョンと用意されているデバイスファイルの構成が一致していない模様。 新しいFirewingと古いデバイスファイルという関係になってしまっている模様。 しかも、コンパイラのバージョンもからんでくるという、もうアレです。 orz MPIDEでやってみるのだった。 * PIC24Fのコンパイル成功 Firewing内蔵コンパイラでは、「PIC24FJ64GA002」をコンパイルできないので、 外部コンパイラXC16を登録してみた。 参考: Error when using Microchip 16 compiler http://www.firewing.info/forum/viewtopic.php?f=17&t=101&start=20 Firewingの外部コンパイラとして、 XC16 v1.20: このコンパイラはうまく動かないらしいです。 特に、v1.20はMicrochipの純正サンプルコードも動かなくなっちゃった様です。xD 但し、 XC16 v1.21: は大丈夫らしい。 ただ、コードサイズが無駄に大きくなるらしい。 XC16 v1.23: このブログのLEDブリンク、UART出力のサンプルは動作しました。 v1.11に比べて10%程度コードが大きい。 XC16 v1.11: このブログのLEDブリンク、UART出力のサンプルは動作しました。 ひとまずこのバージョンの実績はあるようなので、 基本はこれで。コードサイズも小さい。 デバイスは、 PIC24FJ64GA002 の組合わせでコンパイル成功した。 提供されているデバイスファイルでエラーが出るので 修正したらOKになりました。 デバイス・ファイルの修正点: 例えば上の例だと、 C:\ProgramData\Mecanique\Firewing\Includes\24FJ64GA002.bas 内の #const _xramstart = &H0800 ' x RAM start in bytes という行を #variable _xramstart = &H0800 ' x RAM start in bytes に変更してFirewingを再起動します。 実際にマイコンに書き込んで動かした訳じゃないけど ここまで (^^)/ * PIC24FJ64GA002 でLEDチカチカとUART出力 (^^)/ 実際に動かしてみました。 実験ハードウエア: http://mpu.seesaa.net/article/399685477.html#toc_07LEDチカチカとUART出力 プログラム: システムクロック32MHz(16MIPS)(内蔵クロック)で動作させています。
' Firewing http://www.firewing.info/ ' PIC24FJ64GA002 ' LED blik, UART and System setting test program. ' ' 2014/12: Made by audin. ' Checked using XC16 v1.11 (Microchip 16) ' device=24FJ64GA002 clock = 32 ' PLL out is 32MHz. 16MIPS. imports config24FJ64GA002 ' ' Hardware reference, ' http://mpu.seesaa.net/article/399685477.html#toc_07 ' sub hardwareInit() ' UART1 pin setting RPOR6 = ( RPOR6 and &h00ff ) or ( 3 << 8 ) 'set RP13 to TX1 24pin RPINR18 = ( RPINR18 and &hff00 ) or ( 14 ) 'set RP14 to RX1, 25pin end sub sub Main() Dim LED1 As portb.15 ' RB15, 26pin dim count as ushort = 0 ' uint16_t hardwareInit() SetBaudrate( Baudrate.Is9600 ) While True High(LED1) DelayMS(500) Low(LED1) DelayMS(500) Writeline("Hello! : "_ + str(count,5," ")_ + " , " + "0x"_ + hex(count,4,"0") ) count += 1 End While End Subポイント: コンパイラはXC 1.11 上で書いた様にXC16を登録して使っています。 [Microchip 16]でコンパイル。[Firewing 16]ではコンパイル出来ません。 Pickit2 FirewingにPickit2を登録したので、ワンクリックでコンパイルと書込みが出来ます。 便利 (^^)/ Download: Firewing-LED-Blink-24FJ64GA002-2014-12-27.7z ファイル一式: blink24.bas : メインプログラム config24FJ64GA002.bas : コンフィグ設定ファイル Includes/24FJ64GA002.bas : 修正版 デバイスファイル。 使い方: (1) 上記の「24FJ64GA002.bas」を以下にコピーします。 (Windows7 32bitの場合) C:\ProgramData\Mecanique\Firewing\Includes (2) Firewing IDEで「blink24.bas」を開いてコンパイルとFlash書込みします。 行の分割は「_」(アンダースコア) スクリプト系だと「\」の物とかあるけど「_」を使います。 行末が演算子の場合はそのままで分割可能です。 config設定ファイル: ブートローダなしなのでPIC特有の「コンフィグレーション・ビット」の設定が必要です。 「imports config24FJ64GA002」という行で読み込んでいます。(ファイル名は、config24FJ64GA002.bas) [config24FJ64GA002.bas]の内容です。 PIC特有のアナログポートをデジタルポートに変える設定は、「デバイスフィアイル」内で行っているので 記述する必要はありません。' ' Firewing http://www.firewing.info/ ' PIC24FJ64GA002 configration and system initialization ' ' 2014/12: Made by audin ' module config24FJ64GA002 Config CONFIG1 = {_ JTAGEN_OFF,_ GCP_OFF,_ GWRP_OFF,_ BKBUG_OFF,_ COE_OFF,_ ICS_PGx1,_ FWDTEN_OFF,_ WDTPS_PS1_ } config CONFIG2 = {_ IESO_OFF,_ SOSCSEL_SOSC,_ WUTSEL_LEG,_ FNOSC_FRCPLL,_ ' clock setting. IRC 8Mhz x 4 FCKSM_CSDCMD,_ IOL1WAY_OFF,_ I2C1SEL_PRI,_ POSCMOD_NONE,_ OSCIOFNC_OFF_ ' clock monitor OSCO pin } Sub OnStartup() Handles PIC.OnStartup ' initializaton code in here 'Intenal OSC PostScaler RCDIV=0 CLKDIV = CLKDIV and &hf800 ' System Clock devider 1:1 End Sub end moduleUART出力: Firewing内蔵のシリアルターミナルに9600bpsで出力した図。 これでUART経由のprintfデバッグは出来る。:D* コンパイラのバグ 2つも見つけちゃった。 というか、orz orz だったので、今直してもらってる。 回避策があるからいいんだけど、 最近は、ちょっと触ってバグを引く確率が高い。xD orz 速攻で修正してくれたので、(^^)/ 最新版のFirewingを使ったほうが良いです。 1.0.0.7 (B6) 以降がお勧め、 * コンパイラと使用可能なPICマイコン
使用可能コンパイラとマイコン | |||||
Firewing | Microchip XC32 ToolSuite |
Microchip XC16 ToolSuite |
Swordfish ToolSuite |
PIC BASIC PRO ToolSuite 詳細未調査 | |
付属無料コンパイラ | Free版以上 | Free版以上 | 有料版以上 | 有料版以上 | |
PIC32MX | PIC32MX150F128B
(PIC32MX250F128B) PIC32MX320F128H PIC32MX795F512L |
全PIC32MX(注2) | - | - | - |
PIC24F/33F | dsPIC33FJ128GP802
(dsPIC33FJ64GP802) |
- | 全PIC24F(H)/33F(注2) | - | - |
PIC18F |
PIC18F14K50
PIC18F25K22 PIC18F26K22 PIC18F45K22 PIC18F46K22 | - | - | 全PIC18F(注2) | 全PIC18F(注2) |

' Firewing http://www.firewing.info/ ' PIC32MX220F032B ' LED blink, UART1 output and system setting test program. ' ' 2014/12: Made by avrin. ' Checked using XC32 v1.30 (Microchip 32) ' device=32MX220F032B Clock=48 imports config32MX220F032B ' ' Hardware reference, ' http://mpu.seesaa.net/article/399685477.html#toc_08 ' sub hardwareInit() ' UART1 TX/RX pin setting U1RXR = 4 ' set RX to RPB2 , pin6 RPB3R = 1 ' set RPB3R to TX, pin7 TRISB.2 = 1 ' set RX port to input end sub sub Main() Dim LED1 As portb.15 ' RB15, 26pin dim count as ushort = 0 ' uint16_t Dim ms as short = 500 hardwareInit() SetBaudrate( Baudrate.Is115200 ) While True High(LED1) DelayMS( ms ) Low(LED1) DelayMS( ms ) Writeline("Hello! " + str(count,5," ") + ", 0x" + hex(count,4,"0")) count += 1 End While End SubUARTのボーレートは115200bpsです。 Download: Firewing-LED-Blink-32MX220F032B-2014-12-27.7z ファイル一式: blink32mx.bas : メインプログラム config32MX220F032B.bas : コンフィグ設定ファイル。blink32mx.basと同じ場所に置きます。 Includes/32MX220F032B.bas : 修正版 デバイスファイル。 使い方: (1) 上記の「32M220F032B.bas」を以下にコピーします。(Windows7 32bitの場合) C:\ProgramData\Mecanique\Firewing\Includes (2) Firewing IDEで「blink32mx.bas」を開いてコンパイルとFlash書込みします。 * Pickit2/Pickit3の登録方法 「Build」-「Options」-「Install New Programmer」で、リストから それぞれ、 「Microchip Pickit II」や「Microchip Pickit III」を選んで「Next」で、 自動検索が始まります。少し時間がかかります。 手動登録も可能です。 その後「Build」メニューで「Pickit III」等にチェックを入れます。 * ワンクリック・コンパイル&書込み 「Build」-「Options」-「Compile and Program」にチェックして、 「Build」を押すとワンクリック・コンパイル&書込みができます。(^^)/ * PIC32MX220F032Bの注意点 PIC32MX220F032Bは公式サポートPICではないので、現状、割込み関係がコンパイルエラーになること が分りました。orz (PIC24F系は大丈夫でした。) 作者に提案しようかどうか考え中。 C:\ProgramData\Mecanique\Firewing\Library\MCU32\System にファイル追加、修正すれば自力で動かすのは可能なんだけど。。。