electronic sinhalen

සිංහල භාෂාවෙන් විද්‍යා හා තාක්ෂණ කරුණු ලබාදෙන, SENRO-TECH යුගයේ අපූර්වතම විද්‍යා හා තාක්ෂණ ගෙව්ශණය. SENROTECH is all about connecting you to the Technologies ©Copyrighted

Saturday, March 7, 2020

Arduino සිංහලෙන් - 13


I2C - 2

How to use I2C in Arduino


I2C ප්‍රොටෝකෝලය හා එය යොදාගෙන සංනිවේදනය කරන ආකාරය පිළිබදව මීට පෙර පැහැදිලි කරන ලදී. එහිදී මෙම ප්‍රොටෝකෝලය යොදාගෙන සංනිවේදනය කරනු ලැබුවේ PIC16F877A මයික්‍රෝකොන්ට්‍රෝලරය යොදාගෙන වේ.මෙම කොටස මගින් Arduino යොදාගෙන I2C ක්‍රමයට සංනිවේදනය කරන ආකාරය පිළිබදව විමසා බලමු.



ඒ අනුව මෙම වැඩසටහන මගින් කරනු ලබන්නේ arduino පුවරු දෙකක් Master හා Slave ලෙස යොදාගෙන සංනිවේදනය සිදු කිරීමයි.මෙහිදී Master ලෙස යොදාගැනෙන arduino පුවරුවට විච්‍යලය ප්‍රතිරෝ‍්ධයක් භාවිතා කරමින් අගයන්(0 සිට 127 දක්වා)  ලබා දෙනු ලබයි.ඉන් පසු එම අගයන් I2C ක්‍රමයට Slave ලෙස යොදාගනු ලබන arduino පුවරුවට යවනු ලබයි.මෙම පුවරුව මගින් කරනු ලබන්නේ එම අගයන් ලබා ගෙන ඒවා LCD  එකේ පෙන්නුම් කරවීමයි.


පහත දැක්වෙන්නේ මෙම වැඩසටහනට අදාල පරිපථ සටහන වේ.



arduino පුවරුවේ I2C සංනිවේදනය සිදු කිරීම සදහා ඇති පින් දෙක වන්නේ A4 ,A5 වේ.


ඒ අනුව arduino පුවරු දෙක I2C සංනිවේදනය සිදු කිරීම සදහා මෙම පින් දෙක මගින් එකිනෙකට සම්බන්ද කරගනු ලබයි.මෙම සම්බන්දක දෙක ප්‍රතිරොධ දෙකක් මගින් PULL-UP කරතිබීම අනිවාර්ය වේ.




Arduino පුවරුවට LCD එක සම්බන්ද කිරීම


මෙහිදී ද LCD එක Arduino පුවරුවට සම්බන්ද කිරීම සදහා යොදාගනු ලබන්නේ 4-bit mode ක්‍රමය වේ.ඒ අනුව මෙම ක්‍රමය මගින් LCD එක සම්බන්ද කර දත්ත සංනිවේදනය සදහා පහත පියවර අනුගමනය කල යුතුය.



1. 4-bit mode ක්‍රමයට LCD එක  Arduino පුවරුව සමග සම්බන්ද කර පරිපථ සටහන ගොඩනගා ගත යුතුය.

2. LCD සදහා වැඩසටහන ආරම්බ කිරීම සදහා ප්‍රථමයෙන් LCD library එක ඇතුලත් කර ගැනීම සිදුකල යුතුය.ඒ සදහා #include <LiquidCrystal.h>  යන්න යොදාගනු ලබයි.

3. Arduino පුවරුවට LCD එකේ පින් හදුන්වා දීම සිදුකල යුතුය.
 LiquidCrystal lcd(RS,EN, D4,D5, D6,D7);

4. ඉන් පසුව lcd.begin(16, 2); මගින් LCD සමග දත්ත සංනිවේදනය ආරම්බ කිරීම කර ගත හැක.

5. පහත දැක්වෙන function යොදාගෙන LCD සම්බන්ද ක්‍රියාකාරකම් සිදු කර ගත හැක.
lcd.setCursor(0,0) 
lcd.print("text")
lcd.noDisplay()
lcd.write(data)
lcd.clear()


පහත දැක්වෙන්නේ lcd එකක් හා Arduino පුවරුවක් සම්බන්ද කිරීමට අදාල පරිපථ සටහන සහ ඊට අදාල වැඩසටහන වේ.



Arduino මගින් I2C සංනිවේදනය සිදු කිරීම 


Arduino IDE  එක යොදාගෙනෙ පහසුවෙන් I2C සංනිවේදනය කිරීම සදහා, I2C ප්‍රොටෝකෝලය සම්බන්ද library එකක් නිර්මාණය කර ඇත.Wire library  එක යනු I2C ප්‍රොටෝකෝලය  යොදාගෙන Arduino  හා I2C උපාංග අතර සන්නිවේදනය කිරීමට වැඩසටහන් ගොඩනගා ගැනීමට ඇති library එක වේ. ඒ අනුව I2C සන්නිවේදනය සම්බන්ද කාර්යන් සිදු කර ගැනීම සදහා function නිර්මාණය කර ඇත.

