标签: avr

为 AVR 生成可变频率 PWM 信号

我想生成一个具有可变频率和固定占空比(50%)的 PWM 信号。频率应在 0-25KHz 之间变化。这是针对 ATMEGA32U4 微控制器的,我使用 Atmel Studio 用 C 语言编写它。我确实阅读了数据表,但我无法理解如何进行计算以及应该使用哪种模式。在浏览了不同的教程后,我发现最好使用 CTC 模式。

由于频率是变量,如何选择应使用哪个预分频器?我需要使用中断吗?对于如何设置这些定时器寄存器的任何帮助,我们将不胜感激。

avr pwm

2
推荐指数
1
解决办法
4465
查看次数

AVR gcc 版本 < gcc 发行版本 -- 为什么?

我注意到 AVR 的 gcc 落后于 gcc 的主要开发流程。例如,AVR8 的 gcc 在 Atmel Studio 7 和 Arduino 中为 4.9.2,AVR32 在 Atmel Studio 中为 4.4.7。同时,gcc 4.9.4 是当前的 4.9 版本,开发正在推动多个分支 5.x、6.x 和 7.x ( https://gcc.gnu.org/develop.html )。

更新(2019 年 11 月): Atmel Studio 和 Arduino 工具链现已升级至 gcc 5.4,但仍仅完全实现 C++11。


我担心的是,通过将 C++ 语言最近添加的功能与较旧的编译器一起使用,我可能会遇到早期实现问题。此外,gcc 中 AVR 支持的开发过程尚不清楚。

  • gcc + AVR 工具链中是否添加了 C++ 语言的新功能?
  • 我可以将它们与 Atmel Studio 或 Arduino IDE 一起使用吗?

c++ gcc avr atmelstudio

2
推荐指数
1
解决办法
2454
查看次数

C 中的 crc32 计算在 ATMEGA 和 Linux 机器上产生不同的结果

我正在从 ATMEGA644 向 Linux 机器发送消息,CRC32 例程在两台机器上给出不同的结果。CRC算法来自MIT

ATMEGA版本使用avr-gcc编译,Linux版本使用cc编译。Linux 编译会产生两个有关测试工具中 printf 参数大小的警告,但即使消除这些警告,结果也是相同的。

这是 crc32 例程,以及显示问题的 main() 测试工具:

#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
    
static const uint32_t crc32_tab[] = {
  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
  0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
  0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
  0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
  0x26d930ac, …
Run Code Online (Sandbox Code Playgroud)

c avr cross-compiling

2
推荐指数
1
解决办法
272
查看次数

为什么我在 proteus 中收到此错误:“PC=0x002A 处的操作码 0xFFFF 无效”

我用汇编语言为 avr atmega328P 编写了这段代码。它使用按钮打开和关闭 LED,但在 proteus 中我收到此错误:

PC=0x002A 处的无效操作码 0xFFFF

这是我的代码:

.INCLUDE "M328Pdef.inc"


ldi r16,HIGH(RAMEND)
out SPH, R16
ldi r16,LOW(RAMEND)
out SPL, R16

start:
ldi r16,0xFF
out DDRB,r16
ldi r17,0x00
out DDRD,r17
ldi r21,0x00
ldi r23,0x01

Forever:
in r20,PIND
cp r20,r21
BREQ ledon
cp r20,r23
BREQ ledoff
rjmp Forever


ledon:
ldi r22,0x01
out PORTB,r22 
ret

ledoff:
ldi r24,0x00
out PORTB,r24
ret

Run Code Online (Sandbox Code Playgroud)

有人有解决办法吗?

microcontroller assembly avr atmega32

2
推荐指数
1
解决办法
2634
查看次数

为什么函数按照定义的顺序执行,而不是按照 avr-c 中 int main() 调用的顺序执行?

我正在尝试学习 AVR C,并且正在修补 atmega328p 微控制器。我正在 Linux Mint 上使用 avr-gcc 工具链来编译我的代码并将其烧写到 Arduino 板上。

所以我尝试使用函数调用使两个 LED 灯闪烁。我制作了两个函数 - 一个用于连接到 Arduino 板的引脚 7 的闪烁 LED,另一个用于连接到 Arduino 板的引脚 13 的闪烁 LED。

这些功能正在运行,但是当我修改代码时,我注意到一个奇怪的行为。这些函数按照它们定义的顺序在 main() 之外被调用和执行;而不是按照它们从 内部调用的顺序int main()

这是我的代码

#include <avr/io.h>
#include <util/delay.h>

void blinkPin13() {
    while(1) {
        DDRB = DDRB | (1 << DDB5);
        PORTB = PORTB | (1 << PORTB5);
        _delay_ms(5000);
        PORTB = PORTB & ~(1 << PORTB5);
        _delay_ms(500);
    }
}

void blinkPin7() {
    while(1) {
        DDRD = DDRD | (1 << …
Run Code Online (Sandbox Code Playgroud)

c avr atmega avr-gcc

2
推荐指数
1
解决办法
195
查看次数

AVR微控制器

我想写MIPS汇编代码.atmel avr微控制器是否支持MIPS(就像PIC微控制器一样)或者我必须使用avr汇编.

assembly avr mips pic

1
推荐指数
1
解决办法
1047
查看次数

ATMEGA32 UART通信

我想在ATMEGA32中进行串行通信,我有一个问题:

在异步串行通信中,两者UBRRHUCSRC寄存器具有相同的位置 我不知道该位置将作为UBRRH哪个条件以及哪些条件,它将充当UCSRC.根据分配给这些寄存器的工作,我需要为每个寄存器提供不同的值

在数据表中,他们已经提到在URSEL两个寄存器之间使用位进行选择,但不知怎的,我没有得到它.

avr atmega serial-port atmel usart

1
推荐指数
1
解决办法
2095
查看次数

不同微控制器中的可变大小是否相同?

如果我们在PIC单片机中定义一个变量"整数",那么当我在Atmel微控制器中定义相同的"int"变量时,它的大小是否相同?或者它会有不同的尺寸?

这个问题是在嵌入式系统的采访中,答案应该是什么?

我有点困惑!

它取决于微控制器还是编程语言?在所有不同的编程语言中,相同的变量类型如整数是否相同?

这不是同一个问题,因为嵌入式控制器有点不同.

c embedded microcontroller avr microchip

1
推荐指数
1
解决办法
1913
查看次数

为什么我们需要创建一个中断向量表?

我在网上的一些教程中读到,中断的分支地址已经硬连线.他们为什么需要在引导程序中创建IVT?

linux arm avr interrupt bootloader

1
推荐指数
2
解决办法
1568
查看次数

从'const char*'类型reinterpret_cast到类型'__FlashStringHelper*'抛弃限定符

我想在AVR Studio中使用Adafruit_CC3000 arduino库.我已按照说明使用Adafruit arduino lib和AVR studio,所以我也可以使用其他AVR功能.但是当我编译代码时,我得到了相同的错误50次.

错误5 reinterpret_cast从类型'const char*'到类型'__FlashStringHelper*'抛出限定符E:\ arduino-1.0.1\libraries\Adafruit_CC3000\Adafruit_CC3000.cpp 183 3 ATmega32_WSClient_CC3K

我在网上搜索过这种错误.但我没理解这个问题.我请求让我明白这段代码中的哪一项是genratig这个错误?

c++ avr avr-studio6

1
推荐指数
1
解决办法
9779
查看次数