You'll still have to manually export pwm0 pwm1 per ehrpwm module, and make sure you set period before duty_cycle. As you'll get an error otherwise. As for code, I'll have to look on the board which I wrote the code for, but I believe I wrote javascript for nodejs as a quick proof of concept test. The same basic principles would be the same for C or C++ though . . .
On Wed, Jul 27, 2016 at 5:11 AM, William Hermans <[email protected]> wrote: > The only overlay I know for a fact that works with recent kernels is > universaln. Which is one of the universal io overlays. But here is one I > personally made that works for all ehrpwms . . . keep in mind the file name > has to be univ-wph-00A0.dts . . . But this file is what universaln has it > in for pwm exactly. I just stripped out the pwm stuff and put it into this > file. > > > /dts-v1/; > /plugin/; > > / { > compatible = "ti,beaglebone", "ti,beaglebone-black", > "ti,beaglebone-green"; > > /* identification */ > part-number = "univ-wph"; > version = "00A0"; > > /* state the resources this cape uses */ > exclusive-use = > /* the pin header uses */ > "P8.13", /* EHRPWM2B - ZONE 6 PWM */ > "P8.19", /* EHRPWM2A - ZONE 4 PWM */ > "P9.14", /* EHRPWM1A - ZONE 3 PWM */ > "P9.16", /* EHRPWM1B - ZONE 5 PWM */ > "P9.21", /* EHRPWM0A - ZONE 2 PWM */ > "P9.22", /* EHRPWM0B - ZONE 1 PWM */ > /* the hardware ip uses */ > "ehrpwm0A", > "ehrpwm0B", > "ehrpwm1A", > "ehrpwm1B", > "ehrpwm2A", > "ehrpwm2B"; > > fragment@0 { > target = <&am33xx_pinmux>; > __overlay__ { > > /* P8_13 (ZCZ ball T10) */ > P8_13_pwm_pin: pinmux_P8_13_pwm_pin { > pinctrl-single,pins = <0x024 0x24>; }; /* Mode 4, > Pull-Down, RxActive */ > > /* P8_19 (ZCZ ball U10) */ > P8_19_pwm_pin: pinmux_P8_19_pwm_pin { > pinctrl-single,pins = <0x020 0x24>; }; /* Mode 4, > Pull-Down, RxActive */ > > /* P9_14 (ZCZ ball U14) */ > P9_14_pwm_pin: pinmux_P9_14_pwm_pin { > pinctrl-single,pins = <0x048 0x26>; }; /* Mode 6, > Pull-Down, RxActive */ > > /* P9_16 (ZCZ ball T14) */ > P9_16_pwm_pin: pinmux_P9_16_pwm_pin { > pinctrl-single,pins = <0x04c 0x26>; }; /* Mode 6, > Pull-Down, RxActive */ > > /* P9_21 (ZCZ ball B17) */ > P9_21_pwm_pin: pinmux_P9_21_pwm_pin { > pinctrl-single,pins = <0x154 0x33>; }; /* Mode 3, > Pull-Up, RxActive */ > > /* P9_22 (ZCZ ball A17) */ > P9_22_pwm_pin: pinmux_P9_22_pwm_pin { > pinctrl-single,pins = <0x150 0x33>; }; /* Mode 3, > Pull-Up, RxActive */ > > }; > }; > > fragment@1 { > target = <&ocp>; > __overlay__ { > > P8_13_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P8_13_pwm_pin>; > }; > > P8_19_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P8_19_pwm_pin>; > }; > > P9_14_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P9_14_pwm_pin>; > }; > > P9_16_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P9_16_pwm_pin>; > }; > > P9_21_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P9_21_pwm_pin>; > }; > > P9_22_pinmux { > compatible = "bone-pinmux-helper"; > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <&P9_22_pwm_pin>; > }; > }; > }; > > fragment@20 { > target = <&epwmss0>; > __overlay__ { > status = "okay"; > }; > }; > > fragment@21 { > target = <&ehrpwm0>; > __overlay__ { > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <>; > }; > }; > > fragment@23 { > target = <&epwmss1>; > __overlay__ { > status = "okay"; > }; > }; > > fragment@24 { > target = <&ehrpwm1>; > __overlay__ { > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <>; > }; > }; > > fragment@25 { > target = <&epwmss2>; > __overlay__ { > status = "okay"; > }; > }; > > fragment@26 { > target = <&ehrpwm2>; > __overlay__ { > status = "okay"; > pinctrl-names = "default"; > pinctrl-0 = <>; > }; > }; > }; > > > On Wed, Jul 27, 2016 at 4:40 AM, <[email protected]> wrote: > >> Hello, >> >> thanks very much for your quick reply. >> >> - *Concerning the Kernel:* If I enter the command uname -a I get the >> following output: Linux beaglebone 4.4.9-ti-r25 #1 SMP Thu May 5 23:08:13 >> UTC 2016 armv7l GNU/Linux. Therefore I assume I am using Kernel 4.4.9 >> - *Concerning the Code:* Well there is no code yet. I assumed that >> the PWM could be controlled over files, therefore just as I control GPIOS >> by writing the desired outputs in the appropriate files. I tried to >> control >> the PWM by writing the desired duty_cycle in the file. So I hoped that I >> could access the PWM from my c++ code by simple file access. However as I >> mentioned, writing the setting duty_cycle=5000, period=10000 and >> enable=1 in the files I described in my original post, I could not >> produce any outputs. >> >> - I also tried to use a custom device tree overlay. I generated it >> using this Website: >> >> http://kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator#dtogenerator >> >> with the parameters: P8_36, fastslew, output, pulldown, mode2. >> This gave me the overlay code: >> >> /* >> * Copyright (C) 2013 CircuitCo >> À * This program is free software; you can redistribute it and/or >> modify >> * it under the terms of the GNU General Public License version 2 as >> * published by the Free Software Foundation. >> * >> * This is a template-generated file from BoneScript >> */ >> /dts-v1/; >> /plugin/; >> >> / { >> compatible = "ti,beaglebone", "ti,beaglebone-black"; >> >> /* identification */ >> part-number = "BS_PWM_P8_36_0x2"; >> >> /* state the resources this cape uses */ >> exclusive-use = >> /* the pin header uses */ >> "P8.36", >> /* the hardware IP uses */ >> "ehrpwm1A"; >> >> fragment@0 { >> target = <&am33xx_pinmux>; >> __overlay__ { >> bs_pwm_P8_36_0x2: pinmux_bs_pwm_P8_36_0x2 { >> pinctrl-single,pins = <0x0c8 0x2>; >> }; >> }; >> }; >> >> fragment@1 { >> target = <&ocp>; >> __overlay__ { >> bs_pwm_test_P8_36 { >> compatible = "pwm_test"; >> pwms = <&ehrpwm1 0 500000 0>; >> pwm-names = "PWM_P8_36"; >> >> pinctrl-names = "default"; >> pinctrl-0 = <&bs_pwm_P8_36_0x2>; >> >> enabled = <1>; >> duty = <0>; >> status = "okay"; >> }; >> }; >> }; >> }; >> >> which I copied in /lib/firmware/bspwm_P8_36_2-00A0.dts >> and compiled with dtc -O dtb -o /lib/firmware/bspwm_P8_36_2-00A0.dtbo >> -b 0 -@ /lib/firmware/bspwm_P8_36_2-00A0.dts >> After that I loaded the am33xx_pwm as well as the compiled overlay >> but again I was unable to produce any output by writing the already >> mentioned values into the files. >> Loading the overlay also generated read only files which I was unable >> to write any values into, even after running chmod a+w and writing as >> root. >> >> >> Therefore the Question remains: How can I use the PWM Outputs of the >> Beaglebone black with C++ code? >> >> Thanks again for your help and best regards, >> Phil >> T >> >> -- >> For more options, visit http://beagleboard.org/discuss >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/beagleboard/3be86866-0420-446e-abd3-c6b65131da24%40googlegroups.com >> <https://groups.google.com/d/msgid/beagleboard/3be86866-0420-446e-abd3-c6b65131da24%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> For more options, visit https://groups.google.com/d/optout. >> > > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/CALHSORpF2CDDAG-4ZxTXr%3DbZqdVAfRBrQfjo0pEdipvQcC4y7Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
