タッチスクリーン

「タッチスクリーン」の編集履歴(バックアップ)一覧はこちら

タッチスクリーン」(2007/12/09 (日) 22:13:37) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

TI社の TSC2046 コントローラが入ってます。 ARM7 の [[SPI>システム - SPI]] ポートに繋がってます。 コマンドフォーマット: |bit|名前|説明| |7|S|スタートビット (必ず 1 にセットして使う)| |6..4|A2..A0|チャンネルセレクト| |3|Mode|12 bit(2MHz) / 8 bit(3MHz) モード切り替え| |2|SER/DFR|読み込みタイプ (0=Differential, 1=Single-Ended)| |1..0|PD1..PD0|パワーダウンモード| -チャンネルセレクトビット : |0|温度 0|初期設定が必要。2.1mV 毎に1℃ の精度| |1|タッチスクリーン Y 座標|大体 0B0h ~ F20h で変動。FFFh=押されていない時| |2|バッテリー電圧|未使用。DS の GND に接続されている。常に 000h| |3|タッチスクリーン Z1 座標|圧力センサ?| |4|タッチスクリーン Z2 座標|圧力センサ?| |5|タッチスクリーン X 座標|大体 100h ~ ED0h で変動。000h=押されていない時| |6|補助入力|DSのマイクに接続されている| |7|温度 1|初期設定不要。 2℃ の精度| 全てのチャンネルは、シングルエンデッドモードで接続できます。 ディファレンシャルモードにした場合、1,3,4,5 (X,Z1,Z2,Y) のみアクセス可能です。 -パワーダウンモードビット : |PD1|PD0|/PENIRQ|VREF|ADC|説明|推奨使用モード| |0|0|Enabled|Auto|Auto|Power-down between conversions|Differential Mode (タッチスクリーン, Penirq)| |0|1|Disabled|Off|On|Voltage reference off, ADC on|Single-Ended Mode (温度センサ, マイク)| |1|0|Enabled|On|Off|Voltage reference on, ADC off|/| |1|1|Disabled|On|On|Device always powered. Voltage reference on, ADC on|/| VREF = 内部電源 ADC = アナログデジタルコンバータ /PENIRQ は、R2_CR の bit 6 に繋がれています。 The DS has wired an external VREF of 3.3 V to the TSC, instead of using the internal 2.5 VREF. This impacts the temperature calculations below, and converting any reading into an actual voltage. 便利なコマンド: |定数|値|説明| |TSC_MEASURE_TEMP1|0x84|Measures temperature diode 1| |TSC_MEASURE_Y|0x94|Measures Y position| |TSC_MEASURE_BATTERY|0xA4|Does not work on DS, VBAT is grounded| |TSC_MEASURE_Z1|0xB4|Measures cross-panel position 1| |TSC_MEASURE_Z2|0xC4|Measures cross-panel position 2| |TSC_MEASURE_X|0xD4|Measures X position| |TSC_MEASURE_AUX|0xE4|Measures ?, its non-zero, but I don't know what| |TSC_MEASURE_TEMP2|0xF4|Measures temperature diode 2| 12-bit の、測定サイクルは 3バイトの SPI 転送 から成っている。 -最初の転送:コマンド転送と意味の無いデータが戻ってくる -2回目の転送:戻り値 0 、測定値 (11)..測定値 (5) -3回目の転送: 測定値を返す (4..0) 000 測定用の TSC 入力のコード例: BlockingWriteSPI(command); data = BlockingWriteSPI(0); data = (data << 5) | (BlockingWriteSPI(0) >> 3); **温度計算: Temperature diode two has a 91 times larger current, and the absolute temperature can be calculated based on the measurements of the two sensors. I'll present a fixed point algorithm for computing the temperature in degrees C (see the TSC 2046 datasheet for the original equation). temperature(deg C) = 8490 * (V_I91 - V_I1) - 273*4096; (in 20.12 fixed point) **タッチスクリーンセンサの読み込み (SPI) uint16 touchRead(uint32 command) { uint16 result; while (SERIAL_CR & SERIAL_BUSY) swiDelay(1); // コマンド書き込みと完了待ち SERIAL_CR = SERIAL_ENABLE | 0x800 | 0x201; SERIAL_DATA = command; while (SERIAL_CR & SERIAL_BUSY) swiDelay(1); // 2回目のコマンド書き込みとデータの一部取得 SERIAL_DATA = 0; while (SERIAL_CR & SERIAL_BUSY) swiDelay(1); result = SERIAL_DATA; // 残りのデータの取得 (最後の転送) SERIAL_CR = SERIAL_ENABLE | 0x201; SERIAL_DATA = 0; while (SERIAL_CR & SERIAL_BUSY) swiDelay(1); // 結果を返す return ((result & 0x7F) << 5) | (SERIAL_DATA >> 3); } Todo: figure out what bit 11, bit 9, and bit 0 are doing (bit 0 is probably the CR select, since the firmware reads have this bit cleared) **位置計算 #define SCREEN_WIDTH 256 #define SCREEN_HEIGHT 192 // ピクセル位置の2箇所を取得するためのレジスタ。クリック位置の調整用に2箇所を取得する #define TOUCH_CNTRL_X1 (*(vu8*)0x027FFCDC) #define TOUCH_CNTRL_Y1 (*(vu8*)0x027FFCDD) #define TOUCH_CNTRL_X2 (*(vu8*)0x027FFCE2) #define TOUCH_CNTRL_Y2 (*(vu8*)0x027FFCE3) // タッチスクリーン用レジスタの位置の宣言 #define TOUCH_CAL_X1 (*(vu16*)0x027FFCD8) #define TOUCH_CAL_Y1 (*(vu16*)0x027FFCDA) #define TOUCH_CAL_X2 (*(vu16*)0x027FFCDE) #define TOUCH_CAL_Y2 (*(vu16*)0x027FFCE0) // タッチスクリーン位置からピクセル位置へはリニアマッピングを使う // いくつかの変数の準備 static int16 TOUCH_WIDTH = TOUCH_CAL_X2 - TOUCH_CAL_X1; static int16 TOUCH_HEIGHT = TOUCH_CAL_Y2 - TOUCH_CAL_Y1; static int16 CNTRL_WIDTH = TOUCH_CNTRL_X2 - TOUCH_CNTRL_X1; static int16 CNTRL_HEIGHT = TOUCH_CNTRL_Y2 - TOUCH_CNTRL_Y1; // ピクセルポジションの取得 int16 x = (IPC->touchX - (int16) TOUCH_CAL_X1) * CNTRL_WIDTH / TOUCH_WIDTH + (int16) TOUCH_CNTRL_X1; int16 y = (IPC->touchY - (int16) TOUCH_CAL_Y1) * CNTRL_HEIGHT / TOUCH_HEIGHT + (int16) TOUCH_CNTRL_Y1; **リンク: http://focus.tij.co.jp/jp/docs/toolsw/folders/print/tsc2046evm-pdk.html ----
TI社の TSC2046 コントローラが入ってます。 ARM7 の [[SPI&gt;システム - SPI]] ポートに繋がってます。 コマンドフォーマット: |bit|名前|説明| |7|S|スタートビット (必ず 1 にセットして使う)| |6..4|A2..A0|チャンネルセレクト| |3|Mode|12 bit(2MHz) / 8 bit(3MHz) モード切り替え| |2|SER/DFR|読み込みタイプ (0=Differential, 1=Single-Ended)| |1..0|PD1..PD0|パワーダウンモード| -チャンネルセレクトビット : |0|温度 0|初期設定が必要。2.1mV 毎に1℃ の精度| |1|タッチスクリーン Y 座標|大体 0B0h ~ F20h で変動。FFFh=押されていない時| |2|バッテリー電圧|未使用。DS の GND に接続されている。常に 000h| |3|タッチスクリーン Z1 座標|圧力センサ?| |4|タッチスクリーン Z2 座標|圧力センサ?| |5|タッチスクリーン X 座標|大体 100h ~ ED0h で変動。000h=押されていない時| |6|補助入力|DSのマイクに接続されている| |7|温度 1|初期設定不要。 2℃ の精度| 全てのチャンネルは、シングルエンデッドモードで接続できます。 ディファレンシャルモードにした場合、1,3,4,5 (X,Z1,Z2,Y) のみアクセス可能です。 -パワーダウンモードビット : |PD1|PD0|/PENIRQ|VREF|ADC|説明|推奨使用モード| |0|0|Enabled|Auto|Auto|Power-down between conversions|Differential Mode (タッチスクリーン, Penirq)| |0|1|Disabled|Off|On|Voltage reference off, ADC on|Single-Ended Mode (温度センサ, マイク)| |1|0|Enabled|On|Off|Voltage reference on, ADC off|/| |1|1|Disabled|On|On|Device always powered. Voltage reference on, ADC on|/| VREF = 内部電源 ADC = アナログデジタルコンバータ /PENIRQ は、R2_CR の bit 6 に繋がれています。 The DS has wired an external VREF of 3.3 V to the TSC, instead of using the internal 2.5 VREF. This impacts the temperature calculations below, and converting any reading into an actual voltage. 便利なコマンド: |定数|値|説明| |TSC_MEASURE_TEMP1|0x84|Measures temperature diode 1| |TSC_MEASURE_Y|0x94|Measures Y position| |TSC_MEASURE_BATTERY|0xA4|Does not work on DS, VBAT is grounded| |TSC_MEASURE_Z1|0xB4|Measures cross-panel position 1| |TSC_MEASURE_Z2|0xC4|Measures cross-panel position 2| |TSC_MEASURE_X|0xD4|Measures X position| |TSC_MEASURE_AUX|0xE4|Measures ?, its non-zero, but I don&#039;t know what| |TSC_MEASURE_TEMP2|0xF4|Measures temperature diode 2| 12-bit の、測定サイクルは 3バイトの SPI 転送 から成っている。 -最初の転送:コマンド転送と意味の無いデータが戻ってくる -2回目の転送:戻り値 0 、測定値 (11)..測定値 (5) -3回目の転送: 測定値を返す (4..0) 000 測定用の TSC 入力のコード例: BlockingWriteSPI(command); data = BlockingWriteSPI(0); data = (data &lt;&lt; 5) | (BlockingWriteSPI(0) &gt;&gt; 3); **温度計算: Temperature diode two has a 91 times larger current, and the absolute temperature can be calculated based on the measurements of the two sensors. I&#039;ll present a fixed point algorithm for computing the temperature in degrees C (see the TSC 2046 datasheet for the original equation). temperature(deg C) = 8490 * (V_I91 - V_I1) - 273*4096; (in 20.12 fixed point) **タッチスクリーンセンサの読み込み (SPI) uint16 touchRead(uint32 command) { uint16 result; while (SERIAL_CR &amp; SERIAL_BUSY) swiDelay(1); // コマンド書き込みと完了待ち SERIAL_CR = SERIAL_ENABLE | 0x800 | 0x201; SERIAL_DATA = command; while (SERIAL_CR &amp; SERIAL_BUSY) swiDelay(1); // 2回目のコマンド書き込みとデータの一部取得 SERIAL_DATA = 0; while (SERIAL_CR &amp; SERIAL_BUSY) swiDelay(1); result = SERIAL_DATA; // 残りのデータの取得 (最後の転送) SERIAL_CR = SERIAL_ENABLE | 0x201; SERIAL_DATA = 0; while (SERIAL_CR &amp; SERIAL_BUSY) swiDelay(1); // 結果を返す return ((result &amp; 0x7F) &lt;&lt; 5) | (SERIAL_DATA &gt;&gt; 3); } Todo: figure out what bit 11, bit 9, and bit 0 are doing (bit 0 is probably the CR select, since the firmware reads have this bit cleared) **位置計算 #define SCREEN_WIDTH 256 #define SCREEN_HEIGHT 192 // ピクセル位置の2箇所を取得するためのレジスタ。クリック位置の調整用に2箇所を取得する #define TOUCH_CNTRL_X1 (*(vu8*)0x027FFCDC) #define TOUCH_CNTRL_Y1 (*(vu8*)0x027FFCDD) #define TOUCH_CNTRL_X2 (*(vu8*)0x027FFCE2) #define TOUCH_CNTRL_Y2 (*(vu8*)0x027FFCE3) // タッチスクリーン用レジスタの位置の宣言 #define TOUCH_CAL_X1 (*(vu16*)0x027FFCD8) #define TOUCH_CAL_Y1 (*(vu16*)0x027FFCDA) #define TOUCH_CAL_X2 (*(vu16*)0x027FFCDE) #define TOUCH_CAL_Y2 (*(vu16*)0x027FFCE0) // タッチスクリーン位置からピクセル位置へはリニアマッピングを使う // いくつかの変数の準備 static int16 TOUCH_WIDTH = TOUCH_CAL_X2 - TOUCH_CAL_X1; static int16 TOUCH_HEIGHT = TOUCH_CAL_Y2 - TOUCH_CAL_Y1; static int16 CNTRL_WIDTH = TOUCH_CNTRL_X2 - TOUCH_CNTRL_X1; static int16 CNTRL_HEIGHT = TOUCH_CNTRL_Y2 - TOUCH_CNTRL_Y1; // ピクセルポジションの取得 int16 x = (IPC-&gt;touchX - (int16) TOUCH_CAL_X1) * CNTRL_WIDTH / TOUCH_WIDTH + (int16) TOUCH_CNTRL_X1; int16 y = (IPC-&gt;touchY - (int16) TOUCH_CAL_Y1) * CNTRL_HEIGHT / TOUCH_HEIGHT + (int16) TOUCH_CNTRL_Y1; **リンク: http://focus.tij.co.jp/jp/docs/toolsw/folders/print/tsc2046evm-pdk.html ---- [[@wikiへ>http://kam.jp"><META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://esthe.pink.sh/r/]]

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。