标签: microcontroller

Gadzooks!建筑比比皆是!寻找嵌入式处理器/控制器分类

我正在寻找嵌入式处理器的分类.哪些处理器属于哪个系列?谁下了谁?

这里有没有人知道描述它的简单文章?

embedded microcontroller taxonomy microprocessors

5
推荐指数
1
解决办法
168
查看次数

TickGetDiv256()如何运作?

嗨,我想知道是否有人可以举例说明该TickGetDiv256();功能是如何 工作的.它来自Tick.c中的Microchip

我试图计算2个小时,如果满载发动机将停止.

我可以使用" threshold = tick + TICKS_PER_SECOND * 60;"功能.但我不知道它是否将是很好的用于这个的时间:threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

亲切的问候

c microcontroller microchip

5
推荐指数
1
解决办法
297
查看次数

如何将字节数组转换为int数组?

我正在使用dsPic33F(16位微控制器);

  • 如何转换char[]int[]使用C++ 将每两个字符变成一个int?
  • 和逆操作?

c microcontroller

5
推荐指数
1
解决办法
1万
查看次数

在飞思卡尔iMX31上,如何将SDRAM地址转换为CPU地址?

我是iMX31和嵌入式系统的新手,请帮助我理解从SDRAM地址到ARM CPU地址的转换,特别是在SDRAM控制器的"特殊"命令模式下.

