MENU
カタログクリップ
本ページはプロモーションを含みます。

LPS331使用 高精度大気圧モジュールとのI2Cでの通信テスト

2018 11/01
広告
電子工作
2014年1月28日2018年11月1日

秋月で、「LPS331使用 高精度大気圧モジュール」を650円で入手しましたので、そのテストです。大気圧モジュールの温度補償用として精度は±2 degCほどのようですが、温度計もついています。通信プロトコルとして、I2CとSPIに対応しています。5番ピンをプルアップするかしないかで、I2C/SPIの切り替えができます。AVRを使って、I2Cの通信の練習をしようと思いましたので、I2Cモードで通信のテストをしてみます。AVRにはTWIにハードウェア対応しているatmega328Pを使います。

LPS331APは3.3V動作です。まず、この前作ったUSB-AVRライタは5V供給ですので、3.3 Vレギュレータを入れて、3.3 Vにもジャンパピンで対応できるようにさくりと工作しました。

そして、適当にコーディングをしてから、PC5(SCL), PC4(SDA)をLPS331APへ配線します。WHO_AM_Iを連打するコードをつくり、ロジック・アナライザで動作チェックをしました。

一発目から無事、通信できていました。
f:id:beiz23:20140128223932j:image:w640
ロジック・アナライザのカラフルな感じが好きです。

f:id:beiz23:20140129002017j:image:w360
チップLED付きです。

コードはこちら。SCL, SDAを外部でプルアップしない場合は、PC5, PC4についてPORTCレジスタに1を入れてやれば、AVR内部でプルアップしてもらえます。ただAVRのプルアップは弱いので(抵抗が大きいので)100kbps以上の早い通信をしようとすると失敗しました。エラー処理はしていません。


#include <avr/io.h>
#include <util/delay.h>
#include <util/twi.h>

#define SLA_R  0b10111001
#define SLA_W  0b10111000

#define SCL PORTC5
#define SDA PORTC4

int8_t read_one(uint8_t reg_add);

int main(void){
  PORTC = (1 << SCL) | (1 << SDA);//pull up

  // 1e6/(16+2*TWBR*TWPS) < 100 kHz = 1e5
  //TWSR |= (0 << TWPS1) | (0 << TWPS0); //prescaler 1
  //TWBR = 0x00;// TWBR = 0
  //TWAR = //address & general call
  while(1){
    read_one(0x0f);
    _delay_ms(100);
  }
}

int8_t read_one(uint8_t reg_add){
  int8_t res;
  // ST send start bit
  TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); // | (1 << TWIE);
  while (!(TWCR & (1 << TWINT))); // wait
  if((TWSR & 0xf8) != TW_START){ // chk status
    return -1; //error
  }

  // SLA+W
  TWDR = SLA_W;
  TWCR = (1 << TWINT) | (1 << TWEN);//return
  while (!(TWCR & (1 << TWINT)));//wait
  if((TWSR & 0xf8) != TW_MT_SLA_ACK){ //chk
    return -1;//error
  }

  // SUB: multiread? + register add
  TWDR = reg_add + (0 << 7); //single read MSB = 0;
  TWCR = (1 << TWINT) | (1 << TWEN);
  while (!(TWCR & (1 << TWINT)));//wait
  if((TWSR & 0xf8) != TW_MT_DATA_ACK){ //chk
    return -1;//error
  }

  // SR
  TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); // | (1 << TWIE);
  while (!(TWCR & (1 << TWINT))); // wait
  if((TWSR & 0xf8) != TW_REP_START){ // chk status
    return -1; //error
  }

  // SLA + R
  TWDR = SLA_R;
  TWCR = (1 << TWINT) | (1 << TWEN);//return
  while (!(TWCR & (1 << TWINT)));//wait
  if((TWSR & 0xf8) != TW_MR_SLA_ACK){ //chk
    return -1;//error
  }

  // DATA read
  TWCR = (1 << TWINT) | (1 << TWEN) | (0 << TWEA); //NACK
  while (!(TWCR & (1 << TWINT)));//wait
  if((TWSR & 0xf8) != TW_MR_DATA_NACK){ //chk
    return -1;//error
  }
  res = TWDR;

  // SP
  TWCR = (1 << TWINT) | (1 << TWSTO)| (1 << TWEN);

  return res;
}
電子工作
highlightjs

関連記事

  • 購入前に知っておきたいUSB接続・PC接続型デジタルオシロスコープの利点と欠点。スタンドアロン型との違いは。
    2018年8月9日
  • SWR値はどのくらいまで大丈夫?SWR値から分かる反射波電力の割合。
    2018年7月23日
  • アマチュア無線用SWR計の選び方とダイヤモンド・コメット・ダイワの製品一覧。おすすめは?
    2018年7月23日
  • OWONのデジタルオシロスコープSDS5032Eの基本的な使い方。
    2018年7月10日
  • PCXpresso NXP LPC1769の評価ボード(OM13000)にmbedのバイナリを書き込む方法
    2017年5月13日
  • L, Cを測ることを考える
    2014年8月10日
  • Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る
    2014年7月26日
  • raspberry pi を使って何かするメモ。
    2014年7月26日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • メンズ美容家電
      • ラムダッシュ
    • ルンバ
    • 一覧比較
    • 工具
    • 浄水器
    • 温水洗浄便座
    • 炊飯器
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
    • 血圧計
    • 調理器具
    • 電子レンジ
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • モナークHGとモナークM7の4つの違い。[ニコン双眼鏡]
  • ニコン モナーク M7とM5の4つの違い。[双眼鏡]
  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
  • RZ-760、GT-760、ST-760の違い。[ガス缶・CB缶]
  • RZ-730、RZ-730S、RZ-730SBK、RZ-730SWH、ST-Y450の違い。
  • TC-EA35WとTC-E123SBKの違いを比較。[スティッククリーナー]
  1. ホーム
  2. 趣味
  3. 電子工作
  4. LPS331使用 高精度大気圧モジュールとのI2Cでの通信テスト
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次