问题标签 [dspic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
275 浏览

c - __builtin_dmaoffset() 的参数不是 dma 部分中对象的地址;

我有一个 dsPIC33 并使用 MPLAB X 对其进行编程。

我有三个文件:main.c ADC.c ADC.h

在 ADC.h 我做了一堆变量初始化如下:

然后在我的 main.c 文件中,我实现了 pinPairs 变量:

现在在我的 ADC.c 文件中出现了令人困惑的部分,变量 pinPair 在大坝内存中的某处清楚地对齐,因为如果我这样做:

编译器只是做它的事情,但如果我按照我的意图去做:

我得到错误:

但它虽然!

有谁知道这个错误是什么意思以及如何以我想要的方式使用变量?

0 投票
0 回答
46 浏览

c - 您是否曾经将 MAX44009 传感器与 uC 接口?

我最近尝试使用免费下载版本的 MikroC for dsPIC IDE 进行编程,MAX44009 传感器与 PIC24FJ64GB002 微控制器接口。传感器的勒克斯结果应显示在 LCD 上。代码编译没有失败,但它不工作。当我使用示波器查看 SDA 和 SCL 线时,它们总是保持在高位。但如果我转换:

浮点亮度-> int 亮度

FloatToStr(亮度,勒克斯)--> IntToString(亮度,勒克斯)

然后将代码加载到嵌入式设备上,示波器显示 I2C 通信正在进行,但 LCD 显示的值没有给出任何有价值的数据。勒克斯显示为 -17204,它永远不会改变。

我试图在 LCD 上显示“指数”并显示:-17204 我试图在 LCD 上显示“尾数”并显示:255

当我尝试调试代码时,当亮度被声明为浮点数时,出现错误:“模拟错误:PC 超出范围 [0x0011F0]”当我从浮点数更改为整数时;我可以调试代码,但是LCD上输出的值没用。

预期结果:工作 MAX44009 照度传感器代码,在 LCD 上显示照度值

模拟错误:PC 超出范围 [0x0011F0]

0 投票
1 回答
85 浏览

simulink - Simulink 采样时间与中断服务程序采样时间有何关系?

我有一个关于我正在构建的 simulink 模型的问题。我试图找出 P 的值,并且我需要一个闭环控制器。这适用于由 dspic 控制的 PFC。我知道 Simulink 中的采样时间决定了给定模块更新其值的速率。现在,回到微控制器。我在每 160 uS 触发的 ISR 内实现控制回路,进行计算并将结果(占空比)提供给 PWM 模块寄存器。我是否认为通过将模拟采样时间设置为 160uS,我应该得到与微控制器类似的行为?我还想知道 Simulink 上的采样时间如何影响闭环控制器的行为和/或稳定性。任何人都可以将我链接到探索 sujet 的论文。我找不到有关该主题的任何内容。对不起英语,

0 投票
1 回答
86 浏览

mikroc - 在 dsPIC 的 MircoC Pro 中如何设置看门狗定时器?

我需要将 FWDT 设置为开启 WDT,预分频器为 1,后分频器为 12。

我找不到任何关于如何以编程方式或任何方式执行此操作的文档。我可以从数据表中看到我需要设置 FWDT,但我看不到如何做到这一点。

我试过

但这给了我一个编译器错误“需要说明符”?

0 投票
0 回答
266 浏览

matlab - DSPIC 上的 IIR 滤波器实现

我正在使用 dsplib 库 dsPIC30F DSP 库在 dsPIC 上实现数字滤波器。

我使用 MATLAB 设计了我的过滤器。

从matlab dofumentation:

来自数据表:在有序集合 {b0[s], b1[s], a1[s], b2[s],a2[s]} 中排列的每二阶(双二次)部分有 5 个系数,0 ≤ s < 年代。

我已经按照建议实现了我的系数,见下文

当我通过滤波器发送一个 500hz 信号时,没有信号留下,实际上,所有信号都被衰减为零。

我确实预计 500hz 信号将几乎保持不变。我在设计过滤器时做错了什么?

0 投票
1 回答
58 浏览

firmware - dspic33ev 更改密码后不起作用

情况描述

在现有开发过程中更改了代码中的引脚号,并使用 MCC 进行了更改。

更改后设备不工作。

如下图所示,根据Micro Chip的描述,现有开发代码中使用MCC时没有生成main.c。在我的代码中,所有代码都再次生成。

我使用了第三方板,没有用于调试的端口。

在此处输入图像描述

我的电脑设置

操作系统:Ubuntu 18.04 LTS

IDE:MPLAB X IDE v5.30

插件:MPLAB@ 代码配置器 3.x

挖掘机工具:PICKIT 3

问题

我有两个问题。

  1. 是否有一个选项来检查该选项是否是现有的开发代码?找的时候没找到。

  2. 现有的IDE是5.25,但是开发IDE已经升级到5.30了。有区别吗?

资源

MPLAB® 代码配置器 (MCC):https ://microchipdeveloper.com/mplabx:mcc

PICkit™ 3 在线调试器:https ://www.microchip.com/Developmenttools/ProductDetails/PG164130

dsPIC33EV 5V CAN-LIN 入门工具包:https ://www.microchip.com/DevelopmentTools/ProductDetails/dm330018

0 投票
0 回答
156 浏览

c - 如何正确管理“__attribute__((__interrupt__, no_auto_psv)) ”?

我正在使用 MPLABX 编程 DSPIC33EP512GM710-I_PT TQFP 问题是我生成 2 个类似的中断 MPlabX 它在多个 .c 文件中写入相同的函数名称,因此编译器生成错误,因为创建了 2 个或更多具有相同名称的函数

这里有两种可能的解决方案:

解决方案1:更改中断名称,但我不知道是否会到达中断

解决方案 2:注释除一个中断函数之外的所有中断函数,并在该中断中请求寄存器以查看真正的中断是什么

注意:我看过帖子:__attribute__((__interrupt__, no_auto_psv)) 做什么? 还有手册:(https://www.mouser.com/datasheet/2/268/MPLAB_XC16_v1_10_C_Compiler_UG_52081-477561.pdf第 128 页)

但是我不知道如果在所有属性(( interrupt , no_auto_psv)) 代码中按顺序查看 micro 当到达中断时会发生什么

这是我对应于解决方案2的代码:

0 投票
0 回答
82 浏览

atomic - 使用 CPSNE 指令在 dsPIC33F 上进行比较和交换/交换

有没有更好的方法在 dsPIC33F 上实现“比较和交换”的互锁变体?

是否有完全避免 DISI 的变体,因为“[...] 此指令不会阻止优先级 7 中断和陷阱运行。”

0 投票
0 回答
302 浏览

c - 如何使用 Simulink Embedded Coder 修复未定义的引用 - dsPIC XC16

我想知道是否有人可以使用 XC16 帮助我解决我的“未定义参考”错误?

我将我的 dsPIC.h 文件包含到我的主 .h 文件中,以定义我的芯片寄存器。但是,当我尝试构建代码时,我在尝试写入 .c 文件的寄存器上收到“未定义引用”错误。

错误代码

通过搜索这个子,我发现这是一个链接器问题,通常会导致这种情况。我想知道我是否有任何明显的遗漏,或者是否有人对我哪里出错有任何经验!

任何帮助将不胜感激,谢谢!

以下是我在 Simulink 上从 MPLAB 模块获得的编译器和芯片选项:

dsPIC 代码生成配置

自定义代码导入配置

代码生成配置 2

编译器选项 1

编译器选项 2

Gitlab存储库:

https://gitlab.com/poley1/dspic_can.git

如果您需要将模型保存在任何其他 MATLAB 版本中,请告诉我,我会添加它!

我还添加了一个成功构建的构建日志,以显示我的链接器正在调用什么。我觉得是这样的:

感谢您的帮助!

0 投票
0 回答
74 浏览

c - XC16 反汇编 (uint32) & (uint32) 操作

我正在试图弄清楚一些 uint32 操作在 16 位 dsPIC 上需要多少个周期。我从按位 AND 开始并编写了以下程序:

查看反汇编以查看编译器为程序集提出的内容,我得到以下信息:

20 个周期,6 个 I/O 移动和 14 个内核。这对我来说看起来很疯狂。难道就不能这样做吗?

这将核心周期降至 2,这至少对我来说是合乎逻辑的(2 个 16 位宽的 AND)。我不明白的编译器是什么?