成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

arduino. Shippin.


在这里,您可以了解Arduino Shippin如何运作以及它有多快。这 主要用于从并行接收串行输入的功能 串口芯片例如74HC165(8位)。这允许您增加 仅使用两个处理器引脚的处理器的输入数(您可以 菊花链芯片甚至更多的输入)。

arduino. Shippin是纯粹的 串行输入接口的软件实现;等价物 硬件接口是SPI(尽管Shiftin()表示该接口的一半I.E.数据输入部分)。

 arduino.  Uno Shiftin()速度 - 时序图

许多芯片使用串行接口来减少物理的数量 引脚,因此而不是使用并行处理器总线传输数据8或 一次16位,两个信号(时钟和数据)获取数据 设备,一次一点。

SPI和Arduino Shiptin之间的差异

  • spi很快。
  • SPI仅从特定引脚运行。
  • SPI适应不同的时钟类型。通常很高
  • SPI同时传输和接收数据。
  • Shiptin很慢。
  • Shiptin只能接收数据。
  • Shiftin可以从任何数字引脚工作。
  • Shippin可以应用于多个引脚。
提示: 您可以在不同的引脚上使用多个Shiftin实例。

Suchining如何运作

arduino. Shiftin()使用两个信号引脚(数字输出引脚,以及 数字输入引脚 - 即几乎任何Arduino引脚)并生成一个 输出上的时钟信号,并在输入上接收数据,使用 DigitalRead()函数。

shiptin的源代码

arduino. Shippin的源代码包含在Wiring_shift.c中。路径是:

C:\ Program Files \ Arduino \硬件\ Arduino \ Avr \ Cores \ Arduino \ wiring_shift.c

注意在Arduino.h中定义LSBFirst等常量,在同一目录中。

uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
	uint8_t 价值 = 0;
	uint8_t i;

	for (i = 0; i < 8; ++i) {
		digitalWrite(clockPin, HIGH);
		if (bitOrder == LSBFIRST)
			价值 |= digitalRead(dataPin) << i;
		else
			价值 |= digitalRead(dataPin) << (7 - i);
		digitalWrite(clockPin, LOW);
	}
	return 价值;
}

shiftin()的参数

有三个参数:

  1. 数据引脚(Arduino PIN码)。
  2. 时钟引脚(Arduino PIN码)。
  3. 位顺序(LSBFirst(0)或MSBFirst(1))。

该函数从设备返回8位数据作为字节(UINT8_T)。

笔记: Shiftin()假定数据尚未准备就绪,直到提供上升沿。

基本操作是使用for-循环循环通过每个位。

在循环中,第一个动作是将时钟信号输出到高。

然后来自DigitalRead()的输入值由当前左移 循环值(i)并ored进入变量'value'。在此之后,时钟 signal is set low.

以这种方式,每次设置时都会读取数据线 高的。每个输入位都放入'value'变量,其位 移位位置,直到检索8位。然后函数返回 the variable 'value'.

shifout()代码如何工作?

代码通过使用位移运算符来工作'<<'它将变量中的所有位移到左侧。

假设Bitorder是LSBFirst,然后是第一个循环迭代i 是零,术语(1 <<i)将左侧的变量转移到零个位置 即它与值1离开变量。

笔记: 在C临时变量中用于保持中间值。

生成步行'one'

这是零(b0)。

    00000001B

下次循环周围变量保存值1左移一个地方:

    00000010B

这重复了6次
   
    00000100B
    00001000B
    00010000B
    00100000B
    01000000B
    10000000B 

以这种方式走路'1'创建从b0到b7移动。

对于MSBFirst的比特权,索引的值被操纵到 为每一个值从b7移动到b0。所以走路'1' walks in the 从位7开始的方向。

笔记: 对于MSBFirst,代码慢一点,因为8个x减去操作。

提取位值

自变量以来'value'在开始时被初始化为零 例程,每个传入数据位都在变量中取入到位。

这是不同的 ShiftOut() , 在哪里和使用。这是因为oring将比特添加到同一个方面 变量(离开其他未改变),而且每个都是隔离的 距离剩下的钻头(用于输出)。

arduino. Shiftin()有多快?

该函数使用DigitalRead()所以它应该类似于 speed of 数号() - 在该链接脉冲周期(用于Arduino Uno) is 7us.

由于需要8个脉冲,Shiftin()应该需要大约56us加上比特操纵和循环循环 for-loop. 。事实上,Shiftin()的额外操作这次(见下文)。

测试Arduino Shiftin()的示例程序

以下草图在引脚7上输出标记信号(您可以 触发串行数据开始的范围)并备用数据 使用模式0x55和0x99 - 交替数据模式。

// Demonstration code for shiftIn
 在 t MARK = 7;
 在 t SERCLK = 6;
 在 t SERDATA = 5;

void setup() {

   pinMode(MARK, OUTPUT);
   pinMode(SERDATA, INPUT);
   pinMode(SERCLK, OUTPUT);
   noInterrupts();
}

void loop() {
byte d;

   digitalWrite(MARK, HIGH);
   d = shiftIn(SERDATA, SERCLK, MSBFIRST);
   digitalWrite(MARK, LOW);

   digitalWrite(SERDATA, LOW);   //  Stop scope output flicker.
   delay(10);
}

示波器输出标记信号 120us(最长的信号)。时钟信号的时期是:14.37US(〜69.6kHz)。

但是,您通常会使用标记信号作为芯片选择, 所以它是可实现的时机的代表(CS通常是 倒置使其处于活跃低)。

    黄线显示​​销6上的时钟信号
    接下来是销7上的标记信号(蓝色)。

 arduino.  Uno Shiftin()速度 - 时序图

时基是10US,幅度为2V / div。


新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


 ezoic. 报告此广告

访问我们的Facebook页面:

    点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino. 模拟输出...易模拟输出生成

    arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超 极好的 ."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
Matt_tr. <at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。 "


- Anon.

回到顶部