MCCのmTouchのパネルで "Debug" というのがあったのでいじってみるということで、秋月電子でピンヘッダを買ってきました。1x40の2.54mmピッチの、ごくごくスタンダードなタイプで、1本35円です。あって困ることはないので10本ほど買ってきて、ニッパーで8ピン分を2つ切り取って J33 と J34 に実装します。
熱容量の大きい電源とGND端子も含まれるので、小手先は太め。ちなみにはんだごては HAKKO の
FX-951 を使っています。十数秒で設定温度になるし、こてをスタンドに戻せばスリープになってこて先が痛むのを防止してくれるし、用途に応じて簡単にこて先を交換できるので重宝しています。また、はんだは千住金属工業の鉛フリーはんだ SPARKLE ESC-F3-M705-0.6mm。500g巻きで購入しています。使用するときのこて先温度は350~360℃。M705というのは合金の配合割合で、最近ではM705RKというシリーズがこて先寿命を延ばすために開発されているようです。ESCというのは濡れ性などの作業性重視のシリーズで、ESC→ESC21→NEO→
GAOというシリーズに進化してきているようです。以前は信頼性重視のRMA08をよく使っていましたが、これは温度をかけすぎると粘りが増してきて使いづらくなるのです。こちらのシリーズはRMA08→LSC→
SENというシリーズに進化してきているようです。カタログは
こちら。
GAOでは合金としてM705からM24APなどを推奨するようになっているようですが、小売市場に出回っているのはM705がほとんどですね。GAOシリーズなどは個人では入手困難かもしれません。ESC21あたりまでしか出回っていないようです。まあ、M705は十分に実績があるので、むしろメーカーさんなどでは新合金に変更して不具合でも出たらやばいのでなかなか切り替えは進んでいかないかもしれません。何年もかけて経時変化含めしっかり評価するでしょうし。
それはさておき、はんだ付けしたものは以下のようになりました。
また、TTl-232R-3V3のコネクタの方は以下のように並べ替えています。
次はMCC側の設定です。
まずmTouchのパネルを見てみます。"USART Module" のところに "EUSART" が入ってきています。これを選択し、"Enable Debug" にチェックを入れます。
次に "Baud Rate" を115200(115.2k)に設定します。また、"Enable Transmit" と "Enable Receive" にチェックを入れます。双方向通信ではないはずなので、割り込みは使いません。
設定をしたら、"Generate" ボタンを押しおしてコードを生成、ビルドしてPICに書き込みます。これでデバッグデータ出力が可能になっているはずなので、まずはTeraTermで受信してみます。
TeraTermの「設定」→「シリアルポート」で「スピード」を115200にするとデータが流れてきました。どうやらバイナリデータのようです。背景は気にしない。のっぺらぼうだとさみしいので、適当な絵を背景にしただけです。
通信ができていることがわかったので、Data Visualizerに食わせてみようと思います。
起動直後の画面。COM3が利用可能になっています。DGIはないので、右上の×で消去しておきます。
"Connect" ボタンを押すと、通信速度を順に試していって115200で止まり、なにやらダイアログを表示してきました。configurationfileがないから指定しろ、とのことです。よくわからないので、Microchipの
Data Visualizer User's Guide を見てみると、
When using the Data Stream protocol, the configuration resides in files stored on the host computer and the target application just sends an ID to identify which configuration files to be loaded by the Data Visualizer.
とあります。どうやら "Data Stream Protocol" の設定ファイルをロードする必要があるみたいです。が、プロジェクトディレクトリにはそれらしきファイルはありません。106ページのData Stream Protocolを見ると、0x03のスタートバイトと0xfcのエンドバイトに挟まれて、リトルエンディアンでデータ列が送られてくるようです。
今回は10bit ADCが1チャンネルのみなので、
D,1,1,ADC
というファイルをどこかに用意すればいいような気もします。なのですが、何という名前でどこに保存すればいいのかわかりません。結局のところ、Data Visualizerでデータを意味のある波形として表示できませんでした。残念。
ただ、どうもソースを眺めてみると mtouch_datastreamer.c というのがあって、その中で MTOUCH_DataStreamer_Service() というのが定義されており、それが mtouch.c から呼び出されているようです。mtouch.c の中では、
/*
* =======================================================================
* MTOUCH_Service_Mainloop()
* =======================================================================
* Root mainloop service routine for all enabled mTouch library modules.
*/
bool MTOUCH_Service_Mainloop(void)
{
/* In free running mode, the mTouch service will be executed once MTOUCH_Service_Mainloop gets called.*/
mtouch_time_toScan = true;
if(mtouch_time_toScan)
{
if(MTOUCH_Sensor_SampleAll() == false)
return false;
MTOUCH_Button_ServiceAll(); /* Execute state machine for all buttons w/scanned sensors */
MTOUCH_DataStreamer_Service(); /* Execute Data Visualizer module */
mtouch_time_toScan = MTOUCH_needReburst();
MTOUCH_Sensor_Sampled_ResetAll();
MTOUCH_Tick();
return true;
}
else
{
return false;
}
}
なんてことをやっているので、やっぱり MTOUCH_DataStreamer_Service() をちゃんと見ればいいのかもしれません。この mtouch_datastreamer.c は、mtouch の Debug を有効にしていないとファイルが生成されませんので、参考までに引用しておきます。
/*
MICROCHIP SOFTWARE NOTICE AND DISCLAIMER:
You may use this software, and any derivatives created by any person or
entity by or on your behalf, exclusively with Microchip's products.
Microchip and its subsidiaries ("Microchip"), and its licensors, retain all
ownership and intellectual property rights in the accompanying software and
in all derivatives hereto.
This software and any accompanying information is for suggestion only. It
does not modify Microchip's standard warranty for its products. You agree
that you are solely responsible for testing the software and determining
its suitability. Microchip has no obligation to modify, test, certify, or
support the software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
PARTICULAR PURPOSE APPLY TO THIS SOFTWARE, ITS INTERACTION WITH MICROCHIP'S
PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
IN NO EVENT, WILL MICROCHIP BE LIABLE, WHETHER IN CONTRACT, WARRANTY, TORT
(INCLUDING NEGLIGENCE OR BREACH OF STATUTORY DUTY), STRICT LIABILITY,
INDEMNITY, CONTRIBUTION, OR OTHERWISE, FOR ANY INDIRECT, SPECIAL, PUNITIVE,
EXEMPLARY, INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, FOR COST OR EXPENSE OF
ANY KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWSOEVER CAUSED, EVEN IF
MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
FORESEEABLE. TO THE FULLEST EXTENT ALLOWABLE 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 files
----------------------------------------------------------------------------*/
#include "mtouch_datastreamer.h"
#include "../mcc.h"
/*----------------------------------------------------------------------------
manifest constants
----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
global variables
----------------------------------------------------------------------------*/
uint8_t data[] = {0x5F,
0xB4, 0x00, 0x86, 0x4A,
0x03, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x55, 0x01,
0x6E,
0xA0};
/*----------------------------------------------------------------------------
prototypes
----------------------------------------------------------------------------*/
void MTOUCH_DataStreamer_Initialize(void)
{
}
void inline datastreamer_output_byte(uint8_t data)
{
EUSART_Write(data);
}
void MTOUCH_DataStreamer_Service(void)
{
uint8_t i;
static uint8_t sequence = 0u;
uint16_t u16temp_output;
uint8_t u8temp_output;
volatile uint8_t count_bytes_out;
if ((sequence % 10) == 0)
{
for (i = 0; i < sizeof (data); i++)
datastreamer_output_byte(data[i]);
}
// Start token
datastreamer_output_byte(0x55);
datastreamer_output_byte(sequence);
/* table - button specific data */
for (count_bytes_out = 0u; count_bytes_out < MTOUCH_BUTTONS; count_bytes_out++)
{
u16temp_output = MTOUCH_Button_Reading_Get(count_bytes_out);
datastreamer_output_byte((uint8_t) u16temp_output);
datastreamer_output_byte((uint8_t) (u16temp_output >> 8u));
u16temp_output = MTOUCH_Button_Baseline_Get(count_bytes_out);
datastreamer_output_byte((uint8_t) u16temp_output);
datastreamer_output_byte((uint8_t) (u16temp_output >> 8u));
u16temp_output = (uint16_t)((int16_t)MTOUCH_Button_Deviation_Get(count_bytes_out));
datastreamer_output_byte((uint8_t) u16temp_output);
datastreamer_output_byte((uint8_t) (u16temp_output >> 8u));
u16temp_output = MTOUCH_Button_Scaling_Get(count_bytes_out);
datastreamer_output_byte((uint8_t) u16temp_output);
datastreamer_output_byte((uint8_t) (u16temp_output >> 8u));
datastreamer_output_byte(MTOUCH_Button_Threshold_Get(count_bytes_out));
datastreamer_output_byte(MTOUCH_Button_isPressed(count_bytes_out));
}
datastreamer_output_byte(sequence++);
// End token
datastreamer_output_byte(~0x55);
}
このなかで、"Start token" と "End token" のところをそれぞれ "0x03" と "0xFC" にしたうえで "configurationfile" を適当に作ってやればいいのかな、とは思いますが。