这是我有问题的SDRAM初始化代码:

    ldr r0, ESDCTL_BASE_W
    mov r2, #SDRAM_BASE_ADDR /* 0x80000000 */

    ldr r1, =0x92100000 /* Precharge */
    str r1, [r0]
    ldr r1, =0x0
    ldr r12, =0x80000F00
    str r1, [r12]

    ldr r1, =0xA2100000 /* Auto-refresh */
    str r1, [r0]
    ldr r1, =0x0
    str r1, [r2]

    ldr r1, SDRAM_0xB2100000 /* Load Mode Register */
    str r1, [r0]
    ldr r1, =0x0
    strb r1, [r2, #0x33]

    ldr r1, =0xFF
    ldr r12, =0x81000000
Run Code Online (Sandbox Code Playgroud)

我的RAM是Micron LPDDR MT46H64M32LF,这段代码很好地遵循初始化程序,但在PRECHARGE步骤中,地址0x80000F00来自何处?

从iMX31参考手册中我了解到,在PRECHARGE …

embedded microcontroller assembly arm

5
推荐指数
0
解决办法
470
查看次数

DDS插值 - 8位Atmel AVR ASM至12位DAC

我刚刚在采用ASM的Atmel AVR上完成了一个DDS项目,并得出结论,8位查找表和8位DAC在低频时会产生太多的量化失真; 由于缺乏更好的措辞,我在示波器上得到一个带有梯形效果的正弦波.

显然,如果我用大LPF平滑波形,我在高频时会出现振幅问题.

理论上,从8位升级到12位DAC并采用4个最低有效位的插值应该可以让我将滤波器的截止点提高到足够大的数量,以缓解更高频率下波形振幅的问题.我的问题是,我不知道如何做到这一点,或者是否有一种更简单的方法来删除拉链效果..也许12位查找表?

到目前为止,我已经创建了一个无限循环,每次循环完成一个循环时,就会根据与查找表相关的指针位置向DAC发送一个值.这是我感到困惑的地方.我已经阅读了大量关于此的信息,但仍然没有找到一个有效的例子.如果我有一个无限循环,我应该如何在表查找值之间填充插值?关于我能想到的最好的事情是(a + b)/ 2; 我可以实现这个并获得一个额外的位或相当于512点的查找表,但我想认为有一种更简单的方法可以提供更好的结果.我不知道C或如何使用它,但如果它是谨慎的我会试一试.

目前,我的时钟是1MHZ,如果有必要,我可能会达到16MHZ.

以下是我的代码示例:

; 将sinewave输出设置为默认值

    ldi     ZH, High(sine*2); setup Z pointer hi
    ldi     ZL, Low(sine*2) ; setup Z pointer lo
Run Code Online (Sandbox Code Playgroud)

; 清除累加器

    clr     r29             ; clear accumulator
Run Code Online (Sandbox Code Playgroud)

; 设置加法器寄存器

    ldi     r24,0x50        ; Fine adder value change register
    ldi     r25,0x08        ; Middle adder value change register
    ldi     r26,0x00        ; Coarse adder value change register
Run Code Online (Sandbox Code Playgroud)

LOOP1:

    add     r28,r24         ; 1  Adder values carry over to higher registers.  Higher registers raise freq. in larger …
Run Code Online (Sandbox Code Playgroud)

c embedded microcontroller assembly avr

5
推荐指数
1
解决办法
1115
查看次数

无法保存波特率设置?

我的GSM调制解调器默认设置为115200波特率.我连接了PIC18微控制器,波特率为19200.我将调制解调器波特率更改为19200然后保存了设置,但每次重置调制解调器时,波特率都会变回115200.

这些是我使用的以下命令.

改变波特率

AT+IPR=19200

然后我重新打开了具有19200波特率的超级终端(Putty)以保存当前设置.

保存设置

AT&W

但是在重置调制解调器后,波特率会变回115200.我使用的是M6000 GSM/GPS模块(Tk115 Gps Tracker),但没有太多的支持,这里有数据表供参考.

我正确保存设置吗?

我正考虑在PIC18F87j11上将波特率更改为115200,但使用当前的8 mhz振荡器是不可能的.任何反馈都会有所帮助.

谢谢!

microcontroller command gsm serial-port at-command

5
推荐指数
1
解决办法
4016
查看次数

如何配置8051引脚作为输入/输出?

在pic微控制器中,TRIS寄存器确定端口是作为输入还是输出,PORT寄存器将确定内容,应该写入(在输出的情况下)或读取(在输入的情况下).

但是在8051中没有任何这种TRIS寄存器.要将寄存器配置为输入/输出,必须写入同一寄存器并写入/读取必须再次使用相同寄存器的数据.我这是对的吗?如果是,那么请解释一下怎么可能?如果没有,那么请解释正确的理论.

microcontroller input pic 8051 output

5
推荐指数
1
解决办法
7135
查看次数

全局变量与ARM C中main中声明的变量之间的差异

我一直在试图用CKeil写我的一些测试代码TM4C123G,它使用的ARM微控制器.我不知道ARM assembly,但我已经为AVR microcontroller过去编写了一些汇编代码.

存储变量的值在哪里,如果我们在C中声明一个变量global,而不是声明它main

关于是否应该声明一个变量global而不是main(在为微控制器编写C时)是否有一般指导原则?

c microcontroller arm global keil

5
推荐指数
1
解决办法
3031
查看次数

如何在嵌入式系统中使用机器学习算法?

我正在做一个项目,使用带有加速度计的ARM cortex-m0微控制器(Freedom - KL25Z)来检测(分类)人类活动.我打算使用机器学习来预测用户的活动.

问题是,cortex-m0不能处理训练或预测算法,所以我可能不得不收集数据,在我的计算机上训练然后以某种方式嵌入它,我真的不知道该怎么做.

我在互联网上看到一些帖子说你可以生成一个权重矩阵并将其嵌入到微控制器中,因此根据你为这个函数提供的数据预测某些东西是一个简单的函数.这是正确的做法吗?

无论如何我的问题是,如何在微控制器中嵌入分类算法?

我希望你们能帮助我并提供一些指导,我有点迷失在这里.

先感谢您.

embedded microcontroller machine-learning scikit-learn

5
推荐指数
1
解决办法
9232
查看次数

如何使用OpenOCD ping芯片(检测是否连接了芯片)

1.问题解释

我正在尝试将OpenOCD用于不常见的事情。除了连接芯片,我只想检测芯片。
我想到的过程将如下所示:

  1. 使用参数作为探针的配置文件(例如stlink.cfg)启动OpenOCD -f。因此,OpenOCD知道要使用哪种探针,但不知道它将找到哪种芯片。

  2. OpenOCD检测到芯片并以某种方式报告该错误(例如,向stdout写一些东西)。如果可能的话,此操作不应对芯片造成干扰(例如将其重置)。

  3. OpenOCD关闭。

以下是有关该过程的更多说明:

注意1:如果OpenOCD没有达到服务器状态(我需要设置Telnet或GDB客户端才能与其进行交互),那将是很好的。我很乐意以更方便的方式获得芯片检测报告,例如在stdout通道上获取芯片信息。

注2:检测不应对芯片造成干扰。但是,如果OpenOCD找不到任何东西,我希望有一种备份方法,其中OpenOCD尝试更积极地查找芯片(例如按住nRST销)。如果需要,我可以自己调用其他方法(因此,无需OpenOCD自动执行此操作)。

注意3:首先,我将仅在具有STLinkV2或STLinkV3探针的STM32芯片上应用此“芯片检测”功能,然后再将其应用于其他探针和芯片。

注4:某些板仅具有SWD连接(无JTAG)。

注意5:我正在Windows 10计算机上工作,并从https://www.playembedded.org/blog/download/下载了最新的OpenOCD版本(版本0.10.0_dev00921,于2019年7月6日构建)。

 

2.到目前为止我尝试过的

Tommy Murphy先生向我介绍了OpenOCD参考手册中的10.7节(请参阅http://openocd.org/doc/pdf/openocd.pdf)。我已经阅读了本节,并观察了以下示例:

# openocd.cfg file
# -----------------
    source [find interface/olimex-arm-usb-tiny-h.cfg]
    reset_config trst_and_srst
    jtag_rclk 8
Run Code Online (Sandbox Code Playgroud)

因为我的芯片通过STLink探针连接并且使用SWD传输协议(而不是JTAG),所以我对该示例进行了一些修改:

# openocd.cfg file
# -----------------
    source [find interface/stlink.cfg]
    transport select hla_swd
    reset_config srst_only
    adapter_khz 480
Run Code Online (Sandbox Code Playgroud)

我将NUCLEO_F303K8板连接到PC进行此测试。然后,在控制台中发出以下命令:

> openocd -s "C:\...\scripts" …

embedded microcontroller jtag openocd swd

5
推荐指数
1
解决办法
569
查看次数