خرید بک لینک

ارتباط سریال I2C

پایه های مورد استفاده پروتکل I2C در AVR به نام پایه SCL و SDA است. در مطالب ابتدایی این آموزش با این ارتباط و پایه های آن آشنا شدید. البته برای ارتباط باید ازیک مدار مقاومتی مانند مدار زیر استفاده کنید. (مدار زیر نحوه ارتباط یک تراشه با میکروکنترلر AVR از طریق ارتباط I2C را نشان می دهد).

ارتباط سریال I2C در زبان بیسیک BASIC

نکته : حداکثر فرکانس کار این ارتباط 400khz می باشد.

در ارتباط I2C هم مانند ارتباط سریال spi یک سیستم باید master و دیگر سیستم ها به صورت slave طرح ریزی شوند.

نحوه ارتباط سریال spi یک سیستم Master با دیگر سیستم ها به صورت Slave

نکته : برد این ارتباط با مقدار مقاومتی حدود چند سانتی متر می باشد و بر ای فواصل دور نمی توان از آن استفاده کرد. در فواصل دور باید سیگنال تقویت شود.مدار زیر برای فواصل دور و تا فاصله 80cm طراحی شده است.

مدار تقویت کننده جهت افزایش فاصله ارتباط سریال I2C تا 80 سانتی متر

پیکر بندی پایه data در ارتباط سریال I2C در زبان بیسیک BASIC

Config sda = pin.x

1

Config sda = pin.x

این دستور پایه sda را به عنوان پایه data برای میکرو معرفی می کند.

پیکر بندی پایه clock در ارتباط سریال i2c

Config scl = pin.x

1

Config scl = pin.x

این دستور پایه scl را به عنوان پایه clock برای میکرو معرفی می کند.

تعیین فرکانس کلاک در ارتباط سریال i2c

Config i2cdelay = x

1

Config i2cdelay = x

این دستور مقدار x را در 10k ضرب کرده و به عنوان فرکانس کلاک i2c استفاده می کند.

نکته : x می تواند بین 1 تا 40 تغییر کند و در صورت قرار دادن مقدار بیشتر همان مقدار 40 را در نظر می گیرد.

پیکر بندی پایه clock در ارتباط سریال i2c

Config scl = pin.x

1

Config scl = pin.x

این دستور پایه scl را به عنوان پایه clock برای میکرو معرفی می کند.

دریافت داده از خط ارتباط سریال i2c

I2creceive address , var , nt , nr

1

I2creceive address , var , nt , nr

در برنامه نویسی این دستور از پورت ارتباط سریال i2c داده دریافت و در متغیر var می ریزد.

Address : در زمانی که سیستم slave یک حافظه سریال متصل به پورت i2c باشد می توانید آدرس حافظه را تعیین و از آن آدرس داده دریافت کنید.

Nt : مشخص کننده تعداد بایت ارسالی

Nr : مشخص کننده تعداد بایت دریافتی

ارسال داده از خط ارتباط سریال i2c

I2cxend address , var , nt

1

I2cxend address , var , nt

این دستور به پورت ارتباط سریال i2c داده درون متغیر var را ارسال می کند.

Address : در زمانی که سیستم slave یک حافظه سریال متصل به پورت i2c باشد می توانید آدرس حافظه را تعیین و به آن آدرس داده ارسال کنید.

Nt : مشخص کننده تعداد بایت ارسالی

شروع پروتکل ارتباط سریال i2c

I2cstart

1

I2cstart

این دستور پورت i2c را آماده ارسال داده می کند.

پایان پروتکل ارتباط سریال i2c

I2cstop

1

I2cstop

این دستور پورت i2c را قطع می کند.

دریافت داده از پروتکل ارتباط i2c

I2crbyte var , ack|nack

1

I2crbyte var , ack|nack

این دستور از پورت i2c داده دریافت کرده و در متغیر var می ریزد. برای ادامه کار در صورتی که بخواهید بایتی دیگر را بخوانید باید از گزینه ack و اگر آخرین بایت داده دریافتی شما باشد از گزینه nack استفاده می شود.

ارسال داده به پروتکل ارتباط i2c

I2cwbyte var

1

I2cwbyte var

این دستور به پورت i2c داده درون متغیر var را ارسال می کند.

پروژه :

در پروژه زیر ارتباط بین سنسور دمای DS1624 و میکروکنترلر AVR توسط پروتکل ارتباط سریال i2c می باشد. میکروکنترلر AVR توسط ارتباط سریال UART به کامپیوتر متصل بوده و مقدار دما در محیط Rerminal Emulator مشاهده می شود. این سنسور دما مقادیر دمای خود را توسط ارتباط سریال ارسال می کند.

$regfile = "m88def.dat" $crystal = 8000000 $baud = 19200 Config scl = portd.1 Config scl = portd.1 Config sda = portd.3 Dim l2ctemp as byte Const ds 1624wr = & b10010000 Const ds 1624rd = & b10010001 L2cstart L2cwbyte ds 1624wr L2cwbyte &hac L2cwbyte &h00 L2cstop Waitms 25 L2cstart L2cwbyte ds 1624 wr L2cwbyte & hee L2cstop Waitms 25 Do L2cstart L2cwbyte ds 1624 wr L2cwbyte &haa L2cstart L2cwbyte ds 1624rd L2crbyte l2ctemp L2 crbyte l2ctemp , nack L2cstop Print "temperature:" ; str (i2ctemp) ; "degrees" ; chr (13) ; Waitms 25 Loop End

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

31

32

33

$regfile = "m88def.dat"

$crystal = 8000000

$baud = 19200

Config scl = portd.1

Config scl = portd.1

Config sda = portd.3

Dim l2ctemp as byte

Const ds 1624wr = & b10010000

Const ds 1624rd = & b10010001

L2cstart

L2cwbyte ds 1624wr

L2cwbyte &hac

L2cwbyte &h00

L2cstop

Waitms 25

L2cstart

L2cwbyte ds 1624 wr

L2cwbyte & hee

L2cstop

Waitms 25

Do

L2cstart

L2cwbyte ds 1624 wr

L2cwbyte &haa

L2cstart

L2cwbyte ds 1624rd

L2crbyte l2ctemp

L2 crbyte l2ctemp , nack

L2cstop

Print "temperature:" ; str (i2ctemp) ; "degrees" ; chr (13) ;

Waitms 25

Loop

End

برچسب: نویسنده: آریا یزدانی تاريخ: شنبه 30 فروردين 1399 ساعت: 7:12

صفحه بندی