MagicWand是在Extreme NXT書中使用PCF8574實作NXT I 2C通訊的一個實驗專題, 而本書即是以這個專題作為封面, 而當初也因為被封面上的作品所吸引所以才買了這本書.
一般人如果想要參考書中的方式自行製作, 就必須自備所需的零件以及切割合適的萬用電路板, 這對於平常很少接觸電子實作的人還是有相當的門檻, 而最近Mindsensors即為它設計出專屬的電路板並附上所需的電子零件, 包裝成為Experimental kits, 提供有興趣的人只要自行完成焊接工作後很容易的就可以使用LEGO零件組合成為所需的機構.
當然, 零件的焊接工作也是一門功夫, 不過即使個人也從沒有實際焊接的經驗, 但還是可以從網路上尋找到很多的教學資源, 這裡有一個不錯的網站 THE ELECTRONICS CLUB 有各種電子學的相關資料, 加到我的最愛方便以後可以隨時參考, 同時網站大部分的內容也都有提供檔案下載的功能.
至於焊接工作的注意事項不外是注意安全、保持通風然後留意零件在電路板上的焊接位置與極性(正負極腳位)等, 這些在Mindsensors網站都有參考資料與User Guide可以下載.
而NXT的操作方式則是利用I 2C 通訊控制連接於PCF8574 8個I/O Pins上LED的開關狀態, 這個Kit的I 2C 裝置位址為: 0x70, 使用LowspeedWrite寫入的Byte中每個bit即對應到控制8個LED的開關, 比較特別的是 low bit(0)才是LED ON. 而你也可以同時寫入多個Byte到裝置中, 它會依序按照每個Byte的bit setting開/關對應的LED, 惟須注意以下兩點:
● I 2C buffer最後一個byte必須為0.
● I 2C buffer的長度限制為16, 扣除最後value 0的byte, 所以最多可以傳送15 bytes的pattern.
Pattern的組合方式可以參考NXC的範例程式, 先舉兩個做說明(為了編輯Pattern時能比較清楚, 所以先以High bit代表LED ON, 等到要做I 2C Write前再Invert回來):
- 組合成 L 的Pattern: byte L_[] = {0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0};
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
111111111
- 組合成 E 的Pattern: byte E_[] = {0xff, 0x89, 0x89, 0x89, 0x89, 0x81, 0x81, 0};
1111111
1000000
1000000
1111100
1000000
1000000
1000000
1111111
而在以下的範例程式中, 在使用I 2C Write將buffer資料寫入裝置前, 有一段程式碼在做 High/Low bit invert就是前面曾提到的部份.
void DispLetter (const byte & letter[])
{
int nbytes;
// Wait for the end of previously sent data
while(I2CStatus(I2Cport, nbytes)==STAT_COMM_PENDING);
// Write buffer to send to PCF8574
byte WriteBuf[];
ArrayBuild(WriteBuf, I2CAddr8574, letter);
for(int i=1; i
{
WriteBuf[i] ^= 0xff;
}
I2CWrite(I2Cport, 0, WriteBuf);
}
沒有留言:
張貼留言