පහත දැක්වෙන්නේ මෙහි යොදා ගැනෙන function වන අතර මෙම function යොදාගැනීම සදහා ප්‍රථමයෙන්  <Wire.h> library  එක වැඩසටහනට ඇතුළත් කර ගත යුතුය. 

1. Wire.begin():මෙම function එක I2C සංනිවේදනය ආරම්බය හදුන්වා දෙනු ලබන අතර Arduino එක Master ලෙසද එසේත් නොමැතිනම්  Slave ලෙසද යොදාගනු ලබන්නේ දැයි හදුන්වා දෙනු ලබයි.
Arduino එක Master ලෙස යොදාගනු ලබන විට :- Wire.begin()
Arduino එක  Slave ලෙස යොදාගනු ලබන විට :- Wire.begin(address)  

2.Wire.read():මෙම function එක යොදාගනු ලබන්නේ  Master ලෙස හෝ Slave ලෙස දත්ත බිටු (byte) කියවීම සදහා වේ. මෙම function එක සෑම විටම යොදාගතයුතු වන්නේ  Master  විසින් නිකුත් කරන requestFrom() function එකට පසුව වේ.

3. Wire.write():මෙම function එක යොදාගනු ලබන්නේ  Master ලෙස හෝ Slave ලෙස දත්ත බිටු යැවීම සදහා වේ.

Master සිට Slave දක්වා දත්ත යැවීම සිදුවන විට මෙම function එක යොදාගත යුතු වන්නේ   Wire.beginTransmission()  හා  Wire.endTransmission() function දෙක අතර වේ.

Slave සිට Master දක්වා දත්ත යැවීම සිදුවන විට මෙම function එක යොදාගත යුතු වන්නේ   Master විසින් නිකුත් කරන Wire.RequestFrom() function එකට පසුව වේ.

මෙලෙස යවනු ලබන දත්ත ප්‍රධාන කොටස් තුනකට වෙන් කර දැක්විය හැක.

Wire.write(value) :එක් byte යක් පමණක් යවන විට
Wire.write(string) : byte කිහිපයකින් යුක්ත දත්තයක් යවන විට
Wire.write(data, length):දත්ත සමූහයක් යවන විට 

4. Wire.beginTransmission(address) : මෙම function එක යොදාගනු ලබන්නේ Slave උපකරනයක් සමග සංනිවේදනය ආරම්බ කිරීම සදහා වේ.මෙහි address යනු දත්ත සම්ප්‍රේෂණය සිදු කිරීමට බලාපොරොත්තු වන Slave උපකරනයේ address එක වේ.

5.Wire.endTransmission() : දත්ත සම්ප්‍රේෂණය අවසන් කිරීම සඳහා මෙම function එක යොදාගනු ලබයි

6.Wire.onRequest() : Master  විසින් Slave උපාංගයෙන් දත්ත ඉල්ලා සිටින විට යොදාගැනීම සදහා මෙම function එක යොදාගනු ලබයි.

7.Wire.onReceive() : Master ගේ සිට Slave උපාංගයට දත්ත ලබුන විට මෙම මෙම function එක යොදාගනු ලබයි.ඉන් අනතුරුව Wire.read() function එක යොදාගෙන එම දත්ත ලබා ගැනීම කල හැක.

8.Wire.requestFrom(address,quantity) : මෙම function එක යොදාගනු ලබන්නේද Slave උපාංගයෙන් දත්ත ඉල්ලා සිටින විට යොදාගැනීම සදහා වේ.
Address: Slave උපාංගයේ Address එක දක්වීම.
Quantity:කොපමණ byte ප්‍රමාණයක් ඉල්ලා සිටිනවාද යන්න දක්වීම.

Master ලෙස යොදාගැනෙන Arduino පුවරුව වැඩසටහන් ගත කිරීම

මෙහිදී සිදු කිරීමට ඇත්තේ විච්‍යලය ප්‍රතිරෝ‍්ධයෙන් දෙනු ලබන අගයන් I2C ක්‍රමයට slave ලෙස ඇති Arduino පුවරුව වෙත යැවීම වේ.

Slave ලෙස යොදාගැනෙන Arduino පුවරුව වැඩසටහන් ගත කිරීම

මෙම Arduino පුවරුව මගින් කරනු ලබන්නේ I2C ක්‍රමයට දත්ත ලබා ගෙන ඒවා LCD එකෙන් ප්‍රදර්ශනය කිරීම වේ.පහත දැක්වෙන්නේ මෙම කාර්ය සිදු කිරීමට අදාල වැඩසටහන වේ.