SPI应用 用SPI控制一个数字电位器
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控制一个数字电位器的更多相关文章
- 求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 */ ...
- 求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 ...
- Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。
返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数 ...
- python基础练习题(题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制)
day11 --------------------------------------------------------------- 实例018:复读机相加 题目 求s=a+aa+aaa+aaa ...
- windows 系统中打开一个数字证书所经历的过程
今天在使用Outlook express调试CSP程序时,发现数字证书总是加载不上(提示该数字证书已经被破坏),使用断点进去跟踪一下,发现在CSP程序中调用CPVerifySignature ...
- SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)
SPI接口扫盲 douqingl@gmail.com 为何要写这篇文档?百度上找出来的SPI接口中文描述都说的太过简略,没有一篇文档能够详尽的将SPI介绍清楚的.wikipedia英文版[注释 ...
- SPI通信协议(SPI总线)学习
1.什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线. ...
- Dubbo 扩展点加载机制:从 Java SPI 到 Dubbo SPI
SPI 全称为 Service Provider Interface,是一种服务发现机制.当程序运行调用接口时,会根据配置文件或默认规则信息加载对应的实现类.所以在程序中并没有直接指定使用接口的哪个实 ...
- 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
随机推荐
- 深入理解SVM,软间隔与对偶问题
今天是机器学习专题的第33篇文章,我们继续来聊聊SVM模型. 在上一篇文章当中我们推到了SVM模型在线性可分的问题中的公式推导,我们最后得到的结论是一个带有不等式的二次项: \[\left\{\beg ...
- 【Android】java生成炫酷验证码,不区分大小写。登陆,发送手机验证码,防止注册机,android开发
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...
- python笔记-正则表达式
什么是正则表达式: 正则表达式是一个特殊的字符序列,能帮助我们方便的检查一个字符串是否与某种模式匹配(定义往往都很枯燥) 也称之为”模式“,即可用于检查一个给定的字符串是否符合某种模式 举例: 我们定 ...
- Unity添加自定义拓展方法
Shepherdog|2014-04-08 10:50|16151次浏览|Unity(373)0 通常你会发现你不能修改正在使用的那些类,无论它是基础的数据类型还是已有框架的一部分,它提供的方法让你困 ...
- Oracle 11G R2安装说明 -九五小庞
教程版本Oracle 11.2.0.1.0
- 微服务架构组件梳理之Netflix停更之后该何去何从
自2018年底,Netflix陆续宣布Eureka.Hystrix等框架进入维护状态,不再进行新功能的开发. 恰逢最近我打算对公司的办公项目进行微服务架构升级,所以恶补了一番微服务相关知识,在这里进行 ...
- css实现导航栏下划线跟随效果
话不多说先附上代码 <style> ul li { float: left; display: block; list-style: none; margin-left: 20px; bo ...
- Ubuntu 安装配置 WordPress5.4.2
一.安装 Apache 并配置 WordPress sudo apt-get install apache2 -y // 安装 apache2 sudo apt-get install php -y ...
- 营销经验总结:如何才能提升h5游戏代入感?
HTML5游戏拥有即点即玩,无需下载,并具备传播性广的特点,这就使得商家看到了无限商机,如何让产品更加深入人心,是游戏推广最为重要的环节.优秀的代入感才是游戏产品宣传的关键,那么有哪些要素的支撑才能确 ...
- 第一课、python基础学习笔记
自动化非自动化的区别 自动化测试就是让机器按照人的想法把功能全部跑一遍 自动化测试的过程,让我们写一段程序去测试另一段程序是否正常的过程 Java 编译型语言, 编码-->编译-->解 ...