ラベル MPLABX の投稿を表示しています。 すべての投稿を表示
ラベル MPLABX の投稿を表示しています。 すべての投稿を表示

2019年2月17日日曜日

PICのPWMで音楽再生2

前回、古いPICマイコンで大惨事になったので、比較的新しいPICで挑戦することにした。
PIC16F1619というもの。


3.3Vで動くしPIC内蔵OSCが32MHzまでいけるので部品点数がかなり減った!!
あとは
  • 乾電池で動くようにする
  • ボタン操作などで再生を切り替える
  • LEDなどの装飾
  • いい感じに収納する
をすればオモチャとして使えると思う

ソフト

ソフトの書き方も今風のやり方?にした。
MCC(MPLAB® Code Configurator)というもの積極的に使用する。
チュートリアル
http://microchipdeveloper.com/mcu1101:start
https://www.microchip.co.jp/download/dl_download.php/ID=17399660df745a6b64cd99d30b56a30b809e6694/
が大変参考になった。
日本語の情報はうまいこと見つけられなかった。
みんなArduinoとかSTMに移行したのかな。寂しいね。

MCC

基本的には、前述のチュートリアルの通り。
MCCプラグイン使用時は以下の感じ


困ったこと

PIC16F818のときには使いたい機能とピンに制約があったのだけど、
こちらは、ある程度自由に割当ができる。その分、悩むことも多い。。。
ファイルが自動生成させるので、それに従ってコーディングする必要がある。
統一した書き方ができて良いのだけど、ちょこっとしたものを書くのに、複数ファイルを行ったり来たりするのは、頭が付いて行かない(笑

良いところ

ピン割当がビジュアライズされてわかりやすい。
また、UARTの通信速度やタイマーやPWM設定で計算がかなり不要になった。

移植

基本的には、MCCのおかげであまりマイコンの差異を意識しなくて済んだ。
クロックが32MHzになったけど、TMR0の周期は8KHzと指定すればレジスタの設定を計算してくれるし。
SPIのクロックがOSC/4なので8MHzになったので、読み込みに余裕が生まれたはず。
20MHzの時は、コマンド+アドレス 計4B データ8Bで合計12Bを読むのに約273usとなった。
データ1Byteあたり約34usなので、約29kHzだった。
一方、32MHzになったので、単純に5/8・・・約170usになると思いきや、約102usになった。なぜ??
データ1Byteあたり約13usなので、約78kHz。


なので、音源のサンプリングレートを16kHzにしてみた。
すごくクリアになった・・・。
PWMが31.25kHzなので、32kHzにはできないね。どんな感じになるかは試してみたいけど。
ちゃんと計算してなかったけど、記録可能時間は、
2MByteのフラッシュ(8bit210241024 = 16,777,216bit)なので16,777,216 / (8bit16kHz) = 131.072s 約131秒・・・2分11秒くらい。

2019年2月7日木曜日

古いPICのPWMで音楽再生

子供用の音楽が鳴るオモチャとか作れたら素敵やん。と思って
本当に軽い気持ちで手を出してしまった。


だって、他の方はシンプルに出来ているんだもん。。。
http://manpuku-koji.hatenablog.com/entry/2017/11/23/104741
http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/vc/index.html

動機

FONから剥ぎとった2MBのフラッシュメモリが何個か余っているので、
有効活用できないかと思った。だって2MBだよ2MB!音楽なら1曲くらい入るんじゃない。
というもったいない精神から始めてしまったので、軽いはずの試作が上の写真みたいに大惨事になった。
なぜかというと・・・
  • 使ったPICマイコンが3.3Vに対応してなかった。5Vと3.3Vが必要
  • 5V->3.3V変換回路が必要
  • 内蔵OSCは8MHzが上限で、PWM周波数が足りない。 外付けOSC追加
  • 音が小さかったので、増幅追加
    とほほ
3.3V対応のPICマイコンで、内蔵OSCが20M以上あれば、こんな苦労しなくてよかったのにー

使用部品と回路

  • フラッシュメモリ MX25L1605
  • PICマイコン PIC16F818
  • オシレータ20MHz
  • 3.3Vレギュレーター
  • 5->3.3V変換用 VHC244
回路図がこちら。もう大惨事。


はまったこと・メモ

ダイオードのレベル変換はMHzクラスには向いていない

これになかなか気付けなくて、フラッシュからの応答が無かったり、化けたりして
フラッシュ交換したり、電源変えたり大変だった。
ずっとロジアナで見ていたので、余計にドツボにハマった。
以下のようにオシロで見れば一発なのにね。
ダイオードのレベル変換

VHC224のレベル変換


よく調べてから実行しよう
http://kosakai.world.coocan.jp/change_3_3V_5V.html

Zeroplusのロジアナはlinuxで使える

Zeroplusだけじゃないと思うけど、PulseViewで自動認識してくれた。
しかもSPIプロトコルも解析できた。すごいね。
いままで、MBEWAREのロジアナを使用していて、そのためにwindows環境が必要だったのだけど、これからはlinux環境でいけそうだね。
ただ、パターンジェネレータ機能はどうしようもないか・・・。

ソフト

ブロック図

ブロック図というか動作イメージ

PWM 周波数とデューティの計算

データシートとにらめっこ、すぐに忘れそう・・・。
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)
PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 Prescale Value)
今回は20MHzのオシレータで、分解能が8bit確保できて、可聴域以上のPWM周波数にしたいので
PR2は255が必要*で、PWM周波数はPWM Periodの計算式から
(*CCP1CON<5:4>を駆使すれば、PR2は63でも良いような気がするけど、簡略化のために、CCPR1Lに読み込んだデータを入れるだけで良いようにしたく、今回は255で計算した。次回は63で試してみよう。)
プリスケーラ 周期[us] 周波数[kHz]
1 51.2 19.53125
4 204.8 4.8828125
16 819.2 1.220703125
プリスケーラを1に設定して、19.5kHzの周波数とする。
次にデューティは簡略化のためにCCP1CON<5:4>を0b00とした。
すると計算は簡単でCCPR1Lのみで、26とした場合は、約10%になる。

