Questions tagged «microcontroller»

紧密耦合的独立设备中包括中央处理器(CPU),内存和(通常)各种I / O外设(UART,ADC,DAC,通用I / O,I2C等)的设备包。


7
高电平有效和低电平有效信号在嵌入式系统中如何工作?
这是关于微控制器通常的工作方式。 我们所做的编程由编译器转换为1和0,然后将这些机器可理解的代码加载到微控制器中。 微控制器对此有何反应。.我的意思是这些1和0通过DAC转换为相应的逻辑电压(5v和0)吗?如果是这样的话,这片小小的硅片如何决定如何处理5v和0v的各种组合? 我知道每个IC都由逻辑门组成,而这些门由晶体管组成。那么这些晶体管如何响应5v和0v的各种组合? 是什么让他们寻找这些逻辑。.我的意思是说,他们在通电时如何监视这些指令? 因此,肯定要在MCU中加载一个操作系统来告诉它要处理以及如何处理这些指令,不是吗。 接下来是..考虑一个计时器..它只是一个寄存器,在每个时钟周期后加一。我对吗?在那种情况下,用什么语言编写操作系统的所有代码? 我可以继续对不同的任务进行mcu编程,但是今天我很想知道此机器如何理解我的代码。 抱歉,我的问题读起来很冗长..请帮助我学习这些基本知识。 提前致谢..

5
电脑控制水阀
我正在研究计算机控制的室内瀑布。要求之一是能够通过计算机界面更改水压。我整天用Google搜索,似乎找不到可以通过计算机控制的阀门。有人碰巧知道这样的设备,在哪里可以找到?

9
是否存在任何对爱好者友好的强大处理器?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为电气工程堆栈交换的主题。 4年前关闭。 好的,所以我有一个我想创建的项目,但这需要一点处理能力。我见过的最强大的功能是ATMega1284P。真正的用力是我需要程序存储器和RAM,而不是原始MIP。 那里还有其他对业余爱好者友好的东西吗? 业余爱好者的意思是,不必用任何昂贵的机器进行焊接(返修台等)。当然也可以不用花很多钱就能只买几个。当然还有免费提供的编译器和其他软件工具。 我的项目是构建一个具有简单图形功能以及可能有限的编程功能的小型(便携式)计算器。

3
嵌入式系统LINT的使用
我目前使用许多不同的编译器来开发嵌入式系统,其中最常见的是IAR系统。 我对硬件的热爱是驱动嵌入式系统和固件的原因。但是,我似乎在软件工程方面缺乏很多知识。 我读过很多遍了,好的Lint对于代码来说是无价的。我想知道这里是否有人使用Lint,它是哪一种Lint,以及它在检测错误方面有多少帮助。

5
插拔式计算机有哪些更引人注目的用例?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 是插件的电脑因为除了网络附加存储任何有用的东西? 我知道您可以将许多驱动器挂起,也许可以设置自己的Web服务器。但是这些用途在家庭环境中的吸引力有限,而在公司环境中,我怀疑会使用普通服务器。我可以看到它们在工业环境中使用,可能用作环境控制器或能源管理设备,但是缺少I / O(键盘和显示器)似乎限制了它们的实用性。 我想念什么吗?还是我只是缺乏想象力?您是否设想了一种在家庭环境中使用它们的方法,而不是用作媒体服务器/穷人的Tivo?

