问题标签 [microcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
1169 浏览

c - 在c中的“正常”变量之前声明数组?

我们目前正在为 msp430 MCU 开发应用程序,并且遇到了一些奇怪的问题。我们发现,在声明“正常”变量之后声明具有范围的数组有时会导致似乎未定义的行为。像这样:

foo 作为第二个变量传递一个指针,该指针有时不指向arr数组。我们通过单步执行程序来验证这一点,发现主作用域中的 arr array-as-a-pointer 变量的值与 foo 作用域中的 b 指针变量的值不同。不,这不是真正可复制的,我们只是偶尔观察到这种行为。

这甚至在执行 foo 函数的单行之前就可以观察到,传递的指针参数 (b) 根本没有指向 arr 所在的地址。

更改示例似乎可以解决问题,如下所示:

是否有人对我们为什么会遇到这种行为有任何意见或提示?或者类似的经历?MSP430 编程指南指定代码应符合 ANSI C89 规范。所以我想知道它是否说必须在非数组变量之前声明数组?

对此的任何意见将不胜感激。


更新

@Adam Shiemke 和 tomlogic:

我想知道 C89 对在声明中初始化值的不同方式有什么规定。你是否允许写类似的东西:

如果是这样,那又如何:

这是允许的吗?我假设以下内容一定是非法的 C89:

提前致谢。


更新 2 问题已解决。基本上,我们在调用函数(foo)之前和声明变量之后禁用中断。我们可以在一个简单的示例中重现该问题,解决方案似乎是在禁用中断调用之后添加一个 _NOP() 语句。

如果有人有兴趣,我可以发布重现问题的完整示例,以及修复?

感谢您对此的所有意见。

0 投票
5 回答
19450 浏览

documentation - 我如何在流程图中表示中断(对于微控制器)?

有没有人有任何视觉例子?

0 投票
2 回答
1588 浏览

algorithm - Looking for ideas for a simple pattern matching algorithm to run on a microcontroller

I'm working on a project to recognize simple audio patterns. I have two data sets, each made up of between 4 and 32 note/duration pairs. One set is predefined, the other is from an incoming data stream. The length of the two strongly correlated data sets is often different, but roughly the same "shape". My goal is to come up with some sort of ranking as to how well the two data sets correlate/match.

I have converted the incoming frequencies to pitch and shifted the incoming data stream's pitch so that it's average pitch matches that of the predefined data set. I also stretch/compress the incoming data set's durations to match the overall duration of the predefined set. Here are two graphical examples of data that should be ranked as strongly correlated:

http://s2.postimage.org/FVeG0-ee3c23ecc094a55b15e538c3a0d83dd5.gif

(Sorry, as a new user I couldn't directly post images)

I'm doing this on a 8-bit microcontroller so resources are minimal. Speed is less an issue, a second or two of processing isn't a deal breaker.

It wouldn't surprise me if there is an obvious solution, I've just been staring at the problem too long. Any ideas?

Thanks in advance...

0 投票
2 回答
1885 浏览

windows - PIC 18 控制器作为串行到以太网桥

我计划将 PIC18F6*** 串行微控制器用于我的项目串行以太网转换器。一旦我将我的十六进制代码放入 PIC 微控制器以发送接收串行端口数据,我将使用 Windows 超级终端并检查以太网数据 Windows 中有任何应用程序吗?

如果我的问题不清楚,我准备好更好地解释它......请让我知道......

0 投票
3 回答
2969 浏览

embedded - AVR 模拟比较器 + 内部上拉?

我希望这是一个与 Atmel AVR 微控制器有关的简单问题。所以我想使用 ATtiny85 的模拟比较器来确定信号是高于还是低于阈值。该信号通常是“浮动的”,并在“活动”时拉向地线(即它是一个活动的低电平 - 集电极开路信号)。如果我通过执行以下操作启用输入引脚(也是比较器输入)上的上拉:

如果我使用模拟比较器并选择 PORTB.1 作为 AIN1,内部上拉电阻会应用于我的输入信号吗?我希望有人有个人经验来验证这种行为。希望这个问题对于堆栈溢出来说不是太“面向硬件”。谢谢!

编辑 针对以下关于“为什么不对其进行数字处理”的一些评论,这是因为我的“信号”是由传感器(即光学红外传感器)生成的。我不能保证它会拉低“足够硬”以在数字上被解释为零,所以我将使用内部 2.56V 参考作为我的开关阈值。我只是想了解“IR 事件”,所以这对我来说似乎是最简单的方法。

此外,通过使用模拟比较器,我可以使用 ISR“异步”检测事件。授予某些引脚可以在数字边缘调用中断,但不想依赖响应降至 V_IL 以下。

0 投票
6 回答
5772 浏览

algorithm - 8位微控制器上的线性插值

我需要使用 PIC 汇编语言在 8 位 PIC 微控制器(特别是 16F627A,但没关系)上的两个值之间随时间进行线性插值。尽管我在这里寻找的算法与实际代码一样多。

我需要取一个 8 位起始值、一个 8 位结束值和两者之间的位置(当前表示为 8 位数字 0-255,其中 0 表示输出应该是起始值,255 表示它应该是最终值值,但如果有更好的方法来表示它,那可能会改变)并计算插值。

现在 PIC 没有除法指令,所以我可以编写一个通用除法例程并在每一步有效地计算 (BA)/(x/255)+A,但我觉得可能有更好的方法来做到这一点一个微控制器,而不是我在 C++ 的 PC 上做的方式

有没有人有任何建议可以在这个硬件上有效地实现这个?

0 投票
3 回答
10788 浏览

assembly - Writing to EEPROM on PIC

Are there any PIC microcontroller programmers here?

I'm learning some PIC microcontroller programming using a pickit2 and the 16F690 chip that came with it. I'm working through trying out the various facilities at the moment. I can sucessfully read a byte from the EEPROM in code if I set the EEPROM vaklue in MPLAB but I don't seem to be able to modify the value using the PIC itsself. Simply nothing happens and I don't read back the modified value, I always get the original which implies to me that the write isn't working?

This is my code for that section, am I missing something? I know I'm doing a lot of unnecessary bank switches, I added most of them to ensure that being on the wrong bank wasn't the issue.

0 投票
4 回答
219 浏览

microcontroller - 在微控制器上反复改变 I/O 方向是否稳定?

我是微控制器编程的新手,我已经将微控制器板连接到另一个设备,该设备根据发送给它的命令提供状态,但是,此状态是在用于提供数据的同一 I/O 引脚上提供的。所以基本上,我有一条 8 位数据线用作微控制器的输出,但对于某些命令,如果我选择读取它,我会在其中一条数据线上获得状态。因此,我需要更改这一行的方向以读取状态,从而将这一行作为输出转换为输入,然后再转换为输出。这是可以接受的编程吗,还是这种 I/O 引脚的更改会经常导致不稳定?

谢谢。

0 投票
2 回答
730 浏览

microcontroller - 跨多个架构的负数表示

我正在使用 OKI 431 微控制器。它可以与安装了适当软件的PC进行通信。一个 EEPROM 连接在 micro 的 I2C 总线上,用作永久存储器。PC 软件可以读取和写入该 EEPROM。

考虑两个数字,B 和 C,每个都是两字节整数。B 对 PC 软件和 micro 来说都是已知的,并且是一个常数。C 将是一个非常接近 B 的数字,因此 BC 将适合一个有符号的 8 位整数。经过一些测试,合适的 C 值将由 PC 确定并存储到 micro 的 EEPROM 中以供以后使用。

现在 micro 可以通过两种方式存储 C:

  • 微可以存储two byte代表C的整体
  • micro可以将BC存储为有one byte符号整数,以后可以从B和BC推导出C

我认为负数的二进制补码表示现在已被硬件制造商普遍接受。我个人仍然不喜欢将负数存储在将由两种不同架构访问的存储介质中,因为负数可以用不同的方式表示。供您参考,431 还使用二进制补码。

我是否应该摆脱负数可以以不同方式表示的头痛并接受one byte我的其他团队成员建议的解决方案?或者我应该坚持two byte解决方案的决定,因为我不需要处理负数?你更喜欢哪一个,为什么?

0 投票
2 回答
768 浏览

embedded - 计算微控制器板载 ADC 的最大物理速率(奈奎斯特性能限制)

我正在尝试评估集成在各种 PIC 微控制器上的 A/D 的最大物理速率(奈奎斯特性能限制)。

但是,要进行计算需要我在数据表中没有明确说明的参数,特别是 Tacq、Fosc、TAD 和除数参数。

我已经进行了一些假设,但进行健全性检查会有所帮助——我是否正确地进行了最大物理速率计算?

仅出于说明目的,我采用了具有 ADC 的最简单的 PIC10F220。这是为了特别关注 Tacq、Fosc、TAD 和除数参数的解释,而不是建议在这个非常基本的芯片上可以实现任何实际功能。(这是克利福德在下面评论中的观点。)

计算

所以:

假设在下一个样本之前实时完成了 10 条简单的加载/存储/阈值指令(这只是一个存根——重点是计算的其余部分):

这意味着该系统的(理论)性能——带有假设实时处理代码的芯片 A/D——适用于带宽限制为 28 kHz 的信号。

在获取 Tacq、Fosc、TAD 和除数参数并使用它们来获得该芯片的最大物理速率或 Nyquist 性能限制时,这是对数据表的正确分配/解释吗?

谢谢,