SPI

Masterモード時のCS

てっきりSlave Select (SS) RB5が使えるのかと思ったけど、これはSlaveモード専用みたい。
そして、SPI使用時にRB5は出力設定できないのか、意図した動きにならなかった。
仕方がないので未使用だったRB0をSSとして使うことにした。

flashROMからの連続読み込み

SPIの読み込みは最速でOSC/4なので、今回は5Mbps程度となる。つまり1クロックあたり0.2usとなり8bitのデータ転送には1.6usという計算になる。
単純に考えるとflashROMからの読み出しは[READ 03h][AD1][AD2][AD3]と[DATA]の計5B必要になるため
1.6*5で8us/Byte・・・125kHzくらいと思いきや
実測すると5B転送するのに124usくらいかかっている。むーん。
これだと、8kHzぎりぎりなので再生速度揺らいでしまうかもしれない。
MX25Lのデータシートには、CSをLOWのままでクロック与え続けると、アドレスを増加させて読み込み続けると記載があったので、1度に8Bデータを読むようにしてみた。
すると、コマンド+アドレス 計4B データ8Bで合計12Bを読むのに約273usとなった。
データ1Byteあたり約34usなので、約29kHzとなり十分に余裕がある。

リングバッファ

flashROMからの読み込みが十分速いので、不要な気もするけど32Bのバッファ用意した。
125us * 32 = 4ms の余裕が生まれるハズ。効果は未確認。

音源の作り方

ようやく音源の準備。ブログとかyoutubeに出していいかわからないので、そういう使用がOKな音源を探す。
例えば、d-elf.comさんのところにある「蒼い月 初音ミク・アペンド Blue Moon/HATSUNE MIKU Append Ver.」の場合。
Blue_Moon_MIKU_Append.mp3で2.9MBある。これを8kbps 8bit モノラルとしてデータ部のみ保存する。

Audacityで

cuiなコマンド1発に憧れるけど、まずはguiでやってみる。そうAudacityで。

音源を8kbps 8bitモノラルに変更

  1. トラックを選択してから[トラック]→[ステレオからモノラルへ]を選択
  2. ウィンドウ下方の[プロジェクトのサンプリング]で8000Hzを選択

データ部のみ保存

  1. 「選択したオーディオを書き出し」
  2. 「その他の非圧縮ファイル」、ヘッダ:RAW(header-less)、エンコーディング:Unsigned 8-bit PCM
