QTouchソフトウェア概要 | 組込みとともに

QTouchソフトウェア概要

今回はQTouchライブラリーのソフトウェアの概要的なまとめです。

User Guideは45ページありますが、まとめると下記のことがほぼ全てです。残りの知識はexampleから知識を得ればよいと思います。



組込みとともに-ソフトウェア概要

組込みとともに-イネーブルkey

組込みとともに-ハード

下記ユーザーガイドのサンプルそのままです。

4.9   Example Host Application 
 
The following code sample shows how a host application could configure and use the Atmel 
Touch Library. 
 
/* flag set by timer ISR when it’s time to measure touch */  
static uint8_t time_to_measure_touch = 0u;  
/* current time, set by timer ISR */  
uint16_t current_time_ms = 0;  
void main( void )  
{  
    /* initialise host app, pins, watchdog, etc */  
    init_system();  
    /* enable slider */  
    qt_enable_slider( CHANNEL_0, CHANNEL_2, NO_AKS_GROUP, 16, 
        HYST_6_25,       RES_8_BIT, 0 );  
    /* enable rotor */  
    qt_enable_rotor( CHANNEL_3, CHANNEL_5, NO_AKS_GROUP, 16, 
        HYST_6_25, RES_8_BIT, 0 );  
    /* enable keys */  
    qt_enable_key( CHANNEL_6, AKS_GROUP_2, 10, HYST_6_25 );  
    qt_enable_key( CHANNEL_7, AKS_GROUP_2, 10, HYST_6_25 );  
    /* initialise touch sensing */  
    qt_init_sensing();  
    /* configure timer ISR to fire regularly */  
    init_timer_isr();  
    /* enable interrupts */  
    __enable_interrupt();  
    /* loop forever */  
    for( ; ; )  
    { 
        /* test flag: is it time to measure touch? */  
        if( time_to_measure_touch )  
        { 
            /* clear flag: it’s time to measure touch */  
            time_to_measure_touch = 0;  	/* <- ここ */
            /* measure touch sensors */  
            qt_measure_sensors( current_time_ms );  
        }  
        /* host application code goes here */  
    }  
} 
/* timer ISR: fires every MEASUREMENT_PERIOD_MS */  
void timer_isr( void )  
{  
    /* set flag: it’s time to measure touch */  
    time_to_measure_touch = 1u;  
    /* update the current time */  
    current_time_ms += MEASUREMENT_PERIOD_MS;  
} 

といった感じでソフトウェア的には割りと簡単に実装できる仕様になっているようです。

コールバック関数も用意されてオリジナルアルゴリズムも搭載できるようになっているところがいいですねー


このサンプルでちょっと気になる部分が/* <- ここ */の行が割り込み処理で書換えが行われる関数にmain側で書込みを行っています。このあたりの動作はクリティカルセクションと呼ばれてmain側で一度割込みを一度禁止させた後処理を行う方が、タイミング系の不具合が発生しなくなるので品質が上がります。

ただ今回はint型変数なので、1命令で処理できるので問題ない可能性が高いです。ただint型以外では問題となる可能性が高いので分かっていてクリティカル処理の省略をしている場合は良いですが、そうでない場合はご注意ください。


ということでここまで

ハードについてもまとめたいですが、今のところ見つかってないです(キーの直径とか、クリアランス幅とか)。このあたりはPSoCのドキュメントがしっかりしていたのでそちらを参照してもよいですが、ここはATMELへの期待としてATMEL内で探してみたいですね。

引き続き探してみます。


同時にここにあるよという意見も募集してます^^;


蛇足ですがアメーバBlogでソースを書く際のインデントの作り方が(ちょっと前に)わかったので今回つかってます。単純に<pre>タグを使います。またタブは8タブが一般なので4スペで書きます。