< D A0>

Similar documents
81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

アナログ・接点変換器

情報処理演習 B8クラス

ファイル入出力

スライド 1

Prog1_10th

Taro-ファイル処理(公開版).jtd

ファイル入出力

計算機プログラミング

Microsoft Word - no15.docx

Microsoft Word - no11.docx

スライド 1

MODBUS ユーザーズマニュアル 페이지 1 / 23

TFTP serverの実装

第12回 モナドパーサ

CS-3000/5000 用 LabView ドライバ 取扱説明書 第 1 版 2014/7/28 岩通計測株式会社 1. 使用条件 a. 装置 : 岩通計測製 CS-3000/CS-5000 シリーズ b. 動作確認 PC/OS:IBM PC/AT 互換機 マイクロソフト Windows7 c.p

Microsoft Word - 3new.doc

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi

Microsoft PowerPoint - enshu4.ppt [äº™æ‘łã…¢ã…¼ã…›]

PowerPoint Presentation

プログラミング基礎

Microsoft PowerPoint - C_Programming(3).pptx

PowerPoint プレゼンテーション

UIOUSBCOM.DLLコマンドリファレンス

Microsoft PowerPoint pptx

Microsoft PowerPoint - フェリカ通信仕様書_

slide5.pptx

パーツリスト 組み立て前にすべてのパーツがそろっているかご確認ください 種類 品番 数 種類 品番 数 基板 I2C LCD 1 コンデンサ 0.1uF (104) 積層セラミック 1 IC ATtiny コンデンサ 10uF 電解 1 半固定抵抗 10~50kΩ 1 コネクタ IC ソ

2006年10月5日(木)実施

C 資料 電脳梁山泊烏賊塾 ファイルの入出力 C++ のバイナリファイル入出力 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

ポインタ変数

Section1_入力用テンプレートの作成

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

基礎計算機演習 実習課題No6

