Questions tagged «c»

C是命令式(过程式)系统实现语言。它被设计为使用相对简单的编译器进行编译,以提供对内存的低级访问,提供可有效映射到机器指令的语言构造,并且需要最少的运行时支持。因此,C对于以前使用汇编语言进行编码的许多应用程序很有用。来自http://en.wikipedia.org/wiki/C_(programming_language)

1
PID(微分)的实现
我正在实现PID控制器以进行电动机速度控制。我已经实现了PI控件,并且对我来说效果很好。在规范中,我被告知要通过对D部分使用以下公式来实现过滤技术: 现在,到目前为止,我所理解的是通常s代表"dx/dt"与误差变化率相对应的代表,但是在这里,我可以将其与反馈变化率联系起来。Td/N用于限制整体增益输出(希望我做对了)。现在用C代码来表示,我尝试了以下方法: s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback s = s*1000/sampleTime; //1000 is multiplied because sampleTime is in milliseconds D = (Td*s)/(1+(s*Td/N)); D = D*KP; //Kp is multiplied as per the standard pid equation. Old_Feedback = CurrentFeedback(); PID = P+I-D; 好吧,加上D的结果不是我所预期的。我只想知道我是否正确实现了D部分方程式?在我对微分的基本数学的理解上是否犯了任何错误? 注意:我不能随意更改重新计算kp,ti,td,因为它直接来自VFD。

2
如何创建安全的UART通信协议?
我想知道如何创建安全的UART / USB通信协议。我需要它来实现微控制器和PC之间的通信。我有大约10个命令,并认为我将为每个命令使用10个单独的确认命令。 交换应该像这样: PC通过UART发送唤醒命令 µC识别出PC已连接,并将其命令发送到PC,例如。 0x01 PC会执行要求的操作(一些硬件任务),并~0x01在完成后做出响应(我将数字取反以在两个数字之间创建更大的“距离”) µC知道它已发送0x01并且期望~0x01PC 发出请求。如果除了~0x01返回以外的内容,µC会知道出了点问题,并会发送新的请求或错误消息 µC发送的情况下,0x01PC可以理解0x02并发送~0x02回去,但是~0x01由于某些噪声而导致µC读取会非常糟糕。 就传输而言,这有多安全?或者我怎样才能使其更加安全?

2
通过串行实现MCU的控制命令
我希望将命令界面集成到一个项目中,该项目使我可以接受来自PC的命令。 这个想法是设备将执行其操作,但会收到命令,它将执行该命令。这与我设法找到的大多数示例不同,这只是一个等待串行数据的空闲设备。 因此,例如,一个控制LED并播放动画的设备。假设有3个预设动画,当它打开时,它始终播放数字1。在PC端,我将发送命令“播放预设2”,或“将颜色更改为绿色”,或向设备发送实时实时动画在LED上播放。 所以我的问题是我找不到关于这种“设计模式”的太多信息吗?我不知道从哪里开始。我最接近的是预制的arduino串行解析库。但是我正在寻找更多的C /非arduino /理论方法。 我已经研究了串行协议,但这仅仅是诸如SPI和I2C之类的东西,而不是实际上如何在软件中实现控制/命令接口的东西。 我还发现了有关HDLC的信息,尽管它似乎更多是一种标准/协议。一个类似的线程是 /programming/1445387/how-do-you-design-a-serial-command-protocol-for-an-embedded-system, 它具有一些非常好的信息,但同样可以做与协议/通信本身。 我试图找到如何编码/实现此功能以创建命令或控制能力。 我是否使用无限循环来监视和捕获传入命令的序列,并使用IF语句列表选择要执行的命令,但是当没有命令且系统应该正常运行时,或者如果它正常运行,会发生什么情况?错过命令? 中断驱动的状态机? 是否有官方名称可用于研究和查找示例? 编辑: 对于任何有相同问题的人,我在研究时都发现了一个非常不错的示例, http://www.adnbr.co.uk/articles/parsing-simple-usart-commands

