2009-09-17

Mindsensors MagicWand 組裝測試 (II)



MagicWand是在Extreme NXT書中使用PCF8574實作NXT I 2C通訊的一個實驗專題, 而本書即是以這個專題作為封面, 而當初也因為被封面上的作品所吸引所以才買了這本書.




 



一般人如果想要參考書中的方式自行製作, 就必須自備所需的零件以及切割合適的萬用電路板, 這對於平常很少接觸電子實作的人還是有相當的門檻, 而最近Mindsensors即為它設計出專屬的電路板並附上所需的電子零件, 包裝成為Experimental kits, 提供有興趣的人只要自行完成焊接工作後很容易的就可以使用LEGO零件組合成為所需的機構.


當然, 零件的焊接工作也是一門功夫, 不過即使個人也從沒有實際焊接的經驗, 但還是可以從網路上尋找到很多的教學資源, 這裡有一個不錯的網站 THE ELECTRONICS CLUB 有各種電子學的相關資料, 加到我的最愛方便以後可以隨時參考, 同時網站大部分的內容也都有提供檔案下載的功能.


至於焊接工作的注意事項不外是注意安全、保持通風然後留意零件在電路板上的焊接位置與極性(正負極腳位), 這些在Mindsensors網站都有參考資料與User Guide可以下載.


 


NXT的操作方式則是利用I 2C 通訊控制連接於PCF8574 8I/O PinsLED的開關狀態, 這個KitI 2C 裝置位址為: 0x70, 使用LowspeedWrite寫入的Byte中每個bit即對應到控制8LED的開關, 比較特別的是 low bit(0)才是LED ON. 而你也可以同時寫入多個Byte到裝置中, 它會依序按照每個Bytebit setting/關對應的LED, 惟須注意以下兩點:


        I 2C buffer最後一個byte必須為0.


        I 2C buffer的長度限制為16, 扣除最後value 0byte, 所以最多可以傳送15 bytespattern.


 


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 Writebuffer資料寫入裝置前, 有一段程式碼在做 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);


}



 


沒有留言:

張貼留言