atmega

atmel 模拟 UART 通讯

我正在开发一个带有 UART 控件的项目。我正在尝试模拟通过 UART 发送和接收消息。 UART 将连接到现实世界中的 RS-485 收发器,但我将通过 test.c 文件提供输入/输出。 目前,我必须在模拟器中暂停程序的执行,手动翻转该位并再次将程序返回执行,以便 UART 发送大约字节。 我的问题是我可以自动设置 TXC 位来模拟字节的成功传输吗?我目前正在阅读 Atmel 的文档并破译... »

使用带有 AVR 微控制器的旋转编码器

我无法让旋转编码器与 AVR 微控制器一起正常工作。编码器是机械的ALPS encoder,我用的是Atmega168。 澄清 我曾尝试使用外部中断来监听引脚,但似乎太慢了。当引脚 A 变为高电平时,中断程序开始,然后检查引脚 B 是否为高电平。这个想法是,如果在引脚 A 变高的那一刻引脚 B 为高,那么它会逆时针旋转。如果引脚 B 为低电平,则它正在顺时针旋转。但似乎 AVR 需要太长时间来... »

Atmel Studio ADC 输出十进制值

我有 MCU ATMega16,我在做数字电压表。 我想在液晶显示器上显示十进制数。 这是我的代码: #include <avr/io.h> #include <util/delay.h> #include "lcd.h" #include <stdlib.h> signed int temp = 0; double voltage = 0;... »

c

是否可以在 C++ 中为嵌入式平台创建新的原始类型?

我正在从头开始为 Atmel ATmega2560 芯片编写自己的 c++ 库,作为学习它(以及一般电子设备)如何工作的练习。作为其中的一部分,我想在 C++ 中创建一个新的基本 byte 类型,它不仅仅是另一种类型的别名,并且具有 8 位的精确大小。 由于这是一个嵌入式平台,我希望尽可能避免为芯片生成额外的指令来处理,这使得类和结构不适合。我知道我可以使用 char 类型,但是 C++ 标准... »

c++

如何为 ATmega8 微控制器实现自己的闪存软件

有没有人知道如何为 atmega8-microcontroller 实现自己的闪烁过程? 搜索时,我只找到了有关如何使用普通刷机软件(在大多数情况下是 atmels 翻转)刷机自定义软件的教程,但我没有找到任何文档,您将如何在自己的软件中实现它.例如。什么是命令,在什么时间和来自微控制器的响应。 所以,提前谢谢你... »

c++

按下按钮后如何延迟输出约 15 分钟?

我正在学习微控制器编程。我需要帮助才能使用 Atmega8L-8PU 在 WinAVR 上完成我的程序。 我添加了 3 个按钮,当按下按钮时:第一个按钮将提供 15 分钟的输出,第二个按钮将提供 30 分钟,最后一个按钮将提供 45 分钟。每次经过后,应自动重置以供下次按下。 这是我编写的代码,但我无法添加持续时间。如果有人能做到,那对我很有帮助。提前谢谢:)。 #define numbero... »

c++

定点中`atan`函数的逼近

我必须做一些需要使用三角函数的计算,尤其是atan。代码将在 Atmega328p 上运行,为了提高效率,我不能使用 floats:我使用的是定点数。因此,我不能使用标准的atan 函数。 我有一个函数,它采用定点格式 s16_10(有符号,16 位宽度,指向第 10 位)的值,并返回 s16_6 格式。输入将介于 0 和 1 之间(因此 0 和 210),因此输出(以度为单位)将介于 -45 ... »

为什么我的 ISR 声明会破坏我的程序?

我正在尝试让我的 Arduino Uno R3 上的两个 LED 闪烁(用于学习目的)。我使用 avr-gcc 和 avrdude 来编译和加载我的程序。 我在 main 的 while 循环中使第一个闪烁。我正在尝试使用 Timer0 打开和关闭第二个。 首先,有效的代码: #include <avr/io.h> #include <util/delay.h> int ... »

AVR 键盘 COM-08653 问题

