More Related Content
Similar to 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
Similar to 20130804 OSC京都 Raspberry Piに何かつないで遊ぼう (20)
More from Yasuhiro Ishii (7)
20130804 OSC京都 Raspberry Piに何かつないで遊ぼう
- 9. UART
• Universal Asynchronous Receiver Transmitter
• 通常1対1の機器間通信に使用
• いわゆるRS-232C。
• USBシリアル変換チップ経由でPCからコンソール操作
• Arduinoと接続して連携
• UART接続タイプのGPSモジュールを接続
• シリアルサーボを接続
- 10. SPI
• Serial Peripheral Interface
• MISO、MOSI、SCLKに加え、接続対象デバイス数分のSSで接続
• 1対多で通信可能(通信相手数分、SS信号が必要)
RPi
有機EL
EEPROM
NFCデバイス
接続例
- 11. I2C
• Inter-Integrated Circuit
• 2本の信号線(SCL、SDA)で複数の機器と接続可能
• 1対多接続可能(I2Cバス上で、個々のデバイス毎がユニークな番号(ス
レーブアドレス)を持つ。
モータードライバ
モジュール
電流・電圧測定
モジュール
LCD
RTC EEPROM
RPi
LCD
モーター
ドライバ RTC
スレーブ
アドレス
0x10
スレーブ
アドレス
0x11
スレーブ
アドレス
0x12
I2C
マスターI2C対応デバイスの例
- 23. I2Cデバイスドライバのオープン
int
fd;
//
RPi
Rev1.0使用時は
/dev/i2c-‐0
fd
=
open("/dev/i2c-‐1",O_RDWR);
if(fd
<
0){
printf("i2c
open
errorn");
return(-‐1);
}
- 24. メイン処理
(キーイベント取得+モーターへの指令)
while(1){
//
標準入力からイベント取り込み
read(0,&event,sizeof(event));
if(event.type
==
EV_KEY
&&
event.value
!=
0){
switch(event.code){
case
KEY_UP:
//
左右モーターの前転
motor_l.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);
motor_r.control(MOTOR_POWER,DRV8830::MOTOR_FORWARD);
break;
case
KEY_DOWN:
//
左右モーターの後転
motor_l.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);
motor_r.control(MOTOR_POWER,DRV8830::MOTOR_REVERSE);
break;
《中略》
}
}
- 25. モータードライバ制御処理
int
DRV8830::control(int
power,int
type)
{
unsigned
char
buff[2];
//
制御対象デバイスのスレーブアドレスをセット
ioctl(i2c_fd,I2C_SLAVE,i2c_slaveaddr);
//
コマンドを組み立ててデータ送出
buff[0]
=
0x00;
buff[1]
=
(unsigned
char)(power
<<
2)
|
(unsigned
char)(type
&
0x03);
write(i2c_fd,buff,2);