CubieBoard中文论坛

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

让Arduino给CB扩展PWM口

[复制链接]
发表于 2013-7-20 08:17:32 | 显示全部楼层 |阅读模式
本帖最后由 tll 于 2013-7-20 08:20 编辑

大家都知道,A10只有2个PWM,并且cb只引出1个,cb具有96个Pin口,但大多数都被占用或者是不能当GPIO口用的
于是准备连接Arduino Mega 2560 r3,它具有12个支持PWM的Pin口,3个串口(如果没记错),以及N(接近60)个输入/输出模拟Pin口,比cb的Pin口强大很多
我准备用USB转TTL线同时为Arduino供电和通信,因此只需要占用1个口
我用的是CbOS 预发布版,内置PL2303(我USB转TTL线的主控)驱动,大家可以使用cb官方的ubuntu 1.1系统,同样有的
先用Arduino IDE烧上程序:

For Mega:
  1. String comdata = "";
  2. const int l = 12;
  3. int numdata[l] = {0}, PWMPin[l] = {2,3,4,5,6,7,8,9,10,11,12,13}, mark = 0;
  4. void setup()
  5. {
  6.   for(int i = 0; i < l; i++) pinMode(PWMPin[i], OUTPUT);
  7.   Serial.begin(9600);
  8. }

  9. void loop()
  10. {
  11.   int j = 0;
  12.   while (Serial.available() > 0)
  13.   {
  14.     comdata += char(Serial.read());
  15.     delay(2);
  16.     mark = 1;
  17.   }

  18.   if(mark == 1)
  19.   {
  20.     //Serial.println(comdata);
  21.     //Serial.println(comdata.length());
  22.     for(int i = 0; i < comdata.length() ; i++)
  23.     {
  24.       if(comdata[i] == ',')
  25.       {
  26.         j++;
  27.       }
  28.       else
  29.       {
  30.         numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  31.       }
  32.     }
  33.     comdata = String("");


  34.     for(int i = 0; i < l; i++)
  35.     {
  36.       //Serial.print("Pin ");
  37.       //Serial.print(PWMPin[i]);
  38.       //Serial.print(" = ");
  39.       //Serial.println(numdata[i]);
  40.       analogWrite(PWMPin[i], numdata[i]);
  41.       numdata[i] = 0;
  42.     }
  43.     Serial.println("Success");
  44.     mark = 0;
  45.   }
  46. }
复制代码
For UNO,Net:
  1. String comdata = "";
  2. int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
  3. void setup()
  4. {
  5.   for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
  6.   Serial.begin(9600);
  7. }

  8. void loop()
  9. {
  10.   int j = 0;
  11.   while (Serial.available() > 0)
  12.   {
  13.     comdata += char(Serial.read());
  14.     delay(2);
  15.     mark = 1;
  16.   }

  17.   if(mark == 1)
  18.   {
  19.     Serial.println(comdata);
  20.     Serial.println(comdata.length());
  21.     for(int i = 0; i < comdata.length() ; i++)
  22.     {
  23.       if(comdata[i] == ',')
  24.       {
  25.         j++;
  26.       }
  27.       else
  28.       {
  29.         numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  30.       }
  31.     }
  32.     comdata = String("");


  33.     for(int i = 0; i < 6; i++)
  34.     {
  35.       Serial.print("Pin ");
  36.       Serial.print(PWMPin[i]);
  37.       Serial.print(" = ");
  38.       Serial.println(numdata[i]);
  39.       analogWrite(PWMPin[i], numdata[i]);
  40.       numdata[i] = 0;
  41.     }
  42.     mark = 0;
  43.   }
  44. }
复制代码
再在各个PWM口与GND之间接1个LED,这个不用说了吧
再把USB转TTL线接上Arduino:
转接线-》Arduino
RX-》TX
TX-》RX
5V-》VIN
GND-》GND
好,再把usb端接上cb
  1. insmod ./modules/`uname -r`/kernel/drivers/usb/serial/pl2303.ko
  2. ls /dev
复制代码
看看有没有ttyUSB0,如果没有,检查一下驱动是否被加载(1.1系统貌似不需要加载)
接着


For mega:
  1. echo "200,200,200,200,200,200,200,200,200,200,200,200" > /dev/ttyUSB0
复制代码
For uno,net:
  1. echo "200,200,200,200,200,200" > /dev/ttyUSB0
复制代码
灯是不是亮了?而又没有比全开亮?
这就说明PWM能用了
调整上面的数值可以更改亮度(范围0~255)

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 02:50 , Processed in 0.019960 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部