3
L3G4200D随机峰值
我已经在有关L3G4200D陀螺仪的问题上搜索了一下这个论坛,但没有看到提到的问题,但是我在其他论坛上看到了其他人在谈论它。当陀螺仪静止时,我在输出中看到一个奇怪的大值。不幸的是,似乎没有人能够回答为什么会这样,所以我想问一下 因此,我正在使用i2c以400kHz(快速模式)从陀螺仪收集数据,并使用多字节读取(一次六个字节)收集陀螺仪数据。以100Hz采样(也尝试了最高800Hz),还尝试了在不同值处打开和关闭滤波。我没有使用中断引脚,而是在GYRCTRLREG4中使用了“块数据更新”属性,以便在读取LSB和MSB之前都不会输出数据。满2000dps,对FIFO没做任何事情。如果有帮助,我可以发布确切的寄存器值,但是图大多数人都没有数据手册。 下图显示了我的问题。输出的数据良好,据我所知正确计算,并且一般噪声是可以接受的。但是后来我注意到,当设备静止时,这些烦人的“斑点”会随机出现。如果我将其静置几秒钟,我将获得其中一个峰值,始终等于250-255(转换后约为18,使用'(输出* 70)/ 1000')。正如我所说,这些峰值是随机的,可以出现在任何平面中(在下图中,您可以看到X平面中的第一个峰值,Y方向中的第二个峰值),始终在相同的值附近,以及一个,两个或全部三个可以同时发生。大值仅用于单个样本,然后恢复正常。 如前所述,我在另一个线程中看到应该在GYRCTRLREG4中使用块数据等待功能,但没有任何变化。我将问题缩小到MSB为零或更高(即正数)时,然后将MSB和LSB合并时,我得到了这些大数。例如,我抓取X平面所需的两个字节,在LSB中得到-6,在MSB中得到0,将它们组合起来得到250,然后转换为(250 * 70)/ 1000 = 17.5 dps(即对于固定/错误而言太大)。在同一样本中,Y平面的两个字节是-3 LSB和-1 MSN,将它们组合在一起得到-3,而转换得到-0.21(即,期望/正确)。 几天来一直在解决这个问题,我的磁力计也看到了一些随机峰值,所以我想这是我通过i2c读取设备错误吗? 任何建议或尝试的事情都非常欢迎!

3
从PIC18s上的I2C开始
对于一个项目,我希望三个PIC(两个从PIC18F4620,一个主PIC18F46K22)通过I2C总线进行通信。稍后,可以添加更多从设备(如EEP​​ROM,SRAM等)。我正在使用C18编译器在C中为这些PIC编写代码。我在Internet上浏览了很多东西,但是找不到用于处理(M)SSP外设的库。我已经在I2C模式下阅读了(M)SSP外设上的这两个PIC的数据表,但找不到如何与总线接口。 所以我需要主库和从库。 您有什么推荐的吗?你在某处有这样的图书馆吗?它是内置在编译器中的吗?如果是,在哪里?网络上有什么好的教程吗?

5
AVR的C代码强制转换有什么问题?
我定义了两个变量: uint8_t a[2]; uint16_t b; 接下来,我想a用作类型的变量uint16_t,例如 b = (uint16_t)a; 但这是错误的!我的程序无法正确使用此类代码。当我替换b为uint8_t b[2]并使用元素操作时,一切都OK 。 为什么?
8 avr  c 

