CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 20793|回复: 17

新手的GPIO模拟PWM

[复制链接]
发表于 2013-8-24 16:25:39 | 显示全部楼层 |阅读模式
本帖最后由 @allen 于 2013-8-24 16:13 编辑

cubieboard 上引出一路PWM在PB2 (PWM0)
但我们可以用GPIO模拟出PWM使用
代码是 http://cn.cubieboard.org/forum.p ... =464&highlight=GPIO  的写GPIO控制灯的闪烁那段,我整理下成我需要的PWM输出。我改成PD1,方便找到管脚。代码是简单延时,给高给底电平。比较重要的是gpio_lib.c,gpio_lib.h。见附件。
源代码gpio.c:
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. #include "gpio_lib.h"
  4. #define PD0    SUNXI_GPD(0)
  5. #define PD1    SUNXI_GPD(1)
  6. #define PD2    SUNXI_GPD(2)
  7. #define PD3    SUNXI_GPD(3)
  8. #define PD4    SUNXI_GPD(4)
  9. #define PD5    SUNXI_GPD(5)
  10. #define PD6    SUNXI_GPD(6)
  11. #define PD7    SUNXI_GPD(7)
  12. #define PD8    SUNXI_GPD(8)
  13. #define PD9    SUNXI_GPD(9)
  14. #define PD10    SUNXI_GPD(10)
  15. #define PD11    SUNXI_GPD(11)
  16. #define PD12    SUNXI_GPD(12)
  17. #define PD13    SUNXI_GPD(13)
  18. #define PD14    SUNXI_GPD(14)
  19. #define PD15    SUNXI_GPD(15)
  20. #define PD16    SUNXI_GPD(16)
  21. #define PD17    SUNXI_GPD(17)
  22. #define PD18    SUNXI_GPD(18)
  23. #define PD19    SUNXI_GPD(19)
  24. #define PD20    SUNXI_GPD(20)
  25. #define PD21    SUNXI_GPD(21)
  26. #define PD22    SUNXI_GPD(22)
  27. #define PD23    SUNXI_GPD(23)
  28. #define PD24    SUNXI_GPD(24)
  29. #define PD25    SUNXI_GPD(25)
  30. #define PD26    SUNXI_GPD(26)
  31. #define PD27    SUNXI_GPD(27)

  32. #define MISO    SUNXI_GPE(3)
  33. #define MOSI    SUNXI_GPE(2)
  34. #define SCK     SUNXI_GPE(1)
  35. #define CS      SUNXI_GPE(0)

  36. int main()
  37. {
  38.     if(SETUP_OK!=sunxi_gpio_init()){
  39.         printf("Failed to initialize GPIO\n");
  40.         return -1;
  41.     }

  42.     if(SETUP_OK!=sunxi_gpio_set_cfgpin(PD1,OUTPUT)){
  43.         printf("Failed to config GPIO pin\n");
  44.         return -1;
  45.     }

  46.     int i,j;
  47.       while(1)    {
  48.         if(sunxi_gpio_output(PD1,HIGH)){
  49.             printf("Failed to set GPIO pin value\n");
  50.             return -1;
  51.         }

  52.         usleep(50000);
  53.         if(sunxi_gpio_output(PD1,LOW)){
  54.             printf("Failed to set GPIO pin value\n");
  55.             return -1;
  56.         }
  57.         usleep(50000);
  58.    
  59. }
  60.     sunxi_gpio_cleanup();

  61.     return 0;
  62.    
  63. }

复制代码
主要是修改两个usleep()里面的值;比如:
高电平5000000us,底电平500000us,等于说频率是1HZ,占空比为1/2,用示波器可以看到波形,量输出管脚的电压是3.3X1/2=1.65 左右。
高电平400us,底电平600us,等于说频率是1KHZ,占空比为2/5,电压1.32左右。
依据自己需要修改。
修改后的gcc生成执行文件,执行就可以了。记得sudo apt-get install gcc 和sudo apt-get install build-essential。
  1. gcc gpio_lib.c -c
  2. gcc gpio.c -c
  3. gcc gpio.o gpio_lib.o -o gpio
  4. ./gpio
复制代码
附件中有一个写好的shel,修改延时参数后,./gpig_shell  可以直接执行,不用每次输入以上命令。
新手玩cubieboard,望各位指导!

gpio.tar

40 KB, 下载次数: 58, 下载积分: 金钱 -1

回复

使用道具 举报

发表于 2013-8-24 17:26:41 | 显示全部楼层
支持一下
回复 支持 反对

使用道具 举报

发表于 2013-8-26 00:25:38 来自手机 | 显示全部楼层
支持,单片机没有学好,现在懂了
回复 支持 反对

使用道具 举报

发表于 2013-8-26 09:45:23 | 显示全部楼层
good。正好需要相关的代码
回复 支持 反对

使用道具 举报

发表于 2013-8-27 10:41:59 | 显示全部楼层
gpio_lib.c,gpio_lib.h,这两个东西就是好用,哈哈哈
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:50:18 | 显示全部楼层
膜拜   苦苦探索硬pwm无果  楼主给的真是时候
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-28 19:58:21 | 显示全部楼层
robby 发表于 2013-8-28 14:50
膜拜   苦苦探索硬pwm无果  楼主给的真是时候

现在新固件都有PWM模块,加载后给参数个节点,就可以用芯片上的PWM了啊  
回复 支持 反对

使用道具 举报

发表于 2013-8-28 21:47:05 | 显示全部楼层
@allen 发表于 2013-8-28 19:58
现在新固件都有PWM模块,加载后给参数个节点,就可以用芯片上的PWM了啊

楼主能出个帖子教教吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-29 10:05:34 | 显示全部楼层
robby 发表于 2013-8-28 21:47
楼主能出个帖子教教吗

http://dl.cubieboard.org/software/a20-cubieboard/lubuntu/  cb-a20-lubuntu-1204-v1.04.img  固件,开机启动,加载PWM模块
  1. insmod /lib/modules/3.4.43+/kernel/drivers/misc/pwm-sunx.ko   
  2. lsmod 看到加载模块了
  3. cd /sys/kernel/sunxi_pwm/
  4. echo "0 2000 2000" > start   输入参数,类似我上面模拟的  此参数占空比为1/2
  5. dmesg  看周期
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-29 11:03:55 | 显示全部楼层
@allen 发表于 2013-8-29 10:05
http://dl.cubieboard.org/software/a20-cubieboard/lubuntu/  cb-a20-lubuntu-1204-v1.04.img  固件,开 ...

3ku   试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 09:27 , Processed in 0.028147 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部