Controlling a Digital Potentiometer Using SPI

In this tutorial you will learn how to control the AD5206 digital potentiometer(数字电位计) using Serial Peripheral Interface (SPI). For an explanation of SPI see the SPI Library reference.

Digital potentiometers are useful when you need to vary the resistance in a circuit electronically rather than by hand. Example applications include LED dimming调光, audio signal conditioning and tone generation. In this example we will use a six channel digital potentiometer to control the brightness of six LEDs. The steps we will cover for implementing实施 SPI communication can be modified for use with most other SPI devices.

Hardware Required 硬件准备

  • Arduino or Genuino board
  • AD5206 Digital Potentiometer
  • 6 LEDs
  • 6 220 ohm resistors
  • hook-up wires电子安装线
  • breadboard

Introduction to the AD5206 Digital Potentiometer

Click for for the AD5206's datasheet.

The AD5206 is a 6 channel digital potentiometer. (AD5206是8通道的数字电位器)。 This means it has six variable resistors (potentiometers) built in for individual electronic control. There are three pins on the chip for each of the six internal variable resistors, and they can be interfaced with just as you would use a mechanical potentiometer. The individual variable resistor pins are labeled Ax, Bx and Wx, ie. A1, B1 and W1. For example, in this tutorial we will be using each variable resistor as a voltage divider by pulling one side pin (pin B) high, pulling another side pin (pin A) low and taking the variable voltage output of the center pin (Wiper滑片). In this case, the AD5206 provides a maximum resistance of 10k ohm, delivered in 255 steps (255 being the max, 0 being the least).(可以得到最大电阻10K欧姆,最小0欧模,分为255步幅)

Circuit 电路图

image developed using Fritzing. For more circuit examples, see the Fritzing project page

Schematic 原理图

  1 Code 代码
2
3 /*
4
5 Digital Pot Control 数字电位器的控制
6
7
8
9 This example controls an Analog Devices AD5206 digital potentiometer.
10
11 The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
12
13 A - connect this to voltage
14
15 W - this is the pot's wiper, which changes when you set it
16
17 B - connect this to ground.
18
19 每隔通道有三个端,A,B,W,A接工作电压,W接滑动端,C接地
20
21 The AD5206 is SPI-compatible, and to command it, you send two bytes, one with the channel number (0 - 5) and one with the resistance value for the channel (0 - 255).
22
23
24
25 The circuit:
26
27 * All A pins of AD5206 connected to +5V
28
29 * All B pins of AD5206 connected to ground
30
31 * An LED and a 220-ohm resisor in series connected from each W pin to ground
32
33 每个W引脚的LED串220欧电阻
34
35 * CS - to digital pin 10 (SS pin) 片选引脚CS接到控制板的引脚10
36
37 * SDI - to digital pin 11 (MOSI pin) SDI引脚接到控制板的引脚11
38
39 * CLK - to digital pin 13 (SCK pin) CLK 引脚接到控制板的引脚13
40
41
42
43 created 10 Aug 2010
44
45 by Tom Igoe
46
47
48 Thanks to Heather Dewey-Hagborg for the original tutorial, 2005
49
50
51
52 */
53
54
55
56 // inslude the SPI library:
57
58 #include <SPI.h>
59
60
61
62 // set pin 10 as the slave select for the digital pot:
63
64 const int slaveSelectPin = 10; // 从选择引脚
65
66
67
68 void setup()
69
70 {
71
72 pinMode(slaveSelectPin, OUTPUT); // set the slaveSelectPin as an output
73
74 SPI.begin(); // initialize SPI
75
76 }
77
78
79
80 void loop()
81
82 {
83
84 // go through the six channels of the digital pot: 循环数字电位器的六个通道
85
86 for (int channel = 0; channel < 6; channel++)
87
88 {
89
90 // change the resistance on this channel from min to max: 电阻从小到大
91
92 for (int level = 0; level < 255; level++)
93
94 {
95
96 digitalPotWrite(channel, level);
97
98 delay(10);
99
100 }
101
102 delay(100); // wait a second at the top
103
104 // change the resistance on this channel from max to min: 电阻从大到小
105
106 for (int level = 0; level < 255; level++)
107
108 {
109
110 digitalPotWrite(channel, 255 - level);
111
112 delay(10);
113
114 }
115
116 }
117
118 }
119
120
121
122 void digitalPotWrite(int address, int value)
123
124 {
125
126 // take the SS pin low to select the chip: SS引脚置低选中该芯片
127
128 digitalWrite(slaveSelectPin, LOW);
129
130 // send in the address and value via SPI:
131
132 SPI.transfer(address); //传送地址
133
134 SPI.transfer(value); //传送数值
135
136 // take the SS pin high to de-select the chip: SS引脚置高释放该芯片
137
138 digitalWrite(slaveSelectPin, HIGH);
139
140 }

