我有一个问题,我必须通过按下计算机上的按键来控制 ATMEGA 1280 的 PWM。我可以使用 ASCII 键并控制 PWM 来控制它。问题是他们要求使用箭头键,现在问题是箭头键没有 ASCII 值,而且我现在没有 ATMEGA 1280 可供使用。我不知道与从箭头键接收到的值相比什么值。有人有主意吗?
我如何从芯片制造商那里找到几个芯片的魔术地址列表?对它所支持的价值观的体面解释?
我甚至无法弄清楚要调用/搜索它的术语.
刚开始嵌入式编程.我需要设置各种各样的魔法.
通常我会遇到一些事情:
MOV BLKMGC 0x01
Run Code Online (Sandbox Code Playgroud)
要么
REO034 = 0x80; // stops all onboard leds, boot freebsd, makes coffee, do laundy.
// use 0x81 if you have more white clothes than color ones.
Run Code Online (Sandbox Code Playgroud)
有时会有评论解释他们在做什么.我主要记录了我在示例代码中找到的所有内容.用于msp430启动板的那些通常是由很多冗长的评论人写的,我甚至可以在芯片系列笔记上找到一些地址图,但几乎不是一个易于理解的列表.在试图完全理解这一点时,Arduinos上的芯片更常见.(授予,我仍然不确定如何搜索它:)
到目前为止我找到的最好的地方是我正在使用的芯片的头文件...但即便如此,请举例:
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // Stop Watch Dog Timer
// how 99% of msp430 programs start.
Run Code Online (Sandbox Code Playgroud)
现在头文件:
#define WDTCTL_ 0x0120 /* Watchdog Timer Control */
sfrw(WDTCTL, WDTCTL_);
/* The bit names have been prefixed with "WDT" */
#define WDTIS0 (0x0001) …Run Code Online (Sandbox Code Playgroud) 我已经有一段时间了解如何使用我的atmega32以快速pwm模式控制电机(控制其速度).我需要使用8位Timer0,因为我对其他计数器有其他用途.我想我知道如何为此任务初始化计时器:
void initial_io (void){
DDRC = 0xFF;
DDRB = 0xFF;
PORTA = (1<<PA4)|(1<<PA5);
TCCR0 = (1<<WGM01)|(1<<WGM00); // PWM mode : Fast PWM.
TCCR0 = (1<<CS02)|(1<<CS00); // PWM clock = CPU_Clock/1024
}
Run Code Online (Sandbox Code Playgroud)
但问题就来了.我根本不知道接下来该做什么,在我的主要做什么.
我的确切项目是用加速驾驶遥控车.因此,当我从汽车要求前进时,它必须从固定加速度的停止加速到最大速度.我不知道任何大会,所以如果你能帮助我,请在C中做.任何帮助将不胜感激.
我在网上找到了这部分代码,关于如何在atmega32上初始化USART。它适用于我的应用程序,但我想更好地理解它。
void USART_initial (void){
#define BAUD 9600 // We set the desired baud rate( here we set it at 9600bps)
#include <util/setbaud.h> //
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB = (1<<RXEN)|(1<<TXEN); // Enable transmitter/receiver.
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // Character size : 8 bit
Run Code Online (Sandbox Code Playgroud)
我的问题是 UBRRH 和 UBRRL 寄存器的确切用途是什么,为什么我需要使用它们?
非常感谢您提前
我有以下程序......
"编写一个程序,以一定的延迟连续切换PORTB的所有位.使用Timer0,正常模式,没有预分频器选项."
#include….
void T0Delay()
int main ()
DDRB= 0xFF;
while (1) {
PORTB=0x55;
T0Delay();
PORTB=0xAA;
T0Delay();
}
void T0Delay ()
{
TCNT0=0x20;
TCCR0=0x01;
while ((TIFR&01)==0);
TCCR0=0;
TIFR=0x01;
}
Run Code Online (Sandbox Code Playgroud)
在"TODelay()"函数中,"while((TIFR&01)== 0)"的功能是什么?为什么这个循环设置TCCR0 = 0和TIFR = 0x01?有人可以解释这段代码吗?
传输到主机时,I2C 从机是否允许 NACK?
从规范 (2.1) 看来,从机实际上无法在传输时向主机发送 NACK,即将数据从从机发送到主机。我已经在网上搜索过,但在这里找不到任何帮助。
为什么?我正在 AVR Atmega8 中实现一个 I2C 主设备。我想涵盖所有用例。我有一个用户注意到,当 I2C 从设备在 SLA+R 模式下发送 NACK 时,主设备会忽略它。
据我所知,发起 SLA+R 的主设备是唯一允许 NACK 数据包的一方。从设备必须继续在主时钟上发送数据包。但是,Arduino 线库中的一个片段暗示从设备可以向主设备发送 NACK。 https://github.com/arduino/Arduino/blob/master/libraries/Wire/utility/twi.c#L503
我有一个使用 Arduino Uno 的项目,我需要存储一个对于 EPROM 来说太大的字符**。
我目前正在尝试使用串口来完成此操作,但如果需要的话我也可以使用 AVRISP 程序员(不推荐)
到目前为止,我已经研究了 avr/boot.h API,但我不太确定如何正确使用它,或者它是否是正确的方法。
我需要帮助从 ATmega32a 微控制器中提取代码。我有关于硬件、寄存器、汇编的知识,但我什至不是嵌入式系统的专家。尽管我知道逆向工程不适合初学者,但我仍然想至少学习我在网上找不到的基本概念。
如何与芯片通信、提取代码并反编译?为此有哪些硬件/软件要求?(假设代码不受保护。)
提前致谢。
microcontroller decompiling atmega reverse-engineering arduino
我正在查看 ATmega2560 寄存器映射 ( iom2560.h) 的标头,其中包含寄存器的所有定义。例如:
#define PINA _SFR_IO8(0X00)
//Macro definition:
#define _SFR_IO8(io_addr) ((io_addr) + 0X20)
Run Code Online (Sandbox Code Playgroud)
所以PINA是一个8位的十六进制值,对应于8位单片机寄存器的地址。当我编写代码时,我只需输入以下代码即可更改寄存器内的值:
PINA |= (1 << 3); // Setting the third bit.
Run Code Online (Sandbox Code Playgroud)
问题是:为什么我可以_SFR_IO8(0X00)通过将值赋给PINA来写入寄存器值(“由他的地址指向”)?这不是指向的寄存器的地址吗?编译器如何工作?
预先非常感谢
我正在尝试学习 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)