kuangye0532

    1. 不好意思,我上次回复的因为格式不对,所以没有传上来,我已经把图发到你的邮箱里了。
    2. 我这里有一个多少复杂一点的PCB原理图,也差不多啦,希望有用。(附件中)
    3. 关于KS8695X问题请教 6/5751 嵌入式系统 2007-04-10
      没有用过这个片子,但是一般的烧写方式是先把BOOTLOADER烧写到FLASH中,然后再用BOOTLOADER支持的烧写方式(USB。网络)烧写别的代码。如操作系统什么的。对于上拉问题,一般的芯片有自己的要求,要看下资料。
    4. 虚心请教 tap point 6/10595 电源技术 2007-02-05
      应该是“接触点”的意思,说滑动变阻器的接触点吧。
    5. labview是否能与自制的数据采集卡连接? 2/12121 DSP 与 ARM 处理器 2007-01-23
      [转帖]在LabVIEW中驱动数据采集卡的三种方法(论文) 在LabVIEW中驱动数据采集卡的三种方法 熊焕庭 (五邑大学 机电工程系,广东 江门 529020) 摘要 : 介绍在虚拟仪器软件开发平台LabVIEW中,驱动通用数据采集卡的三种方法,并介绍两个所开发的测试系统。 关键词:虚拟仪器,LabVIEW,数据采集 中图分类号:TP311.52 文献标识码:B 文章编号: Three Methods For Driving Data Acquisition Card in LabVIEWXiong Huanting ( Wuyi University,Jiangmen,Guangdong 529020,China) Abstract: The paper introduces three methods about developing driver for data acquisition card in LabVIEW and two exsamples of measurement system developed based on these methods. Key word: Virtual instrumens, LabVIEW , data acquisition 1 引言 近年来,面向仪器的软件开发平台,如美国NI公司LabVIEW的成熟和商业化,使用者在配有专用或通用插卡式硬件和软件开发平台的个人计算机上,可按自己的需求,设计和组建各种测试分析仪器和测控系统。由于LabVIEW提供的是一种适应工程技术人员思维习惯的图形化编程语言,图形界面丰富,内含大量分析处理子程序,使用十分方便,个人仪器发展到了使用者也能设计,开发的新阶段。 鉴于是工程技术人员自己编制,调用软件来开发仪器功能,软件成了仪器的关键。故人们也称这类个人仪器为虚拟仪器,称这种主要由使用者自己设计,制造仪器的技术为虚拟仪器技术(Virtual Instrumentation Technology)。使用虚拟仪器技术,开发周期短、仪器成本低、界面友好、使用方便、可靠性高, 可赋于检测仪初步智能,能共享PC机丰富的软硬件资源,是当前仪器业发展的一个重要方面。 虚拟仪器的典型形式是在台式微机系统主板扩展槽中插入各类数据采集插卡,与微机外被测信号或仪器相连,组成测试与控制系统。但NI公司出售的,直接支持LabVIEW的插卡价格十分昂贵,严重限制着人们用LabVIEW来开发各种虚拟仪器系统。在LabVIEW中如何驱动其它低价位的数据采集插卡,成为了国内许多使用者面临的关键问题。 2 三种在LabVIEW中使用国产数据采集插卡的方法 笔者将近年来工程应用中总结出的三种在LabVIEW中驱动通用数据采集插卡的方法介绍如下。介绍中,以某市售8通道12位A/D插卡为例。设插卡基地址为base=0x100,在C语言中,选择信号通道ch的指令是 _outp(base,ch),启动A/D的指令是_inp(base),采样量化后的12位二进制数的高4位存于base+2中,低8位存于base+3中。 2.1 直接用LabVIEW的 In Port , Out Port 图标编程 LabVIEW的Functions模板内Adevanced \ Memory中的In Port 、Out Port 图标,与_inp、_outp功能相同,因此可用它们画程序方框图, 设计该A/D插卡的驱动程序。N个通道扫描,各采集n点数据的LabVIEW程序方框图如图1所示。图中用LabVIEW的计时图标控制扫描速率。 显然,若采样速率要求较低,这不失为最方便、直观的方法,而且可随画随改。 2.2 用LabVIEW的CIN图标生成A/D插卡驱动程序的子VI LabVIEW的Functions模板内Adevanced 中有一个CIN(Code Interface Node)图标,用来在LabVIEW程序方框图中直接调其它编程语言(如VC)写的代码。现以生成一个对指定的通道采集n点数据的LabVIEW子VI为例,其主要步骤为: (1) 在LabVIEW下,点出CIN图标,拖大并联接入两个控件和一个显件,如图2所示。其中控件用于选择模拟信号输入通道和选择数据采集点数,数组显件显示所采集的数据。 (2) 在CIN图标上单击鼠标右键弹出菜单,选Create .c file.,产生并存入一个×××.C程序框架。 (3) 在VC++5.0下完成×××.C程序框架的数据采集部分的编写,编译该×××.C程序(示例见附1),生成×××.obj代码。在coustom build方式下用nmake / f ×××.lvm 指令将×××.lvm接口程序(示例见附2)编译成×××.lsb代码。 (4) 在LabVIEW的CIN图标下装载×××.lsb。运行成功后将该CIN作成子VI,存入某个文件夹。 在以后的LabVIEW应用程序框图中,该子VI图标即可作此A/D插卡驱动图标使用。 若A/D插卡上有晶振作基准时钟,有可编程计数/定时器,附录1示例的C语言程序还可加入定时采集语句,以实现在子VI中选择采样速率。图3是调用按上述步骤生成的子VI编程所采集的方波信号及其自功率谱。 用CIN结点生成A/D插卡驱动程序的子VI的方法可较充分发挥A/D的高转换速度,获得高的采样速率。但编程较烦杂,不能由LabVIEW直接修改。 2.3 用LabVIEW的Call Library Functions图标,动态链接数据采集插卡的 .DLL库函数 许多数据采集插卡附有.DLL库函数形式的驱动程序,用户可使用某种DLL链接库的编程工具,如VC、VB,编写应用程序来调用它。LabVIEW也提供了一个动态链接库函数的图标Call Library Function,放在Functions模板内的Adevanced子模板中。在example/dll目录中有使用该图标的例子,可参照它们完成对数据采集插卡的.DLL库函数的调用。 3 两个测试系统实例 3.1 滚动轴承振动虚拟检测仪[2] 该滚动轴承振动虚拟检测仪是为检测低噪声轴承强调的“异音”而开发的。目前国内滚动轴承出厂振动分类检测的行业标准和检测仪器(如S0910型) 都只能检测振动加速度的均方根值,远不能适应低噪声轴承的要求。 我们在LabVIEW下,用PC机加国产12位A/D插卡,开发出的虚拟检测仪,采样速率最高达80KHz。按每2秒检测一个轴承的迫节,以加速度均方值的分贝值,峰值因子,峭度,超某幅值峰数四个参数来综合评定轴承振动级别。PC机14″的CRT,对检验员有极佳的可视性,检测确定的轴承等级由软指示灯闪烁显示,在面板上十分醒目,便于检验后归类。每个轴承的检验结果自动写入当班统计文件中,供生产和质检部门使用。检测程序读入各类设置文件便可适应不同类型轴承或不同的检测分类标准。 3.2 空调散热器试验测温系统 为对某空调散热器进行散热性能试验,开发出多点热电偶测温的虚拟仪器系统。 硬件选用一国产有A/D及DIO的PC机插卡,外串接三块前端信号处理板。每块前端信号处理板提供一个冷端补偿电路,并可接16路热电偶。每块前端板的冷端补偿电压和热电偶电势各占用插卡的一个模拟输入通道,由插卡的发出的4位数字输出选择各热电偶电势输入。 由于温度采集速率甚低,直接用LabVIEW的 In Port , Out Port 图标编程完全可满足要求。编程中调用了LabVIEW中Functions模板内Data Acquisition\ Signal Conditioning\ Convert Thermcouple Reading图标,稍作修改,生成了各类标准热电偶温度转换为电压,电压转换为温度的新的子VI。编程十分简便,且能用于各类标准热电偶测温。 参考文献 1. National Instruments Corporation. LabVIEW User Manual. 1998.5 2. 尹学军 熊焕庭。滚动轴承振动的虚拟检测仪。轴承技术,2001.3 作者简介: 熊焕庭,男,广东省五邑大学机电工程系教授,长期从事机电测试、控制,动态信号分析等方面的应用研究和教学工作。
    6. 解析Linux系统根文件系统的目录树 3/6042 Linux开发 2007-01-22
      查资料,顺便发点资料性的东西。
    7. 编程高手请进挑错 9/8624 嵌入式系统 2007-01-08
      hehe,相互学习!!
    8. 如何对一个44b0的空板子写进程序啊 3/7974 嵌入式系统 2007-01-07
      发一个init程序,你可以参考下,这个一般不用自己写,在别人的基础上改就可以了。有了初始化程序就可以写自己的应用程序了。 ; ******************************************************* ; * NAME    : 44BINIT.S                                                                        * ; * Version : 10.April.2000                                                                * ; * Description:                                                                                * ; *        C start up codes                                                                        * ; *        Configure memory, Initialize ISR ,stacks                        * ; *        Initialize C-variables                                                                * ; *        Fill zeros into zero-initialized C-variables                * ; *******************************************************     ;GET option.a     ;GET memcfg.a     GET memcfg.s ;Memory Area ;GCS6 64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff) ;APP    RAM=0xc000000~0xc7effff ;44BMON RAM=0xc7f0000-0xc7fffff ;STACK           =0xc7ffa00                   ;Interrupt Control INTPND            EQU        0x01e00004 INTMOD            EQU        0x01e00008 INTMSK            EQU        0x01e0000c I_ISPR            EQU        0x01e00020 I_CMST            EQU        0x01e0001c ;Watchdog timer WTCON            EQU        0x01d30000 ;Clock Controller PLLCON            EQU        0x01d80000 CLKCON            EQU        0x01d80004 LOCKTIME    EQU        0x01d8000c         ;Memory Controller REFRESH            EQU 0x01c80024 ;BDMA destination register BDIDES0     EQU 0x1f80008 BDIDES1     EQU 0x1f80028 ;Pre-defined constants USERMODE    EQU        0x10 FIQMODE            EQU        0x11 IRQMODE            EQU        0x12 SVCMODE            EQU        0x13 ABORTMODE   EQU        0x17 UNDEFMODE   EQU        0x1b MODEMASK    EQU        0x1f NOINT            EQU        0xc0 ;check if tasm.exe is used.     GBLL    THUMBCODE    ;global logical variable, init. to {false}     [ {CONFIG} = 16             ;[=if,{CONFIG}:build-in variable defined by ARM assembler,16=assembing Thumbcode. THUMBCODE SETL        {TRUE}   ;SETL:set the logic variable     CODE32               ;changing from Thumb state to Arm state     |                    ;|=else THUMBCODE SETL        {FALSE}     ]                    ;]=endif     [ THUMBCODE     CODE32               ;for start-up code for Thumb mode???     ]         MACRO                        MOV_PC_LR         [ THUMBCODE                    bx lr         |                 mov pc, lr         ]         MEND             MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel     sub            sp,sp,#4            ;decrement sp(to store jump address)     stmfd   sp!,{r0}            ;PUSH the work register to stack(lr does't' push because it return to original address)     ldr            r0,=$HandleLabel;load the address of HandleXXX to r0     ldr            r0,[r0]                ;load the contents(service routine start address) of HandleXXX     str            r0,[sp,#4]            ;store the contents(ISR) of HandleXXX to stack     ldmfd   sp!,{r0,pc}            ;POP the work register and pc(jump to ISR)     MEND     IMPORT        |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)     IMPORT        |Image$$RW$$Base|   ; Base of RAM to initialise     IMPORT        |Image$$ZI$$Base|   ; Base and limit of area     IMPORT        |Image$$ZI$$Limit|  ; to zero initialise;     IMPORT  Main    ; The main entry of mon program     AREA    Init,CODE,READONLY     ENTRY ;****************************************************************************     b      ResetHandler                      ;    Reset             ldr    pc, =(_IRQ_BASEADDRESS + 0x04)    ;    HandlerUndef     ldr    pc, =(_IRQ_BASEADDRESS + 0x08)    ;    HandlerSWI     ldr    pc, =(_IRQ_BASEADDRESS + 0x0C)    ;    HandlerPabort     ldr    pc, =(_IRQ_BASEADDRESS + 0x10)    ;    HandlerDAbort     ldr    pc, =(_IRQ_BASEADDRESS + 0x14)    ;    HandlerReserved     ldr    pc, =(_IRQ_BASEADDRESS + 0x18)    ;    HandlerIRQ     ldr    pc, =(_IRQ_BASEADDRESS + 0x1C)    ;    HandlerFIQ ;***************************************************************************            ;***IMPORTANT NOTE***         ;If the H/W vectored interrutp mode is enabled, The above two instructions should         ;be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.         ; b HandlerIRQ  ->  subs pc,lr,#4         ; b HandlerIRQ  ->  subs pc,lr,#4 VECTOR_BRANCH     ldr pc,=HandlerEINT0    ;mGA    H/W interrupt vector table     ldr pc,=HandlerEINT1    ;            ldr pc,=HandlerEINT2    ;     ldr pc,=HandlerEINT3    ;     ldr pc,=HandlerEINT4567 ;     ldr pc,=HandlerTICK            ;mGA     b .     b .     ldr pc,=HandlerZDMA0    ;mGB     ldr pc,=HandlerZDMA1    ;     ldr pc,=HandlerBDMA0    ;     ldr pc,=HandlerBDMA1    ;     ldr pc,=HandlerWDT            ;     ldr pc,=HandlerUERR01   ;mGB     b .     b .     ldr pc,=HandlerTIMER0   ;mGC     ldr pc,=HandlerTIMER1   ;     ldr pc,=HandlerTIMER2   ;     ldr pc,=HandlerTIMER3   ;     ldr pc,=HandlerTIMER4   ;     ldr pc,=HandlerTIMER5   ;mGC     b .     b .     ldr pc,=HandlerURXD0    ;mGD     ldr pc,=HandlerURXD1    ;     ldr pc,=HandlerIIC            ;     ldr pc,=HandlerSIO            ;     ldr pc,=HandlerUTXD0    ;     ldr pc,=HandlerUTXD1    ;mGD     b .     b .     ldr pc,=HandlerRTC            ;mGKA     b .                                                ;     b .                                                ;     b .                                                ;     b .                                                ;     b .                                                ;mGKA     b .     b .     ldr pc,=HandlerADC            ;mGKB     b .                                                ;     b .                                                ;     b .                                                ;     b .                                                ;     b .                                                ;mGKB     b .     b . ;0xe0=EnterPWDN     ldr pc,=EnterPWDN     LTORG        HandlerFIQ                HANDLER HandleFIQ HandlerIRQ                HANDLER HandleIRQ HandlerUndef        HANDLER HandleUndef HandlerSWI                HANDLER HandleSWI HandlerDabort        HANDLER HandleDabort HandlerPabort        HANDLER HandlePabort HandlerADC                HANDLER HandleADC HandlerRTC                HANDLER HandleRTC HandlerUTXD1        HANDLER HandleUTXD1 HandlerUTXD0        HANDLER HandleUTXD0 HandlerSIO                HANDLER HandleSIO HandlerIIC                HANDLER HandleIIC HandlerURXD1        HANDLER HandleURXD1 HandlerURXD0        HANDLER HandleURXD0 HandlerTIMER5        HANDLER HandleTIMER5 HandlerTIMER4        HANDLER HandleTIMER4 HandlerTIMER3        HANDLER HandleTIMER3 HandlerTIMER2        HANDLER HandleTIMER2 HandlerTIMER1        HANDLER HandleTIMER1 HandlerTIMER0        HANDLER HandleTIMER0 HandlerUERR01        HANDLER HandleUERR01 HandlerWDT                HANDLER HandleWDT HandlerBDMA1        HANDLER HandleBDMA1 HandlerBDMA0        HANDLER HandleBDMA0 HandlerZDMA1        HANDLER HandleZDMA1 HandlerZDMA0        HANDLER HandleZDMA0 HandlerTICK                HANDLER HandleTICK HandlerEINT4567        HANDLER HandleEINT4567 HandlerEINT3        HANDLER HandleEINT3 HandlerEINT2        HANDLER HandleEINT2 HandlerEINT1        HANDLER HandleEINT1 HandlerEINT0        HANDLER HandleEINT0 ;************************************************************************* ;IRQ  ==the program put this phrase to 0xc000000 ExceptionHanlderBegin     b      .     ldr    pc, MyHandleUndef            ;    HandlerUndef     ldr    pc, MyHandleSWI              ;    HandlerSWI     ldr    pc, MyHandlePabort           ;    HandlerPabort     ldr    pc, MyHandleDabort           ;    HandlerDAbort     b .                                 ;    HandlerReserved     ldr    pc, MyHandleIRQ              ;    HandlerIRQ     ldr    pc, MyHandleFIQ              ;    HandlerFIQ     MyHandleUndef  DCD  HandleUndef         ;reserve a word(32bit) MyHandleSWI    DCD  HandleSWI MyHandlePabort DCD  HandlePabort MyHandleDabort DCD  HandleDabort MyHandleIRQ    DCD  HandleIRQ MyHandleFIQ    DCD  HandleFIQ ExceptionHanlderEnd ;************************************************************************* ;One of the following two routines can be used for non-vectored interrupt. IsrIRQ        ;using I_ISPR register.     sub            sp,sp,#4       ;reserved for PC     stmfd   sp!,{r8-r9}            ;IMPORTANT CAUTION         ;if I_ISPC isn't' used properly, I_ISPR can be 0 in this routine.     ldr            r9,AddrISPR;=I_ISPR     ldr            r9,[r9]         cmp                r9, #0x0        ;If the IDLE mode work-around is used,                                                 ;r9 may be 0 sometimes.         beq                %F2     mov            r8,#0x0 0     movs    r9,r9,lsr #1     bcs            %F1     add            r8,r8,#4     b            %B0 1     ldr            r9,AddrHandleADC;=HandleADC     add            r9,r9,r8     ldr            r9,[r9]     str            r9,[sp,#8]     ldmfd   sp!,{r8-r9,pc} 2         ldmfd        sp!,{r8-r9}         add                sp,sp,#4         subs        pc,lr,#4         AddrISPR;There is no this phrases in original 44binit.s     DCD     I_ISPR AddrHandleADC        DCD     HandleADC IsrIRQEnd   ;**************************************************** ;*        START                                                                                        * ;**************************************************** ResetHandler     ldr            r0,=WTCON            ;watch dog disable     ldr            r1,=0x0                     str            r1,[r0]     ldr            r0,=INTMSK     ldr            r1,=0x07ffffff  ;all interrupt disable     str            r1,[r0]     ;****************************************************     ;*        Set clock control registers                                                *     ;****************************************************     ldr        r0,=LOCKTIME     ldr        r1,=0xfff     str        r1,[r0]     [ PLLONSTART         ldr        r0,=PLLCON                        ;temporary setting of PLL         ldr        r1,=((M_DIV
    9. 编程高手请进挑错 9/8624 嵌入式系统 2007-01-07
      其实这种排序问题可以不用求最小值,直接用“冒泡”法来做就可以了。#include <stdio.h>int main(){int i,j,min,k,a[10];printf ("\n input 10 number:");for (i=0;i<10;i++)scanf ("%d",&a);for (j=10;j>=0;j--){for (i=1;i<=j;i++) if (a[i-1]-a<0)//如果前面的小于后面的数则交换;    {    min=a[i-1];  //楼主的程序只是做了比较,并没有做排序处理,                   a[i-1]=a;//只需要在这个地方做一下小的改动(做一下交换)就好了,如下:    a=min;    }}for(k=0;k<10;k++)  printf("%d",a[k]);return 0;}[code language="C#"] [/code]

最近访客

< 1/1 >

统计信息

已有75人来访过

  • 芯积分:--
  • 好友:--
  • 主题:3
  • 回复:9

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言