پروتکل ارتباط 1WIRE
پروتکل ارتباطی 1WIRE یکی از جدید ترین پروتکل های استفاده شده در میکرو کنترلرهای AVR که توسط شرکت Dallas طراحی شده است. بر عکس بقیه پروتکل ها, محدودیت کابل استفاده شده آن تا 30 متر است. این پروتکل شبیه به پروتکل های شبکه طراحی شده است و قابلیت شناسایی سیستم های متصل به میکرو را دارد. سرعت شناسایی 50 سیستم در ثانیه است. سیستم هایی که به این روش مجهز هستند دارای یک ID به طول 8 بایت بوده که شناسه سیستم مورد نظر است و همین ID توسط میکرو باید در اول برنامه برای پیدا کردن سیستم مورد نظر جستجو شود.
پیکر بندی پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 |
Config 1wire = port.x |
این دستور یک پایه دلخواه را برای استفاده از پروتکل تک سیمه پیکر بندی می کند.
نکته : پایه مورد نظر باید توسط یک مقاومت 4.7k اهم به ولتاژ 5 ولت, Pull Up شود.
جستجوی سیستم در پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 2 3 |
Var (8) = 1wserachfirst (port , pin) Var (8) = 1wsearchfirst () |
همانطوری که گفته شد باید قبل از هر کاری سیستم را ازطریق id آن جستجو کرد. این کار با این دستور در برنامه نویسی انجام می شود و در متغیر آرایه var قرار می گیرد. آرایه var باید از نوع byte و دارای 8 آرایه باشد. در صورتی که از پیکر بندی پروتکل استفاده کرده اید دیگر نیازی به نوشتن port و pin ندارید چون قبلا معرفی شده اند.
جستجوی سیستم دیگر در پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 2 3 |
Var (8) = 1wsearchnext (port , pin) Var (8) = 1wsearchnext () |
در دستور قبل برای جستجوی یک سیستم کافی بود و در صورتی که چند سیستم به این ارتباط متصل بود شما باید پی در پی از این دستور استفاده می کردید. اما با این دستور دیگر نیازی به تکرار نیست و با یک شیوه در برنامه نویسی می توانید تمام سیستم های متصل را شناسایی کنید. این دستور را مطابق برنامه زیر در یک حلقه با شرط یک شدن رجیستر خطا قرار دهید. این کار باعث می شود که تمام سیستم ها جستجو شود و در صورتی که سیستمی وجود نداشته باشد میکرو رجیستر خطا را یک کند. پس برنامه از حلقه خارج می شود.
1 2 3 4 5 6 7 8 |
Dim reg_no (8) as byte Do Reg_no (1) = 1wsearchnext ( portb,0 ) For l = 1 to 8 Print hex (reg_no(i)); Next Loop Until Err = 1 |
نکته: در صورتی که از پیکر بندی پروتکل استفاده کرده اید دیگر نیازی به نوشتن port و pin ندارید چون قبلا معرفی شده اند.
قطع کردن پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 2 3 |
1wireset 1wreset , port , pin |
این دستور برای قطع ارتباط با سیستم متصل به میکرو است.
نکته: در صورتی که از پیکر بندی پروتکل استفاده کرده اید دیگر نیازی به نوشتن port و pin ندارید چون قبلا معرفی شده اند.
خواندن داده از پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 2 3 |
Var = 1wread ([n]) Var = 1 waread (n , port , pin) |
به تعداد n بایت از پایه پروتکل تک سیمه داده خوانده می شود و در متغیر var قرار می گیرد.
نوشتن داده در پروتکل ارتباط 1wire در زبان بیسیک BASIC
1 2 3 |
1wwrite var , [n] 1wwrite var , n , port , pin |
به تعداد n بایت در پایه پروتکل تک سیمه داده محتوی متغیر var ارسال می شود.
نکته : برای استفاده از این پروتکل نیاز به کتابخانه با نام mcsbyte.lib دارید.
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 |
$regfile = “m48def.dat” $lib “mcsbyte.lib” Config 1wire = portb.0 ‘ use this pin Dim reg_no (8) as byte Dim l as byte , w as word Dim ar (8) as byte , a as byte , l as byte Do Reg_no (1) = 1wsearchnext() ‘now search for other devices For l = 1 to 8 Print hex (reg_no(i)); Next Loop until err = 1 Reg_no(1) = 1wsearchfrist() For l = 0 to 3 ‘for pin 0-3 1wreset pinb , l 1wwrite pinb , l 1wwrite & h33 ,1,pin,l Ar(1) = 1wread (8 , pinb , l) For a = 1 to 8 Print hex (ar(a)); Next For l = 0 to 3 ‘for pin 0-3 1wreset pinb , l 1wwrite & h33 , 1,pinb , l Ar (1) = 1wread (8 , pinb , 1) For a = 1 to 8 Print hex (ar(a)); Next Next end |