Questions tagged «mplab»

2
编译代码以从外部RAM运行
我正在考虑基于PIC18F85J5的简约游戏系统的设计。我设计的一部分是可以从SD卡加载游戏,而无需重新编程芯片或刷新程序存储器。我之所以选择该芯片,是因为它具有外部存储器接口,使我可以从外部SRAM运行代码。 基本思想是内部程序存储器将包含用于浏览sd卡的接口,并且一旦用户选择了程序,它将从sd卡复制一个十六进制文件到外部ram,然后将执行跳转到外部ram空间。 内部程序存储器还将具有用于图形,控制器输入和其他各种实用程序的各种库。 我非常有信心,我知道如何使内部固件正常工作。问题是创建要从外部RAM运行的程序。它感觉与以常规图片为目标并不相同,它需要了解内部存储器中可用的库函数,而不是重新编译它们,而仅链接到它们。它还需要在内部闪存的32k之后开始使用地址,而不是从零开始。是否有使用这些类型的约束来编译程序的好方法? 我正在使用MPLab IDE,但对它或如何进行这种自定义并不十分熟悉。
13 pic  compiler  mplab 

5
PIC32 vs dsPIC vs ARM与AVR,无论如何,当我们使用C语言编程时,体系结构是否重要?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 我们目前正在使用32位PIC32单片机。它可以很好地满足我们的需求,但是我们也在探索其他微控制器,这些微控制器可以更好地适应我们的需求+我们还有其他项目正在选择MCU。为了这个目的,我们选择了基于ARM的SAM DA微控制器,它是相同的32位但基于ARM(在工业上比PIC32更流行)。 现在,对于PIC32,我们使用MPLAB,而对于ARM cortex-M0,我们将使用Atmel Studio。我们将在两个平台中使用C语言。我担心的是,我们将使用两个(来自同一公司的)32位微控制器,但它们的体系结构不同。这将要求我们学习两种不同的设备,并会增加“学习曲线” +交付时间。但是另一方面,我也认为,既然我们将在两种情况下都使用C语言,那么ARM的学习曲线就不应该被人听到,也值得探索该处理器。 我的主要问题是,当我们使用C语言编程时,该体系结构有多大的差异,因为它提供了micrcontroller内部的抽象。而什么是MPLAP和爱特梅尔Studio中的主要区别,考虑到C语言编程。

1
dsPIC芯片以正常速度的一小部分运行
我有两个PCB。一个带有dsPIC30F6012a,另一个带有dsPIC30F6015。两者均使用PICkit 3在MPLAB X中的独立HEX项目中进行编程,在此之前,这两种固件已轻松应用于数十个单元。目前,当从除一台以外的所有PC进行编程时,固件都可以正常运行。在昨天开始的那台PC上,这两个固件均编程无明显错误,但以正常速度的约1/20执行。在昨天之前,那台PC还对这些板进行了编程,没有问题。 初始屏幕花了2分钟而不是5秒,指示灯闪烁得非常慢,但除此之外,一切都正常运行。几乎好像振荡器配置位已被更改,但我不知道MPLAB X中可用于独立项目的任何地方。 因此,在同一PCB设计的多个实例上,在两个不同芯片上的两个不同固件,以不同的速度运行,仅取决于用于对其进行编程的PC。在“性能良好”的PC上对慢速板进行重新编程可解决此问题;在“坏”的PC上对该板进行重新编程即可将其重新带回。我所能想到的是,在那台PC上有人按下了“使其缓慢运行”按钮,但我找不到任何贴有该标签的东西。(不过,我们的技术很有创造力。)我目前正在卸载MPLAB X,擦除用户设置,然后重新安装更新的版本。(从1.3到1.6。)即使修复了问题,我仍然不满意所发生的事情,仍然感到不高兴。有人对此问题有见识吗?

2
需要一些帮助来了解PIC内存映射
一些背景。我将MPLABx与PicKit2结合使用来对不同类型的图片进行编程。目前是16F887。我尝试坚持使用高科技PICC Lite工具链,但对某些组件的组装方式越来越不满意。相对较快的操作(考虑8Mhz的500ns指令周期)最多需要20us才能完成。因此,我开始插入自己的ASM代码来处理它。 但是,我很难理解第20页的数据表中提供的内存映射。 程序存储器从0005h开始。但是,第23页显示了专用寄存器的文件地址,例如端口A。端口A的地址显示为“ 05h”。 我很困惑如何区分存储位置0005h和位于05h的专用寄存器。如何引用专用寄存器? 我已经为较旧的HC11芯片完成了相当广泛的汇编程序编程,但这是我第一次涉足PIC asm编码。在这里的任何帮助,将不胜感激。

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读取设备错误吗? 任何建议或尝试的事情都非常欢迎!
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.