ارتباط سریال I2C
پایه های مورد استفاده پروتکل I2C در AVR به نام پایه SCL و SDA است. در مطالب ابتدایی این آموزش با این ارتباط و پایه های آن آشنا شدید. البته برای ارتباط باید ازیک مدار مقاومتی مانند مدار زیر استفاده کنید. (مدار زیر نحوه ارتباط یک تراشه با میکروکنترلر AVR از طریق ارتباط I2C را نشان می دهد).
نکته : حداکثر فرکانس کار این ارتباط 400khz می باشد.
در ارتباط I2C هم مانند ارتباط سریال spi یک سیستم باید master و دیگر سیستم ها به صورت slave طرح ریزی شوند.
نکته : برد این ارتباط با مقدار مقاومتی حدود چند سانتی متر می باشد و بر ای فواصل دور نمی توان از آن استفاده کرد. در فواصل دور باید سیگنال تقویت شود.مدار زیر برای فواصل دور و تا فاصله 80cm طراحی شده است.
پیکر بندی پایه data در ارتباط سریال I2C در زبان بیسیک BASIC
1 |
Config sda = pin.x |
این دستور پایه sda را به عنوان پایه data برای میکرو معرفی می کند.
پیکر بندی پایه clock در ارتباط سریال i2c
1 |
Config scl = pin.x |
این دستور پایه scl را به عنوان پایه clock برای میکرو معرفی می کند.
تعیین فرکانس کلاک در ارتباط سریال i2c
1 |
Config i2cdelay = x |
این دستور مقدار x را در 10k ضرب کرده و به عنوان فرکانس کلاک i2c استفاده می کند.
نکته : x می تواند بین 1 تا 40 تغییر کند و در صورت قرار دادن مقدار بیشتر همان مقدار 40 را در نظر می گیرد.
پیکر بندی پایه clock در ارتباط سریال i2c
1 |
Config scl = pin.x |
این دستور پایه scl را به عنوان پایه clock برای میکرو معرفی می کند.
دریافت داده از خط ارتباط سریال i2c
1 |
I2creceive address , var , nt , nr |
در برنامه نویسی این دستور از پورت ارتباط سریال i2c داده دریافت و در متغیر var می ریزد.
Address : در زمانی که سیستم slave یک حافظه سریال متصل به پورت i2c باشد می توانید آدرس حافظه را تعیین و از آن آدرس داده دریافت کنید.
Nt : مشخص کننده تعداد بایت ارسالی
Nr : مشخص کننده تعداد بایت دریافتی
ارسال داده از خط ارتباط سریال i2c
1 |
I2cxend address , var , nt |
این دستور به پورت ارتباط سریال i2c داده درون متغیر var را ارسال می کند.
Address : در زمانی که سیستم slave یک حافظه سریال متصل به پورت i2c باشد می توانید آدرس حافظه را تعیین و به آن آدرس داده ارسال کنید.
Nt : مشخص کننده تعداد بایت ارسالی
شروع پروتکل ارتباط سریال i2c
1 |
I2cstart |
این دستور پورت i2c را آماده ارسال داده می کند.
پایان پروتکل ارتباط سریال i2c
1 |
I2cstop |
این دستور پورت i2c را قطع می کند.
دریافت داده از پروتکل ارتباط i2c
1 |
I2crbyte var , ack|nack |
این دستور از پورت i2c داده دریافت کرده و در متغیر var می ریزد. برای ادامه کار در صورتی که بخواهید بایتی دیگر را بخوانید باید از گزینه ack و اگر آخرین بایت داده دریافتی شما باشد از گزینه nack استفاده می شود.
ارسال داده به پروتکل ارتباط i2c
1 |
I2cwbyte var |
این دستور به پورت i2c داده درون متغیر var را ارسال می کند.
پروژه :
در پروژه زیر ارتباط بین سنسور دمای DS1624 و میکروکنترلر AVR توسط پروتکل ارتباط سریال i2c می باشد. میکروکنترلر AVR توسط ارتباط سریال UART به کامپیوتر متصل بوده و مقدار دما در محیط Rerminal Emulator مشاهده می شود. این سنسور دما مقادیر دمای خود را توسط ارتباط سریال ارسال می کند.
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 34 |
$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 |