これでOK。約985kBのデータができた。
内容を確認するときは、[ファイル]→[取り込み]→[ロー(Raw)データの取り込み]

flashROMに書き込む

この前やったflashROMの書き換えが早速役に立つ。
dd if=/tmp/miku.raw of=/tmp/2m_base.img ibs=2M conv=sync
flashrom -p linux_spi:dev=/dev/spidev0.0 -c “MX25L1606E” -w /tmp/2m_base.img

動作確認


こんな感じ


2018年7月16日月曜日

使いそびれたパラレルキャラクタ液晶のSPI化(2/2)

前回からのつづき
制御用のFON2405E(LEDE・Openwrt)向けドライバ作成

1. SPI仕様

[0x01][コントラスト] ※コントラストは0x00〜0x06
[0x02][コマンド]  ※ RS=0 でLCDに出力
[0x03][データ]   ※ RS=1 でLCDに出力

http://akizukidenshi.com/download/ds/sunlike/SD1602HULB-XA-G-G.PDF
http://219.117.208.26/~saka/ham/LCD2/

2. ドライバ仕様

基本的には、MCP23S09の時と同じ。
キャラクタデバイスとして[/dev/ PicClcdDriver0]が作成される。
これに表示したい内容を流しこめばOK
一方で、各種制御は[/sys/bus/spi/drivers/PicClcdDriver/spi0.1/]に
lcd_clear:Clear Display(全表示クリア)
lcd_set_cgram:Set CGRAM address
lcd_set_ddram:Set DDRAM address
が作成される

3. 動作

insmod pic_clcd.ko
echo > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_clear
echo -n HelloWorld! >  /dev/ PicClcdDriver0

英数字以外 例えば 「イ」とか
echo -ne "\xB2" > /dev/ PicClcdDriver0

外字CGRAM
0番目に「晴?」アイコン
echo 00411040E04110400 > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_set_cgram



ドライバソースコード

使いそびれたパラレルキャラクタ液晶のSPI化(1/2)

ずっと昔にまとめ買いした「LCDキャラクタディスプレイモジュール」(秋月電子のSC1602BSLB-XA-GB-KとかSD1602HULB-XA-G-G)が使いそびれていた。
5Vだしパラレル入力だし・・・。
最近では、3VとかI2C通信のものが安価に出ている。
困った。 FON2405E(Linuxボード)は 3Vだし、今のところSPIしか使えていない。
そこで、PICマイコン使って
  • インターフェース変換(SPI to パラレル)
  • 3V駆動
  • SW入力
  • バックライト
を目指す。

先に結論↓ こんな感じで、Linuxボードから制御してみた。



1. インターフェース変換

SPI搭載の手持ちPICマイコン=PIC16F818 / 819 にした。
まぁシフトレジスタでも実現できるような気がするけど。
http://www.aitendo.com/product/14623
だけど3V駆動化とかSW入力とかやりたいので、今回はPICにこだわった。


2. 3V駆動

いろいろな方が実現している。感謝!
PICにてPWM出力し、チャージポンプにて負電圧を生成する。
最初に思いついた方すごいね!
http://elm-chan.org/docs/lcd/lcd3v_j.html
http://jsdiy.web.fc2.com/lcd3v/


3. SW入力

入力ピンが足りないので、アナログ入力+抵抗分圧にて。
こちらもいろいろな方が実現している。感謝。
https://synapse.kyoto/hard/keypad/page001.html


4. バックライト

バックライト駆動するためには4V 40mA程度必要っぽい。
2のチャージポンプでは賄えないか・・・。
要検討・・・。

んでもって、現状の回路図はこんな感じ。


ソースコード

2016年9月3日土曜日

MPLABXをLINUXで使ったら文字化け

バージョンアップの度にはまるので、備忘録として

日本語が表示できるいい感じのフォントをfonts/fallbackにぶち込んでおく

/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipag.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipamp.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipam.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipagp.ttf

これだけ。毎回忘れる。Orz

2016年2月28日日曜日

見通しが立った(Amis)

今年に入ってから少しずつ試作進めてきたものが見通しが立ってきた。
他の人が手垢がつくほどやり尽くされているけど、
自分でやってみたかった。