我试图弄清楚如何使用 Atmega 32 从我的 COM-08653 键盘读取输入。电路视图和一些 arduino 教程让我简要了解了它的外观。 不幸的是,我没有得到任何意见,我也不知道为什么。 char test() { char result = 0; for (int col = 0; col < COLS; col++) { PORT... »

c

如何将字节数组(包含十六进制值)转换为十进制

我正在为 Atmel 微控制器编写一些代码。我通过 Uart 获取一些数据,并将这些十六进制值存储到一个数组中。 假设数组的元素是:1F、29、3C。 我想要一个像 0x1F293C 这样的十六进制数,并将其转换为十进制数。所以,我想最后得到“2042172”。 数组可以有n个元素,所以我需要一个通用的解决方案。 谢谢。 ... »

c

在 atmega16 中得到错误的输出

我正在尝试使用 ATmega16 构建一个自动植物浇水系统。逻辑是,传感器将在 PA0 提供一个模拟输入,该输入将与预设值进行比较以打开/关闭水泵。 以下是我们使用的代码片段: #include<avr/io.h> int adc(void); void pump(void); int adc_value; int main(void) { DDRC=0x01; ... »

在 ISR 中清除中断是必要的吗? (对于 Atmega644p uC)

当中断服务程序正在执行时,是否需要清除全局中断(例如使用 cli(); 命令)以防止另一个 ISR 被执行或排队? 例如,如果正在执行外部中断 INT0,并且在执行时将再次触发同一外部中断。该中断是否会在第一个中断完成后排队等待执行? 如果在当前中断期间执行以下代码,是否会阻止中断排队,或者我是否需要清除中断队列寄存器? ISR(someISR_vect){ cli(); some cod... »

带有atmega32问题的avr中断库

当我使用此代码时,我对 atmega32 有疑问: #include "../HAL/led/Led.h" #define F_CPU 16000000UL #include "../MCAL/Interrupt/ExtIntREG.h" #include <avr/interrupt.h> int flag = 0; int main(void) { SET_BIT(MCU... »

c

与串行编码器的 Arduino 串行通信

我目前正在尝试通过串行与绝对编码器进行通信,如下图所示,它可以很好地响应我的请求,但我遇到的问题是 arduino 没有正确读取所有响应字节时间。来自编码器的位置请求是命令 0x64,它以 4 个字节进行响应,其中包括一个回波字节(图片中的 0x64)、两个数据字节(图片中的 0xAD 和 0x53)和一个错误字节(图片中的 0x00)。我目前正在做的是发送命令,读取 4 个字节,作为一种调试方式... »

连续读取后重置 ADC 控制标志 (ATMega2560)/Arduino

我正在使用带有电阻触摸屏的 ATMega2560(使用带有 analogRead 命令的 ADC)——我还使用带有 analogRead(NTC 温度传感器)的其他 ADC 引脚。这一切都很好。 我最近添加了一个功能,该功能要求我以已知的时间间隔获取 ADC 读数,并决定最好使用自动采样 - 我在网上找到了执行此操作的代码,它适用于所需的功能。< /p> 我的问题是,在进行连续采样之后,我无法让 ... »

c++

ATMega328P ADCSRA 寄存器问题

我想在 Microchip Studio 中设置我的 Arduino 的 ADC0 通道,但遇到了一个奇怪的问题。我想初始化 ADCSRA 寄存器中除 ADIF 之外的所有位。我通过在我的 main 中调用一个 init-Function 来做到这一点,该函数在外部源文件中定义。我尝试了几种方法来写这些位,结果总是一样的,所以假设我这样做很平淡 ADCSRA = 0xEF; 无论我如何写入这些位,... »

#asm #endasm 是什么意思?

我正在寻找制作自动光传感器的代码。然后我找到了如下代码。那么代码是什么意思呢? #asm in r30,mcucr cbr r30,__sm_mask sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30 sleep cbr r30, __se_bit out mcucr,r30 #endasm... »

如何在 Windows 上的 Atmel Studio 中包含 .a 文件?

我正在尝试使用 Windows 平台中的 Atmel Studio 将 BME680 气体传感器模块与 AVR 控制器(具体为 Atmega644p)连接。 BME680 带有多个用于配置的 .h、.c 文件和一个 .a(静态库)的示例函数。 .h 和 .c 文件也在调用静态库中的一些函数,因此我们需要包含所有可用的 .h、.c 和 .a 文件。 .a 文件对我来说是新的,经过基本的网络搜索后,我... »

在 atmega328p 的 TIMER1 中使用 ISR 创建 10 秒延迟

我正在尝试使用 atmega328p 中的 TIMER1(16 位)创建 10 秒延迟,我不知道是否已创建延迟,因为它需要比 10 秒更长的持续时间和预期输出(即未获得创建 pwm 波)。这里我创建了一个 1 秒的延迟并循环了 10 次,TIMER0 用于创建 pwm 波。 #include &lt;stdint.h&gt; #include &lt;avr/io.h&gt; #include &... »

c