0

PSoC – TX8モジュール

UARTモジュールとまるきり同じだけど、TXだけ使うとデジタルブロック1つで済むので節約したい時に使える。
とくにCY8C21334でCapSense (CSD)使うと、digital/analogともに残り1ブロックになるので、このTX8を使うかI2Cでもう1つ別のマイコンとやりとりしてそっちにシリアル通信してもらうかしないとパソコンとやりとりできない。


9600bps出すためのCPU設定。
内蔵24MHz → System Clock → VC1 → VC3と流れて分周していってTX8_1のクロックソースにする
TX8モジュール


Port_0_1まで結線する
TX8モジュール


main.c

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
void main()
{
  TX8_1_Start(TX8_1_PARITY_NONE);
  while(1){
    TX8_1_CPutString("this is test¥r¥n");
  }
}
これだけで8bit パリティ無し ストップビット1で送信できる。


あとは秋月のFT232RL基盤のRXDピンに流せばいい
橋本商会 秋月FT232RL基盤をPSoC CY8C29466で使ってみる


受信できた
TX8モジュール

0

PSoC CapSenseで静電容量タッチセンサ 4つ動かした

前の記事の回路などが思いきり間違っていたので修正しつつ、CapSenseとLED4つずつに増やした。
多分、マイコンの足の数だ増やせる。

例によってコードはBitbucketにアップした




CapSense CSDウィザードで4つスイッチを置いて
capsenseたくさん


AnalogMUXBusに接続されている事を確認
capsenseたくさん


CSDの設定。しきい値などをかなり何度も直した。適当にやってたので理論をわかってないんだけど、どうやらセンサ部分の形状や配置に応じて微調整しなければ使い物にならないっぽい。
capsenseたくさん


ピンの設定。LEDが4つにした。
使ってないピンをPull Upにしておくとノイズが来ないので安定する事に気づいた。
capsenseたくさん


実体配置図
capsenseたくさん


前の記事の回路が間違っていて、あのままではうまく動かなかったが、1kΩの抵抗と0.1μFのキャパシタを足したら複数認識できるようになった。

CapSense CSDのデータシートにあった図。抵抗とキャパシタが必要らしい
capsenseたくさん

P1[5]とP0[3]の間に1kΩを入れて、P0[3]からキャパシタを通して銅箔テープに延ばす。
R0011375
前の記事はP1[5]とP0[3]で静電容量取ろうとしてたので、思いっきり間違ってた。



プログラム。
前のやつのif(CSD_1_bIsSensorActive(センサ番号))を増やしただけ。
shokai / CapSense LED / source — bitbucket.org
main.c

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#define _BV(BIT) (1<<BIT)
#define sbi(BYTE,BIT) (BYTE |= _BV(BIT))
#define cbi(BYTE,BIT) (BYTE &= ~_BV(BIT))
#define LED_0_ON() sbi(PRT1DR, 7);
#define LED_0_OFF() cbi(PRT1DR, 7);
#define LED_1_ON() sbi(PRT0DR, 1);
#define LED_1_OFF() cbi(PRT0DR, 1);
#define LED_2_ON() sbi(PRT0DR, 5);
#define LED_2_OFF() cbi(PRT0DR, 5);
#define LED_3_ON() sbi(PRT0DR, 7);
#define LED_3_OFF() cbi(PRT0DR, 7);


void main()
{
  M8C_EnableGInt;
  CSD_1_Start();
  CSD_1_InitializeBaselines();
  CSD_1_SetDefaultFingerThresholds();
  while(1){
    CSD_1_ScanAllSensors();
    CSD_1_UpdateAllBaselines();
    if(CSD_1_bIsSensorActive(0)){
      LED_0_ON();
    }
    else{
      LED_0_OFF();
    }

    if(CSD_1_bIsSensorActive(1)){
      LED_1_ON();
    }
    else{
      LED_1_OFF();
    }
    if(CSD_1_bIsSensorActive(2)){
      LED_2_ON();
    }
    else{
      LED_2_OFF();
    }
    if(CSD_1_bIsSensorActive(3)){
      LED_3_ON();
    }
    else{
      LED_3_OFF();
    }
  }
}




電源を5VのACアダプタにしたらすっきりしたので、大学院棟の俺の机に置いておきます
さわると光ります
R0011369

0

PSoC CapSenseで静電容量タッチセンサを自作した

回路などが間違っている事に気がつきました
正しい実装は次の記事へ。
使った部品の説明などはこのまま下へ。
*********************************************


できたっぽい。ひさしぶりにマイコンいじった。
銅箔テープの部分に指が近づけると電気容量の乱れるので、それをPSoC CY8C21334のCapSense機能で検出してLEDを光らせている。
コードもbitbucketにアップしました


(音小さい)

LEDは点滅させたくてさせているんじゃないんだけど、してしまっている。
もう少し抵抗値などの調整が必要らしい。