(Microsoft Word -

gengo1-12

Android プログラム ガイド

Prog1_12th

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

Microsoft Word - Training10_プリプロセッサ.docx

プログラミング基礎

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

CM-3G 周辺モジュール拡張技術文書 INA226センサ(電流、電圧、電力)

1013  動的解析によるBOTコマンドの自動抽出

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(12)

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

演算増幅器

slide4.pptx

PowerPoint プレゼンテーション

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

Microsoft Word - no202.docx

Microsoft PowerPoint - 11.pptx

02: 変数と標準入出力

Microsoft PowerPoint - 5Chap15.ppt

目次 1 本アプリケーションノートの目的 送信手順 基本的な送信方法 キャリアセンスなし送信 キャリアセンスあり送信 ACK 期待送信 フレームメモリへのデータの設定 INFO

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Microsoft PowerPoint - kougi11.ppt

PowerPoint Presentation

02: 変数と標準入出力

program7app.ppt

OPN Terminalの利用方法

DUSx200 シリーズコントローラ I2C インターフェース仕様書

基礎プログラミング2015

2016 年 8 月 第 1.0 版 ラトックシステム株式会社

プログラミング実習I

USB モジュール

CONTEC DIOプロバイダ ユーザーズガイド

Microsoft Word - no204.docx

NFCライブラリマニュアル

人工知能入門

A. InstallScript プロジェクト InstallScript インストールは InstallScript エンジンによって制御され 決められた順序で一連のイベントが生成されます これらのイベントは インストールを実行するソフトウェアハンドラーをトリガーします たとえば インストールがロ

(Microsoft Word - \216\346\220\340SiTCP-VME-Master\(Rev26\).doc)

スライド 1

Microsoft Word - no103.docx

DT-900/910/930 アプリケーション作成上の注意点

I2Cコントローラ、ハード・プロセッサ・システム(HPS)のテクニカル・リファレンス・マニュアル(TRM)

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

gengo1-12

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

2.Win32API によるファイル アクセス 本稿では 読み書きするデータは テキスト ( 文字列 ) との前提で解説します ( 絶対パス指定による任意の場所のファイル アクセスを目指します ) (1) 疑問? user 32.dll はどこにある? と思った方 アメンボ以外にいませんか?? そう

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

gengo1-11

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

訂正 _ 第 1 回 1 Arduino Arduino を用意する 入力 アナログ Analog 入出力 任意の電圧を扱える 電源系 外部入力 7 12V デジタル digital 入出力 リセットボタン Low High いわゆる 01 が入出力される 通常は Low 0V GND High 5

情報処理Ⅰ

ワイヤレスバーコードリーダー CM-520W1 設定資料 Bluetooth SPPの設定

Java知識テスト問題

Microsoft PowerPoint - prog03.ppt

Transcription:

#include #include <htc.h> ".h" * マスターモード専用 I2C 関数 教育 ホビー用 * 営利目的 商用への利用は禁止 * 詳しいタイミングは NXP の資料参照のこと 関数の説明 * ストップ状態にします : クロックをHにしてデータをL->Hします _stop() SDA_LOW(); 初めはデータを L 確認 SCL_HIGH(); SCL を H にする // delay_us(i2c_tm_data_su); セットアップ時間待つ // SCL_DIR = I2C_INPUT; クロックをHにフロート delay_us(i2c_tm_stop_su); ホールド時間待つ SDA_HIGH(); SDAをLからHにデータ遷移 delay_us(i2c_tm_bus_free); バス開放時間 // SDA_DIR = I2C_INPUT; データ線をHにフロート * スタート状態にします : まずはデータ線を確実に H にして * スタート状態にします _Start() マクロも同一定義です _restart() SCL_HIGH(); クロックは確実に H とする SDA_HIGH(); データ線を H とする delay_us(i2c_tm_data_su); セットアップ時間待つ SCL_DIR = I2C_INPUT; クロックパルスを H に SDA_LOW(); SDA を H から L に変化させる delay_us(i2c_tm_start_hd); * バイトをスレーブに送ります * エラー時には TRUE を返します _sendbyte( byte) signed char i; for(i=7; i>=0; i--) 8 ビット分処理します SCL_LOW(); クロックを L に データのホールドタイムは 0 で すぐデータ送る SDA_DIR = ((byte>>i)&0x01); データ線のフロートするか if ((byte>>i)&0x01) 送るビットは SDA_HIGH(); else SDA_LOW(); ページ (1)

delay_us(i2c_tm_data_su); SCL_DIR = I2C_INPUT; クロック線をHにフロート if(_waitforscl()) クロック開放しているか return TRUE; バスエラー クロックの H レベル時間を確保 return FALSE; * スレーブへアドレスとデータ方向指定ビットを送ります * 7 ビットアドレス ( 最下位無視 ) 方向 (read:1,write:0) _sendaddress( address, rw) return _sendbyte(address (rw?1:0)); * スレーブ側からのアックをチェックします * アックを返すか アックなしか バスエラーなら ERROR です signed char _readack() ack; SCL_LOW(); クロック線をLにする SDA_DIR = I2C_INPUT; データ線を開放 - アック応答をみる delay_us(i2c_tm_scl_to_data); データ出力を確定のためSCLをLにする SCL_HIGH(); クロック線をH delay_us(i2c_tm_data_su); セットアップ時間待ち ack = SDA; アック応答よみ バイト処理の後クロック線をスレーブが開放したか確認 if(_waitforscl()) スレーブ動作エラー SCL_LOW(); // append return ack; * スレーブからバイトリードします * 読んだバイトを返すか もしバスエラーだったら ERROR を返します _readbyte() i; byte = 0; for(i=0; i<8; i++) SCL_LOW(); クロック線を L にする delay_us(i2c_tm_scl_low); クロックの L 時間を保証 SDA_DIR = I2C_INPUT; r データ線を開放 SCL_DIR = I2C_INPUT; クロック線をフロートしてH if(_waitforscl()) byte = byte << 1; 次のビットを読む byte = SDA; return ()byte; * スレーブ側にアックあるいは非アックを送ります * I2C_LAST という status を送ると これで最後バイトを送りますという意味です ページ (2)

_sendack( status) SCL_LOW(); クロック線をLにする if ( status & 0x01) SDA_LOW(); drive line low -> more to come else SDA_HIGH(); delay_us(i2c_tm_data_su); SCL_DIR = I2C_INPUT; クロック線をHに return; * スレーブに 1 バイトを送ります I2C_ERROR アック 非アックを返します * signed char _putbyte( data) if(_sendbyte(data)) return _readack(); アック 非アックを読み取り返します * スレーブから 1 バイト読み取り 転送のアックを確認 * 戻り値は I2C_ERROR なら true であり それ以外は byte _getbyte( more) byte; if((byte = _readbyte()) == I2C_ERROR) _sendack(more); return byte; * スレーブにバイト列を送り 転送のアックを確認する * もし転送不成功なら転送残バイト数を返す _putstring(const *str, length) signed char error; while(length) if((error = _putbyte(*str)) == I2C_ERROR) return -()length; バスエラー時の戻り値 else if(error) return ()length; アックが有りません str++; length--; return FALSE; 処理すべて OK * スレーブから指定されたバイト数を str 文字列に格納 転送のアックを返す * 読み込みに成功しなかった文字数を返す _getstring( *str, number) ページ (3)

byte; while(number) if((byte = _getbyte(number-1)) == I2C_ERROR) return number; バスエラーなので残バイト数返す else *str = ()byte; str++; number--; return FALSE; 処理すべて OK * 指定アドレスのデバイスと通信を開始する モードは * I2C_READ あるいは I2C_WRITE で指定される * もし指定アドレスに対してアック無いと TRUE を返す _open( address, mode) _start(); _sendaddress(address, mode); if(_readack()) return TRUE; return FALSE; 処理すべて OK * 遅いスレーブの場合用にクロック線が開放されるのをまつ * タイムアウト時間の後も SCL が開放されないときは TRUE を返す * もしそうでないときは SCL が開放された時に FALSE を返す _waitforscl() SCL_DIR をここでは入力にする if(!scl) delay_us(i2c_tm_scl_tmo); もしまだクロックが L のままならバスエラー if(!scl) return TRUE; return FALSE; * バスを開放する _free() uci; SDA_DIR=I2C_INPUT; for(uci=0;uci!=9;uci++) SCL_HIGH(); delay_us(5); SCL_LOW(); delay_us(5); * 1 文字読んで ucadr が 0 ならば読み取り終了する _read( ucadr) ucdat; if (_readfrom(ucadr)==0) ページ (4)

ucdat=_getbyte(i2c_more); _stop(); return(ucdat); ページ (5)