- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些代码应该读取几个 ADC 引脚的值,每次围绕换向器循环。
static uint16_t adc0;
static uint16_t adc1;
void init(void) {
...
hw_configure_adcs();
...
}
void loop(void) {
...
adc0 = hw_read_adc(0);
adc1 = hw_read_adc(1);
...
}
void hw_configure_adcs(void) {
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);
}
uint16_t hw_read_adc(uint8_t n) {
ADMUX = (1<<REFS0) | (n & 0x07);
ADCSRA |= (1<<ADSC); // start conversion
uint16_t count;
for (count = 0; !(ADCSRA & (1<<ADIF)); count++); // wait for conversion to complete
// ADCSRA |= (1<<ADIF); // tried with and without this
return (ADCH << 8) | ADCL; // return ADC value
}
我看到的很奇怪:adc0 和 adc1 的值设置为相同值并且永远不会改变,直到 AVR 芯片重新启动/刷新。
(0.71V时值为0x00d1,1.00V时值为0x0128,似乎合理。)
我试过:
hw_read_adc()
返回 count
而不是 ADC 值:这将返回 0x34 和 0x38 之间的不同数字,这两个 ADC 不同并且会随着时间不断变化。 从这些测试中,我推断正在读取 ADC,但我错过了一些“清除 ADCH 和 ADCL 并让它们准备好接受新读取”的步骤。
我重新阅读了 http://www.atmel.com/images/Atmel-8272-8-bit-AVR-microcontroller-ATmega164A_PA-324A_PA-644A_PA-1284_P_datasheet.pdf 的第 23 节很多次,但显然忽略了一些重要的事情。
最佳答案
经过多次谷歌搜索,我发现:http://www.avrfreaks.net/forum/adc-only-happens-once-reset
问题是 return (ADCH << 8) | ADCL;
被编译以便它首先读取高位寄存器(如您所料)。
数据表的第 252 页说:“否则,必须先读取 ADCL,然后再读取 ADCH”。
将我的代码更改为 return ADC
解决了问题。
我对发生的事情的猜测是:
关于c - ADC 仅在 ATMEGA324PA 上工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653325/
为什么不是同一个内存地址?这是 C 语言。 int *pa; int a = 80; pa = &a; //save memory address from a to pa *p
在 C++ 中,以下两种动态对象创建之间的确切区别是什么: A* pA = new A; A* pA = new A(); 我做了一些测试,但似乎在这两种情况下,都调用了默认构造函数,并且只调用了它。
我有一些代码主要用 C 语言编写,可以在 HP-UX PA-RISC、HP-UX Itanium 和 Solaris SPARC 平台上编译。 到目前为止,我的 PA-RISC 机器已停产,这是不真实
我已经问过question关于披萨外卖店的简单容错软实时 Web 应用程序。 我在那里得到了非常好的评论和答案,但我不同意它是一个真正的网络服务。它不是一个网络服务,而是一个实时系统,用于接受客户的订
1.业务实践背景: 声明式UI开发框架(ArkUI),没有WebView组件,如何从ArkUI从发起调用Java PA从Java的PA跳转到Java的FA,使用Java FA的WebView组件?
我正在一个项目中查看 Elixir 代码,其中启动脚本是: elixir -pa _build/ -S mix run -e "MyApp" --no-deps-check --no-compile
我在使用 pyArrow 将 pandas.DF 转换为 parquet 时遇到此错误: ArrowInvalid('Error converting from Python objects to I
我正在阅读Deep Learning Book并对这个“未定义的标识符”感到困惑(图像中的 Pa,第 4 行)。它出现在第 208 页。你能告诉我 Pa() 到底是什么意思吗?只是一个提示,以便我可以
我从下面代码的输出中得到的是*(pa-1)=5:为什么这样? #include using namespace std; int main(){ int a[5]={1,2,3,4,5};
考虑下面的程序 #include using namespace std; class ClassA { public: virtual ~ClassA(){}; virtual
我是一名软件工程师,目前正在开发另一款支付应用程序(我的第三个),该应用程序必须符合 PCI PA-DSS 合规性。我正在重新检查 PA-DSS 文档,我想知道过去我是否在应用程序的安全性方面过度劳累
我的 pandas 数据框中有一个列表列以及 int、string 等列。我能够转换字符串、日期、整数和时间戳列。我想知道如何将 array() 应用于列表列。 fields = [ pa.f
是否可以从我编写的驱动程序代码中对内核空间 VA 进行简单的页面遍历转换?我正在尝试使用 virt_to_phys(),但翻译对我来说看起来不正确。还有其他 API 可以做到这一点吗? 最佳答案 vi
当编译我的模块时,我收到这个警告: # make modules CC [M] /jriskhome/repos/module/my_module.o /jriskhome/repos/modu
" in HTML?(在HTML中“
以下示例中的第一行代码是什么。我看到一个youtube用户写下面的代码,它显示在cssbattle挑战的设计。我也试过,它的作品。但我从来没有见过它在任何HTML教程之前,我在谷歌上搜索它,但它只显示
这是我的 .erlang 文件: code:add_path("/home/root/projects/myapp/ebin"). code:add_path("/home/root/projects
我已经运行 OWASP ZAP 工具来识别我使用 angular 10 和 spring-boot 开发的应用程序中的漏洞问题。我遇到了以下 URL 的Missing Anti-clickjackin
这是我的 .erlang 文件: code:add_path("/home/root/projects/myapp/ebin"). code:add_path("/home/root/projects
我已经运行 OWASP ZAP 工具来识别我使用 angular 10 和 spring-boot 开发的应用程序中的漏洞问题。我遇到了以下 URL 的Missing Anti-clickjackin
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我是一名优秀的程序员,十分优秀!