静電容量タッチセンサはメカニカルな部品が無いので、ビデオの最後にやっている様に、何の変哲もない壁に埋め込んでその上に人の手が乗っているかを検出したりできる。
防水加工も容易だし、銅箔等を使えば曲面に埋め込む事も出来る。
実際ヨーロッパの寒いところに行くと信号機やエレベータのボタンが凍結防止のために静電容量センサで実装されていたりする。

PSoCのCapSenseはワンチップで静電容量センサを簡単に実装できるパッケージで、商業的にはSONYのオーディオコンポやAppleのiPodのホイールなんかにも使われていてずいぶん潤っているらしく、セミナーも無料だし基盤は配るしタダメシも出てくる。


次は複数のcapsenseを使えるようにしてみる予定。
静電容量タッチセンサ(capsense)


■必要な部品
リンク先は買ったお店の商品ページ。

  • PSoCマイコン CY8C21334-24PVXI(20pin)
    capsenseがついているマイコン。いろいろ探した結果、これをchip1stopで買うのがコストパフォーマンスが一番良いという結論になった
  • 秋月のSSOP変換基板
    CY8C21334がSSOPという超小さいパッケージしか無いので、ブレッドボードに刺せるように足幅を広げる基盤。28ピンなので8ピン余るけど安いからこれを使う。
  • 銅箔テープ たしか千石で買ったと思う。薄くて平べったい電極ならなんでも良さそう


あとは、秋月で買ったPSoC MiniProgというUSB接続の書き込み機と、ブレッドボードとLEDとクリップとベニヤ板と変換基板のピンヘッダ(オス)。



■センサー部分の制作
銅箔テープを千石で買ってきて適当な木の板に平行に貼る。裏に糊がついていたので楽だった。
銅箔テープ銅箔テープ

CY3235 CapSense-ProxDetでは2.2kΩの抵抗と0.1μFのキャパシタがついているらしいが、手持ちのPSoC Expressセミナーの時にもらったCY3121では何もなくCY8C21434に直結しているように見えるので、これでいいのかも。


■マイコンのはんだづけ
今回はんだづけはここだけ。
フラックスをたっぷり塗って、足に沿ってさっさっと撫でる。
変換基板にはんだづけ変換基板にはんだづけ



■PSoC Designerでのデバイス設定
新規プロジェクトをCY8C21334 24PVXI(20pin)で開始して、
Device EditorでUser ModulesからCap Sense(CSD)を配置。
capsense

「Select CSD with clock prescaler」を選択した。
PSoC入門:PSoC First Touch編 – MeRLマイコンブの記事ではwithout clock prescalerを選んでいるが、digital/analog block消費量も変わらないのでclock prescalerにしてみた。


Interconnect Viewで、CSD_1をplaceしてから右クリックすると「CSDウィザード」というのがあるのでそれを使う。
センサの数を1、スライダーを0にしてPORT0_1を左上にドラッグアンドドロップして「OK」
capsense


すると、CSD_1に接続されている。
いままでUARTやADCモジュールではInterconnect Viewで自分で接続していたが、その必要が無くなっている。
capsense


CSD_1の設定を確認。Pinの設定をしておく。
capsense



最後に、PORT0_0でLEDを光らせるためにDriveをStrongに変更
capsense


ピン割り当て
capsense




Generate Applicationして、Cでプログラムを書く。


■PSoC Designerでのプログラミング
shokai / CapSense LED / source — bitbucket.org
main.c

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#define _BV(BIT) (1<<BIT)
#define sbi(BYTE,BIT) (BYTE |= _BV(BIT))
#define cbi(BYTE,BIT) (BYTE &= ~_BV(BIT))
#define LED_ON() sbi(PRT0DR, 0);
#define LED_OFF() cbi(PRT0DR, 0);


void main()
{
  M8C_EnableGInt;
  CSD_1_Start();
  CSD_1_InitializeBaselines();
  CSD_1_SetDefaultFingerThresholds();
  
  while(1){
    CSD_1_ScanAllSensors();
    CSD_1_UpdateAllBaselines();
    if(CSD_1_bIsSensorActive(0)){
      LED_ON();
    }
    else{
      LED_OFF();
    }
  }
}




■マイコンの回路を作る
データシートを見て、PSoC MiniProgから接続が必要なSCLK、SDATA、XRES、VDD(VCC)、VSS(GND)の位置を確認
ピン配置


その通りに配線。電源はUSBのPSoC MiniProgから給電できる。
この時点でLEDを点灯させるだけのプログラムを書いて、マイコン単体で動くか確認した。
R0011336



さきほどのプログラムを書き込んで、
PORT0_1とPORT1_5からクリップで銅箔テープに接続して完成。
さわると光る。
静電容量タッチセンサ(capsense)