概要
扉センサーや人感センサー、明るさ、温度・湿度センサーを監視して、
異常な場合にはメールで通知するというもの。それだけ。
汎用出力があるので、光や音で知らることもできる。
赤外線出力もつけるので、家に帰る前にエアコンつけたり、
長期不在時に在宅を装うこともできるはず。
一体に何に怯えているんだろうか・・・。
名付けてAmis(エイミス)フランス語で「ともだち」 。ぜんぜん関係ないね。

構成
ArduinoとかRaspberryPiとか使えば簡単なのはわかっている。
だがしかし、あえて、この構成にしたかったのだ。なんとなく。

[センサー類]-I2cなど-[PICマイコン]  -USB(CDC)-[linux(1)]-[linux(2)]

・センサー類
  ディジタル入力×5
  ディジタル出力×3
  明るさセンサー これはCdsの値をPICのADで読む
  温度・湿度センサー(HDC1000というやつ)秋月電子で売っていた I2C接続
http://www.tij.co.jp/product/jp/HDC1000
  赤外線出力

・PICマイコン
  PIC18F2455 余っていたので
  microchipのcdcサンプルを参考にした

・Linux(1)
  最寄りのルーター dd-wrtが入っている。リビングにある。
  これにUSB経由でPICマイコンを接続するもの。
  
・Linux(2)
  メール通知用 mageiaが入っている。
  ONUの近くにある。

進捗
 ・センサー類
   赤外線出力がまだ
   その他は、だいたいOK

 ・PICマイコン 
   ファームはだいたいOK
   基板起こす? 悩み中。

 ・Linux(1)
   PICとの通信プログラムは、開発環境ではOK
   あとはARMに移植できるか・・・!?

 ・Linux(2)
   メール通知するだけなので、ほぼOK
   ssmtpを使用

その他
  花粉がすごい。体がだるい。でも頑張るぞ!

2016年2月21日日曜日

地道に試作中(その4)

ようやく
I2Cでデータの読み書きができるようになった。
長かった・・・。ガッツリ時間がかけれないのがツライ。

これで、あとはマイコンとLinux側の制御プログラムをちゃんと作れば、
やりたいことができるようになる。ハズ。

教訓
・ちゃんと1次情報(Microchipのデータシートとか)を読む
・ネットの情報を鵜呑みにしない
・急がば回れ(Win10でもロジアナツール使えることが発見できたし)

もう1つの方は
まだ未着手



2016年2月14日日曜日

地道に試作中(その3)

久しぶりに
VirtualBox上のWindowsを起動したら、
ブルーバック画面が頻出するようになっていたOrz

思い切ってWindows10をインストールした。
アプリとかドライバの互換性が心配だったけど、意外とすんなり動いた。
10年くらい前のロジアナがちゃんと動く。




PL-350というもの

試作基板はI2C通信部分の作りこみ中。
英語のデータシートを避けずに読んでいれば、もう少し早く進むと思う。

その他
・今まで放置してしまったことを少し処理できた。ストレス減!
・今回はダメだったけど、また次回頑張る。めげずに!

2016年2月6日土曜日

地道に試作中(その2)


平日にLinux側のプログラムを地道に作成(まだ半分くらいか)
cとかc++とか久しぶりすぎて頭痛くなった。


環境構築(eclipse+CDT)でハマった
-lpthreadをどこに書けばいいか
http://stackoverflow.com/questions/4201129/compiling-in-eclipse-with-gccs-lpthread-and-lrt-set
C/C++ Build --> Settings.
Then "Tool Settings", select "Libraries" under "Linker".
You can add all your project libraries there (without the "-l"). Also in the lower part, you can add custom path to search libraries.
らしい。

Linuxで一般ユーザーがシリアルポートを使おうとしてハマった
1.付与したいユーザーをdialoutのグループに入れる
2. 50-udev-default.rulesの修正
vi /lib/udev/rules.d/50-udev-default.rules
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"
「MODE="0666"」を追加

これで良いらしい。

試作基板の進捗
昨日と今日でPICマイコン試作基板に温湿度センサ(HDC1000)をつなげた。
まだ、I2Cのプログラムができていないので、ただつなげただけOrz