5
如何连接PIC单片机?
我是PIC微控制器和电气工程领域的新手,所以请放轻松:) 无论如何,我设法对PIC 16f627进行了编程,以便在按下按钮(触发按钮)时打开三个LED,并在另一个按钮被按下时启动关闭序列(基本上每个LED彼此之间以5秒钟的延迟关断)。按下(重置按钮)。我已经在Velleman的K8048 PIC编程器/实验板上进行了测试。引脚RA0和RA2分别是触发按钮和复位按钮的输入,而引脚RB0,RB1和RB2分别是LED的输出引脚。 使用实验板很棒,但是我想将其移至实际电路。问题是我不知道从哪里开始。我已经购买了3个LED(每个3.3伏),一些按钮和电线,并构造了以下电路: (对不起的原理图很抱歉) 在我构建的电路中,我首先进行测试以查看LED是否可以使用3个1.5伏AA电池,并且它们可以正常工作,因此我认为不需要电阻器。 但是,这不起作用,我完全迷失了。供参考,这是我的PIC代码。它使用MikroC用C编写。它可以在实验板上使用,所以我认为这不是问题 void main() { TRISB.RB0 = 0; TRISB.RB1 = 0; TRISB.RB2 = 0; PORTB.RB0 = 0; PORTB.RB1 = 0; PORTB.RB2 = 0; CMCON = 0x07; TRISA = 255; for(;;){ if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == …

3
#if 0有什么作用
今天,我开始使用MPLAB X对PIC进行编程,并找到了一个代码模板,其中包含多个文件和可填充代码的位置。在我拥有包含我的代码的单个文件之前。在此模板中,我应将配置位放在其中,其中包含以下文本: /* TODO Fill in your config bits here. Remove #if 0 to embed config words. */ #if 0 /* General syntax for configuration word 1 - Check your device .h file for an up to date listing of available macros.*/ __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & …

1
如何为AVR Atmega328p创建静态库?
我正在尝试创建一个类似于C语言中的Arduino的库。 我曾经尝试过,尽管我丢失了代码,但我记得只是简单地获取了对未定义引用的加载,这些未定义引用是在头文件和包含所有目标文件的库中指定的(由avr-objdump检查)。 我想知道我应该如何编译该库(示例makefile)以及如何将程序编译到该库。另外,我是否需要针对每种AVR和时钟速度重新编译该库,或者是否可以解决? 如果您需要更多信息,请询问。 谢谢 编辑:示例(不起作用) 程式 #include "test.h" int main(void) { test_function(); } 测试 #include "test.h" void test_function() { int i; i++; } 测试 #ifndef __TEST_H_ #define __TEST_H_ void test_function(void); #endif
8 avr  c  library  avr-gcc 

1
使用74HC154绘制8x32 LED矩阵
如何将图案发送到8x32 LED矩阵中?我将AT89S52微控制器与74HC154 4-16线解码器配合使用,并使用Keil IDE在C语言中进行编程。我已经完成了垂直扫描,但是在下一步中遇到了麻烦。如果需要,我将提供原理图。电路与下面包含的电路相同,仅不使用74HC138,公共阳极矩阵,而是使用UN2803作为驱动器,不使用内存 端口1是列,端口2是行...代码: row = 0xFF; //for (j=0x01; j< 0x08; j<<=1) { /* scan left to right */ for (j=0x00; j<=0x0F; j++) { E1=0; E2=0; P1 = j; P2 = row; /* Output to LED Port */ for (i = 0; i < 100; i++) { /* Delay …

1
为Arduino创建库时我应该知道什么?
我想到,除了当前的问题之外,我还应该问:“为Arduino创建库时我应该知道什么?” 首先,我在做什么: 我使用Eclipse作为编辑器,并用C ++编写代码。我编写了一个简单的Arduino应用程序,其中包括我的头文件,并且正在通过错误进行工作。 第一个问题:我该如何“清洁”?我看到了一些我认为已解决的错误,几乎就像头文件已被缓存一样。(是的,很可能我做一些愚蠢的事[ 编辑:我是],但我还是想知道如何清理库,不知道那里的对象文件)。 其次:我应该注意哪些约定?我没有像我想的那样使用Arduino,并且用C ++编程感觉很好,但是我知道这些库的目的是让用户保持美观和简单。函数名称是否有约定?创建常量(看起来全局命名空间被#defines污染了)?等等。 最后,还有什么我应该知道的吗? 我应该提一下,我已经看过Arduino Library Tutorial了,虽然很好,但是走得并不远。我还偷看了系统上安装的某些库。
8 arduino  library  c++  c 

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.