运行效果:从第1通道开始,每个通道的LED,从最暗到最亮,0.1秒后,再从最亮到最暗。

SPI应用 用SPI控制一个数字电位器的更多相关文章

  1. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    package com.lw.HomeWork1;//包名 2 import java.util.Scanner; public class Demo18 { /** * @param args */ ...

  2. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    代码: package com.liron.p1; import java.io.IOException; import java.util.Scanner; /** * 求s=a+aa+aaa+aa ...

  3. Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。

    返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数 ...

  4. python基础练习题(题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制)

    day11 --------------------------------------------------------------- 实例018:复读机相加 题目 求s=a+aa+aaa+aaa ...

  5. windows 系统中打开一个数字证书所经历的过程

         今天在使用Outlook express调试CSP程序时,发现数字证书总是加载不上(提示该数字证书已经被破坏),使用断点进去跟踪一下,发现在CSP程序中调用CPVerifySignature ...

  6. SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)

    SPI接口扫盲   douqingl@gmail.com   为何要写这篇文档?百度上找出来的SPI接口中文描述都说的太过简略,没有一篇文档能够详尽的将SPI介绍清楚的.wikipedia英文版[注释 ...

  7. SPI通信协议(SPI总线)学习

    1.什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线. ...

  8. Dubbo 扩展点加载机制:从 Java SPI 到 Dubbo SPI

    SPI 全称为 Service Provider Interface,是一种服务发现机制.当程序运行调用接口时,会根据配置文件或默认规则信息加载对应的实现类.所以在程序中并没有直接指定使用接口的哪个实 ...

  9. 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

随机推荐

  1. TinkPHP框架开发的CRMEB小程序商城v4.0二次开发集成支付宝支付

    前言 大家都知道支付宝支付和微信支付宝都只能局限在自己的平台,微信内支付宝支付是根本就不能使用,即使是公众号支付也需要跳转到外部浏览器才可以唤起支付宝支付,并且QQ浏览器唤起支付宝支付还是问题很多,所 ...

  2. LinuxIP配置方法

    一.双网卡双IP. eth0为电信,eth1为联通. # cd /etc/sysconfig/network-scripts/ # vi ifcfg-eth0 DEVICE=eth0 HWADDR=0 ...

  3. Mybatis通用Join的实现(最终版)

    你是否还在为mybatis的多表关联查询而写xml烦恼,是否还在为动态组装查询条件烦恼,是否还在为此没有合适的解决方案烦恼? mybatis-extension插件,解决开发过程中需要多表关联时需手写 ...

  4. LoadRunner回放脚本遇到的问题(遇到就补上)

    问题一:Error-26612:HTTP Status-code=500(Internal Server Error) 解决过程:google找到了关于这个错误有多种解决的方法,但是都不是我要的,最重 ...

  5. Hihocoder 小Hi小Ho扫雷作死一二三

    这里贴下不用枚举方格是否为雷的方法 a表示输入标号,初始值为-1代表未探知 b表示当前格子是否有雷,初始化为0,0表示未探知,1表示探知肯定有雷,2表示探知肯定无雷(我也不知道为什么不初始化为-1,作 ...

  6. Activiti7 网关(并行网关)

    什么是并行网关? 并行网关允许将流程分成多条分支,也可以将多条分支合并到一起,并行网关是基于进入和外出顺序流的 fork分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支 jion汇聚: ...

  7. WebLogic12C安装配置文档

    jdk版本:1.8; jdk安装路径不准有空格 JDK安装: jdk版本:1.8; jdk安装路径不准有空格 WebLogic安装: 解压安装包 解压JAR 找到fmw_12.2.1.3.0_wls\ ...

  8. Solon详解(三)- Solon的web开发

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  9. 2020年1月31日 安装Python的requests包记录

    C:\Users\ufo>pip install requests Collecting requests WARNING: Retrying (Retry(total=, connect=No ...

  10. Java模拟实现扫雷功能

    //棋子 public class Chess { private boolean isBoomb=false; private int id;//下标 //点击方法 public int click ...