7
使用MCU测量0-1 MHz(0.25Hz分辨率)方波
我需要测量方波的频率,该频率可以在0到1MHz之间变化,分辨率为0.25Hz。 我还没有决定使用哪个控制器,但是它很可能是20pin Attiny的控制器之一。 通常,我如何测量低频信号将通过使用两个定时器来配置,其中一个配置为定时器捕获模式以在外部信号的上升沿中断,另一个定时器设置为每秒中断一次,因此前一个定时器在1秒后计数寄存器值将等于信号的频率。 但是,这种方法显然无法以0.25Hz的分辨率捕获0到1MHz范围内的信号,为此,我需要一个22Bit计数器(AFAIK 8bit micros仅具有8 / 16bit计数器)。 我曾经想过的一个想法是在将信号应用于微控制器之前先对其进行分频,但这是不切实际的,因为必须将信号除以61,因此频率只能每61秒更新一次,而我希望每隔几秒更新一次。 还有另一种方法可以让频率每4秒更新一次吗? 更新: 最简单的解决方案是使用外部中断或定时器捕获在信号的上升沿中断,并使isr增量为type变量long int。每4秒钟读取一次变量(以允许测量低至0.25Hz的频率)。 更新2: 正如JustJeff所指出的,一个8位MCU将无法跟上1MHz的信号,从而排除了在每个上升沿中断并增加long int... 我选择了timororr建议的方法。一旦我实现了它,我会回发并分享结果。感谢大家的建议。 进度报告: Iv'e开始测试此处提出的一些想法。首先,我尝试了vicatcu的代码。存在一个明显的问题,即TCNT1在计算频率后仍未清除-没什么大不了的... 然后,我在调试代码时注意到,大约每2到7倍的频率被计算出来,定时器1(配置为对外部事件进行计数的定时器)的溢出计数将减少2。我将其归结为定时器0 ISR的等待时间,并决定将ISR的if语句块移至主要(请参见下面的代码段),并在ISR中设置一个标志。一些调试显示,第一次测量是可以的,但随后的每次读取都将使Timer 1的溢出计数超过2。这我无法解释-我希望它不会超过...。 int main() { while(1) { if(global_task_timer_ms > 0 && (T0_overflow == 1)) { global_task_timer_ms--; T0_overflow = 0; } ..... } } 接下来,我决定尝试实施timrorrs建议。要生成必要的间隔(每个timer_isr中断之间大约15毫秒),我将必须将两个8位定时器级联,因为Atmega16上仅有的16位定时器被用来捕获外部信号的上升沿。 我认为此解决方案将行之有效,并且效率会更高,因为大部分开销都转移到了计时器上,并且仅剩一个简短的isr供CPU处理。但是它不如我所希望的那样准确,测量值来回移动了约70Hz,这在高频下我不介意,但在低频下绝对不能接受。我没有花太多时间来分析问题,但是我猜想计时器的级联设置不太准确,因为我在一个速度较慢的具有2个16位计时器的8051控制器上实现了与调速建议类似的安排,结果相当准确。 现在,我又回到了vicatcu的建议,但是将频率计算移到了Timer 0 isr (请参见下面的代码段)中,此代码产生了一致且合理的测量结果。稍加校准后,精度应约为+/- …

1
与Nichrome加热器接口
我将镍铬合金丝用于加热应用,而只是使用了慢炖锅中的一些扫过的零件。打开/关闭Nichrome的最简单方法是什么?我正在考虑仅通过一个固态继电器(SSR)来提供一个120VAC的微控制器开关,该继电器将直接为Nichrome导线供电。 我需要担心任何电感问题吗?镍铬合金只是一条长条,不以任何方式盘绕。

2
为什么AVR代码使用位移位[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 在AVR编程中,通过将a左1移到合适的位位置来始终设置寄存器位-并用相同的补码清除它们。 例如:对于一个ATtiny85,我可以这样设置PORTB,b 4: PORTB |= (1<<PB4); 或像这样清除它: PORTB &= ~(1<<PB4); 我的问题是:为什么要这样做?最简单的代码最终是一团乱码。为什么将位定义为位位置而不是掩码。 例如,ATtiny85的IO标头包括以下内容: #define PORTB _SFR_IO8(0x18) #define PB5 5 #define PB4 4 #define PB3 3 #define PB2 2 #define PB1 1 #define PB0 0 对我来说,将这些位定义为掩码(这样)会更加合乎逻辑: #define PORTB _SFR_IO8(0x18) #define PB5 0x20 #define PB4 0x10 #define PB3 0x08 #define …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.