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.setCursor(0,0)
lcd.print("text")
lcd.noDisplay()
lcd.write(data)
lcd.clear()
lcd.clear()
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)
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):දත්ත සමූහයක් යවන විට
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 ප්රමාණයක් ඉල්ලා සිටිනවාද යන්න දක්වීම.