I2Cのデバックしたかったけど、今日は時間切れです。

その他に・・・
頑張って育ってくれ!

2016年1月31日日曜日

地道に試作中

昨日今日と少しづつPICマイコンを使ったグッズの試作中
USBフレームワークとの共存や慣れないxc8との格闘・・・。

出来上がるのは何時になることやら。


はんだ付けしている間は「無」になれる。楽しいね。

左上にあるのはcdsで明るさをAD変換して読みだそうというもの。
スイッチ5つとLED3つをつけた。
まだ、PORTBが丸ごと残っているので、他にも増やせられそう。
あとは、
・シリアル通信uart  サブマイコンと通信させる
・i2c 温湿度センサーとか
・圧電ブザー
くらいかな。

全貌はもう少し形になってきてから



2015年5月9日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(WEB制御)

目的

前回、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。
今回は、コマンドラインの操作をWEBから行えるように変更した。

概要

WEBからクリア、行移動、文字出力を行う。
PICからの受信は次回の課題。




結果



FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加2)

目的

前回、受信機能を追加したが、1Byteのみだった。
今回は、複数Byteの受信を拡張した。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
400回のコマンド送信に対して、送信NGは52回 13%くらい
なんか前よりも増えた気がする…。
受信の方は、PICから「Hello!!」を送信。100回中NGは5回 5%くらいか
こっちはこんなもんか??

これで、双方向の複数バイトデータを扱えるようになった。
ようやくここまで来た。
ラズベリーパイでも良いのだけれど、ちょっと高い。
このFONならば、中古だけど、ACアダプタと本体で 500円〜なので、
心置きなく遊び倒せる。

何をやったか


電文
変更点

2015年4月25日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加)

目的

前回、チェックサムと送達確認(PICマイコンからFONに対して応答)を行うようにした。
 今回は、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。

概要

チェックサムOKの場合に、FONに対してACKを送信する。
 シリアル通信のクロックはFON側で生成しているので、
 イメージとしてはSPI通信に近いと思う。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
 400回のコマンド送信に対して、送信NGは15回
  80回のときは、2回 2〜3%くらい?
 結果は地味だけど、PIC→FON方向の通信ができるようになったのは大きい


何をやったか

・フォーマット
1.データを送信するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [STX][チェックサム][DATA][ETX]
  受信データPIC→FON  1byte前に対する受信結果

2.送信結果を確認するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [ENQ]
  受信データPIC→FON  1byte前に対する受信結果

黄色・・・クロック
水色・・・受信データ(PIC→FON)この場合はACK(0x06)

------------------------------------------------
gpio_write_sr Start:CLK=12 DATA_OUT=11 DATA_IN=14
Send:[STX][CHKSUM = 14][DATA][ETX]<-4ms->[ENQ]
Input      = 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
RcvChk     = OK
Total Time = 307ms
------------------------------------------------

・FON側
・PIC側
受信処理の後、に送信したいものを出力するだけ
↓受信処理
sr_buf = ((sr_buf<<1) & 0xFE) | (0x01 & DATA_PORT);
↓送信処理
 //DATA 出力
 if((sr_out & sr_out_mask) == 0){
   DATA_OUT_PORT = 0;
}else{
         DATA_OUT_PORT = 1;
 }
 sr_out_mask = sr_out_mask >> 1;

・エラー発生回数測定用スクリプト
今日はここまで、次回は、PICからなにかデータを送信させてみるか

2015年4月5日日曜日

FON2405EのGPIOでキャラクタ液晶を制御する(高速化)

目的

先週、FON2045E(RT3050)のGPIOを使って、キャラクタ液晶の制御を行ったが、
1行(16文字)表示するのに、1.6秒かかってしまっていた。
今回これの高速化を目指す。

受信側(PIC)の高速化によって改善できないかを実験。

結果


 1.6秒→0.5秒にまで短縮することができた。

何をやったか


FON側・・・クロック生成をusleep(4ms)からビジータイマー1460μsに変更
PIC側・・・1ms周期の割り込みによるデータサンプリングを480usに変更
      デバック出力としてのUART出力をエラー時のみに変更

● クロック生成の変更
GPIOの制御に1.4μs要するので、これを1000回繰り返しただけ。
それで1460μs消費させる。

