EdisonのMraa(SPI)を使う

EdisonのMraaを使い、Python言語でSPIの設定を行ってみた。

Arduino Boardでは
IO10:SPI_2_SS1(CS)
IO11:SPI_2_TXD
IO12:SPI_2_RXD
IO13:SPI_2_CLK
が使える。

Pythonで以下のコマンドが使える。

Spi (int bus)
mode (Spi_Mode mode)
frequency (int hz)
writeByte (uint8_t data)
write_word (uint16_t data)
write (uint8_t *txBuf, int length)
write_word (uint16_t *txBuf, int length)
transfer (uint8_t *txBuf, uint8_t *rxBuf, int length)
transfer_word (uint16_t *txBuf, uint16_t *rxBuf, int length)
lsbmode (bool lsb)
bitPerWord (unsigned int bits)

SPI_MODE0
CPOL = 0, CPHA = 0, Clock idle low,
data is clocked in on rising edge,
output data (change) on falling edge

SPI_MODE1
CPOL = 0, CPHA = 1, Clock idle low,
data is clocked in on falling edge,
output data (change) on rising edge

SPI_MODE2
CPOL = 1, CPHA = 0, Clock idle low,
data is clocked in on falling edge,
output data (change) on rising edge

SPI_MODE3
CPOL = 1, CPHA = 1, Clock idle low,
data is clocked in on rising,
edge output data (change) on falling edge

注意点
frequency()はHzで指定 25MHzまで
SpiのSは大文字で書く
Spi()のポート番号はなんでもいいみたい。。。?? 1、2でも同じ動き。
mode()は0,1,2,3を指定。
lsbmode()は、数字を入れるとエラーになるし、うまく動かない。???

使用例

#!/usr/bin/python

import mraa

spi = mraa.Spi(2)
spi.frequency(1000000)
spi.mode(0)
spi.lsbmode(True)

while True:
spi.writeByte(0x35)

受信は、まだやってないです。。。

EdisonのMraa(PWM)を使う

EdisonのMraaを使い、Python言語でPWMの設定を行ってみた。
参考にしたHPは、

iotdk.intel.com Mraa

EdisonのPWMはクロックの関係で、波形期間が
PWM period (μs) PWM frequency (Hz)
213                              4,688
427                              2,344
853                              1,172
1,707                              586
3,413                              293
6,619                              151
6,827                              146
13,653                            73.2
27,307                            36.6
54,613                            18.3
109,227                            9.2
218,453                            4.6
上記の値を適用されてしまう。
なので、適当なperiod値を設定しても上記の値となる。

Python のコマンドは
Pwm (int pin, bool owner=true, int chipid=-1)
float write (float percentage)
period (float period)
period_ms (int ms)
period_us (int us)
pulsewidth (float seconds)
pulsewidth_ms (int ms)
pulsewidth_us (int us)
config_ms (int period, float duty)
config_percent (int period, float duty)
int max_period ()
int min_period ()
が利用できる。

注意点
Dutyは0.5fのfはエラーとなるので必要ないらしい。
config_percent (int period, float duty)
periodは、msで設定。

使用例

#!/usr/bin/python
import mraa
import time

PWM_PIN = 3

#init PWM
x=mraa.Pwm(PWM_PIN)
x.config_percent(218,0.5)
x.enable(True)

x.period_us (54613)
x.pulsewidth_us (1000)

目的は、1Hzの矩形波が希望であったが
4.6Hzで我慢しよう。

久々に中古オシロを使ったが、調子が悪かった。新しいオシロが欲しい。