m.hayashi
2015年11月13日 10時35分
お世話になります。林と申します。
はじめて投稿させていただきます。
Armadillo-840の液晶モデル開発セットを使用しています。
PWM出力を行いたいのですが
カーネルコンフィグレーションの設定方法と
周期、デューティ比の設定に使用するファイルについて
教えていただけないでしょうか?
840の製品マニュアルでは最大3ポートをPWMとして使用可能とありましたが
設定方法がわかりませんでした。
使用したいのは
CON8 拡張インターフェース2(Dコネクタ)の
ピン番号
42 TRU0TO0
44 TRU0TO1
です。
よろしくお願いいたします。
コメント
m.hayashi
at_yuma.arakawa
> CON7 extension board (Custom) の設定は
> Armadillo-840 System Configuration --->
> の下にありました。
ご指摘のとおりです。失礼いたしました。
訂正させていただきますと、
> 2. カーネルコンフィギュレーションの変更
は、以下のとおりです。
Linux/arm 3.4-at16 Kernel Configuration System Type ---> Armadillo-840 System Configuration ---> CON7 extension board (Custom) ---> ( ) LCD (X) Custom /* Custom を選択します */ ・・・省略・・・ [*] use TPU0 Output0 [PORT23] /* 有効化します */ [*] use TPU0 Output1 [PORT21] /* 有効化します */ [ ] use TPU0 Output2 [PORT202] /* 無効化します */ [ ] PWM: Generic PWM based Backlight /* 無効化します */ [ ] use TPU0 Output3 [PORT180] /* 無効化します */ Device Drivers ---> [*] LED Support ---> <*> PWM driven LED Support /* 有効化します */
m.hayashi
at_yuma.arakawa
> LCD側に表示を行うにはどうしたらよいでしょうか?
カーネルコンフィギュレーションにおいて、以下の手順は不要です。申し訳ありません。
Linux/arm 3.4-at16 Kernel Configuration System Type ---> CON7 extension board (Custom) ---> ( ) LCD (X) Custom /* Custom を選択します */
"CON7 extension board"は、デフォルト値である"LCD"を選択してください。
再度訂正させていただきますと、カーネルコンフィギュレーションは以下のとおりです。
Linux/arm 3.4-at16 Kernel Configuration System Type ---> Armadillo-840 System Configuration ---> CON7 extension board (Custom) ---> (X) LCD /* LCDを選択します(デフォルト) */ ( ) Custom ・・・省略・・・ [*] use TPU0 Output0 [PORT23] /* 有効化します */ [*] use TPU0 Output1 [PORT21] /* 有効化します */ -*- use TPU0 Output2 [PORT202] /* 有効(デフォルト) */ -*- PWM: Generic PWM based Backlight /* 有効(デフォルト) */ [ ] use TPU0 Output3 [PORT180] /* 無効化します */ Device Drivers ---> [*] LED Support ---> <*> PWM driven LED Support /* 有効化します */
"use TPU0 Output2"と"PWM: Generic PWM based Backlight"は、
"CON7 extension board"を"LCD"に設定することで、有効に固定されます。
混乱させてしまい、申し訳ありませんでした。
m.hayashi
m.hayashi
林です。
LCDの明るさ設定なのですが
/sys/devices/platform/leds_pwm.0/leds/TPU0TO2.LED/brightness
はArmadillo起動時に 0 になるのですね。
PWM使用の設定前は明るさの設定は特に行っていなかったのですが
この値を任意の値に設定しておくことは可能でしょうか?
・Armadillo起動時に設定を行うようにする
・自作アプリの起動時に設定を行うようにする
などはできると思うのですが
Armadillo起動時の値をあらかじめ設定しておく方法が何かあれば教えてください。
よろしくお願いします。
at_yuma.arakawa
> LCDの明るさ設定なのですが
> /sys/devices/platform/leds_pwm.0/leds/TPU0TO2.LED/brightness
> はArmadillo起動時に 0 になるのですね。
先日添付しましたPWM対応パッチがLCDのPWMバックライトに対応しておりませんでした。
以下のとおりに修正していただけますでしょうか。
■ arch/arm/mach-shmobile/board-armadillo840.c 1369行目
・修正前
#if IS_ENABLED(CONFIG_ARMADILLO840_TPU0TO2_PORT202)
・修正後(改行されて表示されますが、1行で入力して下さい)
#if IS_ENABLED(CONFIG_ARMADILLO840_TPU0TO2_PORT202) && !IS_ENABLED(CONFIG_ARMADILLO840_TPU0TO2_PORT202_DEVICE_PWM_BACKLIGHT)
上記の修正により、Armadillo起動時のLCDバックライトは255で、
sysfsはこれまでどおり、
- /sys/class/backlight/pwm-backlight.0/brightness
を使用できます。
また、上記の修正を適用済みのパッチを添付いたします。
ファイル | ファイルの説明 |
---|---|
linux-3.4-at16-support-led-pwm_v2.patch | PWM対応パッチ(PWMバックライト対応) |
m.hayashi
m.hayashi
林です。
お世話になっております。
拡張ボード01をはずした状態だと
/sys/devices/platform/leds_pwm.0/
以下が存在せず、PWM制御が出来ないのですがどうしたらよいでしょうか?
前回の質問時は Armadillo-840 拡張ボード01(Cコネクタ用)を取り付けた状態で使用していたのですが
今回、内製の拡張基板を取り付けて使用するため、拡張ボード01は外して使用します。
内製基板がない状態で同じイメージを使って確認してみました。
①Armadillo-840 + 拡張ボード01 → PWMのデバイスファイルがある
②Armadillo-840 単体 → PWMのデバイスファイルがない
拡張ボード01を外していますが、
カーネルコンフィグレーションなどの設定は特に変えず、そのまま使っているのですが
変更が必要なところがあれば教えてください。
よろしくお願いいたします。
m.hayashi
お世話になっております。
林です。
カーネルコンフィグレーションの設定を下記のように変更しました。
> Linux/arm 3.4-at16 Kernel Configuration > System Type ---> > Armadillo-840 System Configuration ---> > CON7 extension board (Custom) ---> > ( ) LCD > (X) Custom
PWMのデバイスファイルが見れるようになり
/sys/devices/platform/leds_pwm.0/
TPU0TO0.LED
TPU0TO1.LED
の操作はできるようになりました。
しかし、新たな問題が発生しています。
TPU0TO0.LEDのbrightnessに値を書き込むと
/sys/class/gpio/gpio34のvalueが0になってしまうという現象が発生しています。
こちらでの確認内容なのですが
現在、gpio31、gpio32、gpio33、gpio34 を出力設定で使用しており
上記4つのdirectionにoutを書込み、valueを1に変更したあと
#echo 255 > /sys/devices/platform/leds_pwm.0/leds/TPU0TO0.LED/brightness
を行うと gpio34 のvalueが0になってしまいます。
その後 value を1にしても0に戻ってしまいます。
gpio31、gpio32、gpio33のvalueは変化しません。
再起動するまで、その状態は継続します。
/sys/devices/platform/leds_pwm.0/leds/TPU0TO1.LED/brightness
では書込みを行っても、gpio34の出力値が変化することはありませんでした。
この原因は何でしょうか?
解決方法はありますでしょうか?
※環境
ATDE5:v20151026
ブートローダー (Hermit-At):v3.8.0
Linuxカーネル:v3.4-at16
ユーザーランド (Atmark Dist):v20151026
ルートファイルシステム: Debian GNU/Linux 7(wheezy) v20130704
at_yuma.arakawa
返答が遅くなってしまい、すみません。
> 現在、gpio31、gpio32、gpio33、gpio34 を出力設定で使用しており
> 上記4つのdirectionにoutを書込み、valueを1に変更したあと
>
> #echo 255 > /sys/devices/platform/leds_pwm.0/leds/TPU0TO0.LED/brightness
>
> を行うと gpio34 のvalueが0になってしまいます。
> その後 value を1にしても0に戻ってしまいます。
> gpio31、gpio32、gpio33のvalueは変化しません。
当方で試してみたのですが、
再現させることができませんでした。
当方での確認手順は以下のとおりなのですが、
手順に差異などありますか?
1. カーネルのビルド
以下のコメントで添付したパッチをLinux 3.4-at16に適用
- https://users.atmark-techno.com/comment/2579#comment-2579
以下のコンフィギュレーションでカーネルをビルド
Linux/arm 3.4-at16 Kernel Configuration System Type ---> Armadillo-840 System Configuration ---> CON7 extension board (Custom) ---> ( ) LCD (X) Custom /* 1/14にコメントをいただいた通り、Customを選択しました */ ・・・省略・・・ [*] use TPU0 Output0 [PORT23] /* 有効化します */ [*] use TPU0 Output1 [PORT21] /* 有効化します */ -*- use TPU0 Output2 [PORT202] /* 有効(デフォルト) */ -*- PWM: Generic PWM based Backlight /* 有効(デフォルト) */ [ ] use TPU0 Output3 [PORT180] /* 無効化します */ Device Drivers ---> [*] LED Support ---> <*> PWM driven LED Support /* 有効化します */
2. ビルドし、出来上がったカーネルを使用して以下の手順を実行
[root@armadillo840-0 (ttySC2) ~]# echo out > /sys/class/gpio/gpio31/direction [root@armadillo840-0 (ttySC2) ~]# echo out > /sys/class/gpio/gpio32/direction [root@armadillo840-0 (ttySC2) ~]# echo out > /sys/class/gpio/gpio33/direction [root@armadillo840-0 (ttySC2) ~]# echo out > /sys/class/gpio/gpio34/direction [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio31/direction out [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio32/direction out [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio33/direction out [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio34/direction out [root@armadillo840-0 (ttySC2) ~]# echo 1 > /sys/class/gpio/gpio31/value [root@armadillo840-0 (ttySC2) ~]# echo 1 > /sys/class/gpio/gpio32/value [root@armadillo840-0 (ttySC2) ~]# echo 1 > /sys/class/gpio/gpio33/value [root@armadillo840-0 (ttySC2) ~]# echo 1 > /sys/class/gpio/gpio34/value [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio31/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio32/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio33/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio34/value 1 [root@armadillo840-0 (ttySC2) ~]# echo 255 > /sys/devices/platform/leds_pwm.0/leds/TPU0TO0.LED/brightness [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio31/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio32/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio33/value 1 [root@armadillo840-0 (ttySC2) ~]# cat /sys/class/gpio/gpio34/value 1 [root@armadillo840-0 (ttySC2) ~]#
at_yuma.arakawa
2015年11月16日 17時33分
> 840の製品マニュアルでは最大3ポートをPWMとして使用可能とありましたが
> 設定方法がわかりませんでした。
>
> 使用したいのは
> CON8 拡張インターフェース2(Dコネクタ)の
> ピン番号
> 42 TRU0TO0
> 44 TRU0TO1
> です。
添付のパッチを使用すれば、PWM設定を以下の手順で行えます。
1. パッチの適用
linux-3.4-at16に対して添付のパッチを以下の手順で適用します。
2. カーネルコンフィギュレーションの変更
PWMを使用するにあたり、以下のカーネルコンフィギュレーションを行います。
3. 周波数の設定
添付のパッチでは、ビルドタイム時にのみ周波数設定が可能です。
(Armadillo上から周波数の変更はできず固定設定となります。)
添付のパッチでは、以下の値に設定しています。
- TPU0TO0: 30.0kHz
- TPU0TO1: 50.0kHz
周波数は以下のソースでpwm_period_nsを変更することにより設定可能です。
pwm_period_nsの設定値はナノ秒単位の周期です。
■ arch/arm/mach-shmobile/board-armadillo840.c の1351〜1368行目
4. ビルド
上記手順を完了後、ビルドを行います。
ビルド方法は、以下を参照して下さい。
Armadillo-840 製品マニュアル
「第11章 ビルド手順」
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
その後、作成されたイメージでArmadillo-840を起動してください。
5. デューティ比の設定方法
各TPUチャネルのデューティ比を変更するためのファイルは以下となります。
- TPU0TO0: /sys/devices/platform/leds_pwm.0/leds/TPU0TO0.LED/brightness
- TPU0TO1: /sys/devices/platform/leds_pwm.0/leds/TPU0TO1.LED/brightness
まず、brightness へ max_brightness の値 (デューティ比 0:100 電圧 0V) を設定します。
この操作を行わないと、デューティ比を変更することができません。
デューティ比を 50:50 に設定する例は以下のとおりです。