KKのものづくり奮闘記
ものづくりが好きな会社員のブログ。 3Dプリンタ買いました(2019.12)。
カレンダー
05
2025/06
07
S
M
T
W
T
F
S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
プロフィール
HN:
KK
性別:
男性
職業:
会社員
趣味:
ランニング・電子工作・ゲーム・カラオケ
自己紹介:
愛知県のとある会社の社員。もう9年目。
書類上は愛知県民、心は長野県民。
日常のこと、作った電子回路のことなど書いてる…
最近、カラオケの精密採点点数向上のため、日々特訓中・・・
写真はうちの猫のタマ。可愛いよ~~
JogNote
最新記事
ESPduinoを使って天気予報ガジェットを作る
(08/15)
新しいPLAフィラメント使ってみました3
(01/15)
新しいPLAフィラメント使ってみました2
(01/13)
新しいPLAフィラメント使ってみました
(01/12)
【Adventurer3】プラットフォーム清掃方法を変えてみました
(01/09)
カテゴリー
自己紹介 ( 1 )
日記 ( 106 )
感想 ( 4 )
電子回路 ( 40 )
ラズパイ ( 2 )
3Dプリンタ ( 7 )
パソコン ( 3 )
部活 ( 74 )
フリーソフトなど ( 6 )
オンラインゲーム ( 1 )
タイピング ( 19 )
プログラミング ( 3 )
ゲーム ( 2 )
曲・歌 ( 1 )
写真・動画 ( 5 )
未分類 ( 0 )
アーカイブ
2020 年 08 月 ( 1 )
2020 年 01 月 ( 4 )
2019 年 12 月 ( 5 )
2019 年 05 月 ( 1 )
2018 年 09 月 ( 1 )
ブログ内検索
リンク
KKのにちじょう奮闘記
風の吹く坂道
Mr.ハレルヤの「something wonderful」を探して
暇人の集い
マイコンカーラリーネット
秋月電子通商
共立エレショップ
千石電商
ストロベリー・リナックス
aitendo
Digi-Key
浅草ギ研
Vector
HOZAN ホームページ
HAKKO ホームページ
マイコンカーラリー販売
(社)全国工業高等学校長協会
KKのジョグノート
カウンター
天気予報
バーコード
RSS
RSS 0.91
RSS 1.0
RSS 2.0
アクセス解析
[PR]
アクセスカウンター
ブログランキング
メールフォーム
Powered by
NINJA TOOLS
[
NINJA_STYLE_MAILFORM
]
アフィリエイト
2025
06,18
16:28
[PR]
CATEGORY[]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
2012
04,01
01:19
ソフトウェアI2Cの動作テスト
CATEGORY[電子回路]
最近、部屋のフローリングが痛んできたのでカーペットを購入して敷きました。
いいですね~、足の冷えが軽減されてパソコン作業が楽になりました(^^)
そういや、もう4月ですね~。早い早い。
気候も暖かくなって過ごしやすくなってきました。
愛知県ってもうそろそろ桜が咲くとかどうとか。花見でもしてみようかな。
さて、本題。
今回は、C18に搭載?されているソフトウェアI2Cの動作テストを行いました。
正直使い方がよく分からない上資料も無いので前から手を付けていませんでした。
資料が無いのでどうしようかと思い・・・「自分でソースファイル全部読みゃ良いじゃんww」という結論に。
ちゃちゃっと読んでみると・・・そのまんまでしたねw
I/Oポートと各種遅延時間を設定してあげたら動きました。
色々やってますけど、ちゃんと100kHz・400kHzで動いてません・・・。一応動作したので載せときます。
I/OポートからH信号を出力する際に、ポートを入力にしてH信号を出力していた方法は「こんなやり方もあるのか~」とちょっと目から鱗。
今後も利用できるよう汎用的に使えるファイル一式を作成しました。
圧縮したものが
こちら
。(2012年4月5日変更しました)
なおテストの際、PIC18F4550を利用しました。動作クロックは48[MHz]です。
SDA = RC0 SCL = RC1 となっています。
また、今回のテストでは単バイト受信しか行なっていないので、他の関数は動作しない可能性があります。
近々修正して上げる予定ですので。
圧縮ファイル内には
・SW_I2Cフォルダ(I2C各種制御)
・sw_i2c_eep_my.h(I2CEEPROM処理)
・i2c_data.h(I2C用変数宣言)
が入っています。
これをそのままメインのソースファイルがあるフォルダにコピーします。
プログラム内で
#include "SW_I2C/sw_i2c_my.h"
と宣言してやればSW_I2C関連の制御が一式行えます。
私が作成したSW_I2Cですが、
①通信速度設定
②SDA・SCLピンの設定
③遅延時間の設定
の設定を事前にを行います。
まず、SW_I2Cフォルダ内sw_i2c.hで①と②の設定です。
①15~17行目 使う通信速度のコメントを消して下さい。
/*使用する通信速度のコメント消去*/
//#define SPEED_100K /*100kbps*/
#define SPEED_400K /*400kbps*/
②23~33行目 使用したいI/Oポートを記述してください。
/*DATAピン設定*/
#define DATA_LOW TRISCbits.TRISC0 = 0; // define macro for data pin output
#define DATA_HI TRISCbits.TRISC0 = 1; // define macro for data pin input
#define DATA_LAT LATCbits.LATC0 // define macro for data pin latch
#define DATA_PIN PORTCbits.RC0 // define macro for data pin
/*CLKピン設定*/
#define CLOCK_LOW TRISCbits.TRISC1 = 0; // define macro for clock pin output
#define CLOCK_HI TRISCbits.TRISC1 = 1; // define macro for clock pin input
#define SCLK_LAT LATCbits.LATC1 // define macro for clock pin latch
#define SCLK_PIN PORTCbits.RC1 // define macro for clock pin
次に、SW_I2Cフォルダ内sw_i2c_delay.hで③の設定です。
遅延時間ですが通信速度の半周期を設定時間としています。
100[kbps]の場合、10[us] / 2 = 5[us]
400[kbps]の場合、2.5[us] / 2 = 1.25[us]
が設定時間です。
sw_i2c_delay.h内には
・SWDelayI2C
・SWDelayI2C_LO
・SWDelayI2C_HI
の3種類の遅延関数があります。
実際のところ、送受信時の各種処理時間によって計算と実測の値が異なってきます。
そのため、実測値を100[kbps] or 400[kbps]にするために遅延時間を短くした遅延関数を作成してあり、SW_DelayI2C_LOとSW_DelayI2C_HIがそうです。
SW_DelayI2Cは計算値そのままの遅延関数です。
別に、全て計算値でも動作はするのでそこら辺はお好みでどうぞ。
今回の動作テストでは、I2C通信のEEPROM 24LC256を利用しました。
プログラムは圧縮ファイル内のsw_i2c_eep_my.hです。
①読み込みプログラム
/*=====I2C EEPROM 読み込み=====*/
unsigned char S_EE_Read(char chip, unsigned int address){
unsigned char data;
SWStartI2C();
SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) & 0xFE);
SWAckI2C();
SWWriteI2C(address >> 8);
SWAckI2C();
SWWriteI2C(address & 0xff);
SWAckI2C();
SWRestartI2C();
SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) | 0x01);
SWAckI2C();
data = SWReadI2C();
SWAckI2C();
SWStopI2C();
return (data);
}
②書き込みプログラム
/*=====I2C EEPROM 書き込み=====*/
void S_EE_Write(char chip, unsigned int address ,unsigned char data){
SWStartI2C();
SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) & 0xFE);
SWAckI2C();
SWWriteI2C(address >> 8);
SWAckI2C();
SWWriteI2C(address & 0xff);
SWAckI2C();
SWWriteI2C(data);
SWAckI2C();
Delay100TCYx(75); /*wait 3ms*/
SWStopI2C();
}
※2012年4月5日更新
圧縮フォルダにi2c_data.hが入っていなかったので追加しました。
※2012年4月24日更新
sw_i2c_eep_my.hのS_EE_Write関数を修正しました。
[4回]
PR
コメント[0]
<<
うたた寝タイマー
|
HOME
|
ノキアのLCDモジュール動作テスト
>>
コメント
コメント投稿
NAME:
MAIL:
URL:
COLOR:
Black
LimeGreen
SeaGreen
Teal
FireBrick
Tomato
IndianRed
BurlyWood
SlateGray
DarkSlateBlue
LightPink
DeepPink
DarkOrange
Gold
DimGray
Silver
SUBJECT:
COMMENT:
PASS:
<<
うたた寝タイマー
|
HOME
|
ノキアのLCDモジュール動作テスト
>>
忍者ブログ
[PR]