●割り込み間隔の変更
480μs もう少し攻めても大丈夫な気がするけど、余裕をみて。
PICは4MHzで動作しているので、1サイクルあたり1μs。
割り込み間隔100μsくらいでも 行けそうな気がする。

2015年3月30日月曜日

FON2405EのGPIOでキャラクタ液晶を制御する

先週からGPIOの出力が一部間延びしてしまうことで、行き詰っていた。
気分を変えて、同期シリアル通信でキャラクタ液晶を制御したいと考えた。

結論から書くと、以下の2点の課題から、表示速度はすこぶる遅い。
1.仲介役のPICマイコンの動作速度は4MHz(内臓のオシレーターを使ったため)
2.やっぱりGPIO出力が間延びするから1クロック4msのディレーを入れた

 16文字のデータを送るのに、現状1.3秒かかる。
いざまとめるとこんなものなのだけど、なかなか時間がかかったし、
間延び問題が気になる・・・。



 ハード
FON2405EのGPIO---CLK,DATA---PICマイコン---キャラクタ液晶



ソフト
1.gpioのドライバ
2.gpioのアプリ
3.PICマイコンのファーム

1.gpioのドライバ
  標準のものから変更なし
  RALINK_GPIO_WRITE_BYTEを使用。
  今までの試行錯誤は何だったんだ・・・・。

2.gpioのアプリ
  変更点
  オプション[s]を追加
  s  <gpio clk> <gpio data> <delaytime> <char>
  これを指定するとgptio_test_write_srを呼ぶようにした。
  usleepを使うと4ms以下にはならないようだし、
  ドライバの方で、udelayを使って短くしても、
  前回の間延び問題のように不安定になってしまう。
  なので、CLKの変化のタイミングだけusleepを使って、
  DATAのセット部分はディレーなしにした。
  多少は速くなった。


3.PICマイコンのファーム
  変更点
  1ms毎にタイマー割り込みを行って、
  CLKがH→L(立ち下がり)のタイミングを探す。
  更に1ms経過してもLの状態だったら、DATAを読み込む。
main.c
rcv_lib.c

2014年11月22日土曜日

Mageia4(64bit)+MPLABXでハマる・・・。

久しぶりにeagleで回路図を作成した。
片面+ジャンパー構成を考えていたので、
狙ったサイズに入らなくて苦戦すること4時間。
熱中してしまったので、後に引けなくなったのか・・・。



そして久しぶりにPICマイコンを使った。
今まではWindows環境でMPLABを使用していたが、
Windows環境は仮想化したので、今回はLinux環境にMPLABXをインストールした。
環境:Mageia 4 x86_64

MicrochipのサイトからIDEとXC8をダウンロード

MPLAB® X IDE v2.26
http://www.microchip.com/pagehandler/en-us/family/mplabx/

MPLAB® XC8 Compiler v1.33B
http://www.microchip.com/pagehandler/en-us/devtools/mplabxc/home.html

と、インストールなどは上記リンク先に丁寧に書いてあるのだけど、
困ったことに、遅い。
起動からプロジェクトが開くまでも1分くらいかかるし、
プロジェクトのビルドにも1〜2分かかる。

正直ちょっと待てない。

試しに、Windows7にインストールしてみると超速!
ならばと、32bit版のMageiaで試したら、そっちも超速だった・・・Orz
64bitの所為なのかーーー。

この問題も2.25で対策されていたので関係無かった。
http://microchip.wikidot.com/install:mplabx-lin64

javaのバージョンが古いかと思い、アップデート。
変わんねー。

まてよ・・・。こいつJavaアンインストールしても動いてる!!
ググると、独自で持ってるらしい。
/opt/microchip/mplabx/mplab_ide/etc/mplab_ide.conf

jdkhome="/opt/microchip/mplabx/sys/java/jre1.7.0_67/"
を
jdkhome="/usr/java/jre1.8.0_25/"
に書き換えてみた。
起動しない。。

ちなみにアンインストールの方法は
http://denethor.wlu.ca/cp316/software/Readme_for_MPLABX_IDE.htm#_Toc324949034
/opt/microchip/mplabx/Uninstall\ MPLAB\ X\ IDE にあるらしい。

うーん。 困った。。。