ATmega328でSC16IS752を使う



今までUARTがSingleChannleのSC16IS750を紹介してきましたが、今回UARTがDualChannelの SC16IS752を入手し ました。
写真の様に巨大なクリスタルが実装されています。


UART関連のピンがチャネルAとチャネルBに増えているだけで、その他のピンは750と同じです。


ATmega328との接続も750と全く同じで、i2cで使う場合の結線は以下の様になります。
SC16IS752 ATmega328 備考
i2c-SPI 5V i2c/SPIの切り替え
A0-CS 5V i2cアドレスの選択(※)
A1-SI 5V i2cアドレスの選択(※)
NC-SO N/C i2cの時は使わない
SCL-SCK SCL PullUpする必要が有る
SDA-VSS SDA PullUpする必要が有る
/IRQ N/C チップのIRQに直結
RESET N/C 基板上でPullUpされている
VIN 5V
GND GND

SPIで使う場合の結線は以下の様になります。
SC16IS752 ATmega328 備考
i2c-SPI GND i2c/SPIの切り替え
A0-CS CS スケッチ上でピンを指定
A1-SI MOSI
NC-SO MISO
SCL-SCK SCK
SDA-VSS GND
/IRQ N/C チップのIRQに直結
RESET N/C 基板上でPullUpされている
VIN 5V
GND GND

SC16IS75Xのボーレートはクリスタルの周波数を分周して作り出しています。
SC16IS750には14.7456MHzのクリスタルが実装されていましたが、SC16IS752には1.8432Mhzのクリスタルが使わ れています。
こちらで紹介しているSC16IS750用のライブラリでも、ヘッダーファイル に定義されている以下の定義を変更すれば、
752でも使うことができますが、両方のチャンネルを使うことができません。
#define     SC16IS750_CRYSTCAL_FREQ (14745600UL)
//#define     SC16IS750_CRYSTCAL_FREQ (1843200UL)     
//#define     SC16IS750_CRYSTCAL_FREQ (16000000UL)

そこで、両方のチャネルを使うことができるライブラリをこちらに公開しています。
各関数の引数にチャネルを追加しただけで、基本的な使い方は750のライブラリと同じです。
最大転送速度は750と同様にクリスタルの周波数で決まります。
1.8432Mhzのクリスタルが使われている場合、1,843,200/16 = 115,200bpsです。

価格は2チャンネルの752が$3.78、1チャネルの750が$2.74なので、750を2つ買うよりも、
752を1つ買う方がお得です。

一番気になっていたチャネルAとチャネルBで違うボーレートを使えるかどうか試してみましたが、
問題なく違うボーレートで使えます。




このモジュールはIRQピンとチップのIRQがちゃんと繋がっていますが、IRQピンはPullUpされていません。
チップのIRQの先にPullUp抵抗は有るのですが、PullUp抵抗の先は何処にも繋がっていません。
外部抵抗を使ってIRQピンをPullUpすれば、割り込み時にIRQはLOWに落ちます。
I2Cインタフェースを使う場合、I2Cのライブラリ(wire.h)は割り込みを用いており,割り込みハンドラー内でI2Cを使ってレジスター を読みことはできません。

続く...