tag 标签: 56f8346

相关博文
  • 热度 23
    2012-10-20 12:02
    1414 次阅读|
    0 个评论
      Event.c 中做如下处理:   static byte *OEGA_ACT = {   charLED,   charLED,   numLED,     numLED,     numLED,     numLED }; // 定义 LED 显示各位的指针数组   unsigned int speed =258; // 定义一个要显示的实际值 unsigned int CharOrNumOffset ;// 定义指针数组各指针的偏移量数组 byte *CharSend ;        // 定义指针数组各指针加上偏移量之后的指针数组 unsigned int length1,length2;// 数组长度   中断事件代码处理内容: #pragma interrupt called                         void TI1_OnInterrupt(void) {   /* Write your code here ... */       unsigned int i;     Bit1_ClrVal();              length1 = sizeof(OEGA_ACT)/2;//12     length2 = sizeof(*OEGA_ACT);//2         transValueLed(speed,CharOrNumOffset,flagSPEED);       for(i=0;i     {     *(CharSend+i) = *(OEGA_ACT+i)+*(CharOrNumOffset+i);     }             SM1_SendChar(*(*(CharSend+0)));     SM1_SendChar(*(*(CharSend+1)));     SM1_SendChar(*(*(CharSend+2)));     SM1_SendChar(*(*(CharSend+3)));     SM1_SendChar(*(*(CharSend+4)));     SM1_SendChar(*(*(CharSend+5)));             Bit1_SetVal();     // 锁存     Bit1_ClrVal();     // 锁存     }  
  • 热度 21
    2012-10-20 12:00
    1631 次阅读|
    0 个评论
    LED.c 代码如下:   #include "LED.h"     #define MOTORSPEED 5   /* 此函数将采集的量 , 比如电机转速 Value, 转化成 LED 对应的某个字符 , 每一位的字符存储在一个字符数组   返回该字符数组的指针   Value - actual value..etc,1265rpm   pParamLED - stroe the charactor's offset address   paramID - for identify the param which it present. etc.MOTORSPEED present the value is motor             speed. */   unsigned int* transValueLed(unsigned int value,unsigned int *pParamLED,unsigned int paramID1,unsigned int paramID2) {   unsigned int temp;     *pParamLED = paramID1;      //F   *(pParamLED+1) = paramID2; //n   *(pParamLED+2) = value/1000;   temp = value%1000;   *(pParamLED+3) = temp/100;   temp = temp%100;   *(pParamLED+4) = temp/10;   temp = temp%10;   *(pParamLED+5) = temp/1;   temp = temp%1;     return pParamLED; }   /* 此函数将对应要发送的字符的地址指针对应的字符存入一个数组   pSend - pointer to arrary that save the value of charactor that to be send   pParamBit - 指向相应参数的指针数组 .   pParamLED - 指向 LED 字符便宜量的指针 .   此函数替代以下这段代码   for(i=0;i     {         *(CharSend+i) = *(OEGA_ACT+i)+*(CharOrNumOffset+i);     //SM1_SendChar(*(*(CharSend+i)));     } */ void valuePointedChar(byte **pSend,byte **pParamBit,unsigned int *pParamLED) {     unsigned int i,temp;   temp = 6;//sizeof(pParamBit)/2;// 不能用 sizeof, 因为 sizeof(pParamBit) 始终为 0.   for(i=0;i   {     *(pSend+i) = *(pParamBit+i)+*(pParamLED+i);   } //    return pSend; }
  • 热度 24
    2012-10-20 11:58
    1505 次阅读|
    4 个评论
    LED 显示数据处理 新建两个文件分别命名为 LED.h 和 LED.c 。 在 LED.h 中定义两个数组, LED.h 代码如下 : #include "cpu.h"   #define LEDNUMLENGTH    10 #define LEDCHARLENGTH   16   /* 表示显示何种参数代号,比如电机转速为 Fn*/ #define MTRSPEED1       5   //F #define MTRSPEED2       8   //n   unsigned int* transValueLed(unsigned int value,unsigned int *pParamLED,unsigned int paramID1,unsigned int paramID2); void valuePointedChar(byte **pSend,byte **pParamBit,unsigned int *pParamLED);   static byte byteDOT = 128; static byte numLED = {   0xc0,           //0     192   1   0xf9,           //1     249   2   0xa4,           //2     164   3   0xb0,           //3     176   4   0x99,           //4     153   5   0x92,           //5     146   6   0x82,           //6     130   7   0xf8,           //7     248   8   0x80,           //8     128   9   0x90            //9     144   10   }; static byte charLED = {     0x88,           //A     136   1   0x83,           //b     131   2   0xa7,           //c     167   3   0xa1,           //d     161   4   0x86,           //E     134   5   0x8e,           //F     142   6   0x8b,           //h     139   7   0xc7,           //L     199   8   0xab,           //n     171   9   0xa3,           //o     163   10   0x8c,           //p     140   11   0x87,           //t     135   12   0xe3,           //u     227   13   0xbf,           //-     191   14   0x7f,           //.     127   15   0xff            //null 255   16    };
  • 热度 18
    2012-10-20 11:54
    1538 次阅读|
    0 个评论
    二 显示方法及程序设计     2.1 显示方法   从表 1 和图 3 可以看出,最先从 U400 进入的 1byte 数据最后移位到 U404 ,当传输 6byte 数据的时候,最后 1byte 数据传输到 U404 ,因此 U404 驱动显示图 3 中的 LED405 ,以使显示方向不会颠倒。     从图 1 可以看出, 8 段 LED 各段的驱动位如下图所示。   图 4   因此我们可以根据不同需要显示的数字或字符,设计对应的 byte 型 8 位数据,如下表所示。   2.2 程序设计   程序设计中使用一个定时器每隔 100ms 通过 SPI 定时发送一组 6 位字符,锁存信号使用一个 IO 口豆输出控制。     2.2.1 SPI 豆       图 5 SPI 豆配置 如图 5 所示为 SPI 豆配置。   使能发送器空和接收器满中断,输入和输出缓存大小值设为 6 。   数据宽度为 8bits ,设相应管脚,移位周期,时钟边沿,并在初始化代码中使能该 SPI 模块。   SPI 工作情况如下。 1.   在定时器中断中向发送 buffer 写入数据。 • 写入数据的程序模块中,对发送的字节长度计数,如果计数值等于 buffer 长度,返回 buffer 已满错误。 • 在向发送 buffer 写入数据之前禁止全局中断。 • 向发送 buffer 写入数据,如果‘发送写’指针指到 buffer 顶部,重新将 buffer 首地址赋给‘发送写’指针。 • 使能发送寄存器器空中断使能。 • 使能全局中断 2.   在步骤 1 中,我们使能了发送寄存器空中断。因此当发送寄存器空的时候,会产生一个中断,在中断处理程序中,将 buffer 的数据写入发送寄存器。    • 设置 onTXChar 标志    • 将发送缓存的数据送入发送寄存器,如果移送完成后指针已指到发送缓存顶部,则重新将缓存首地址赋给指针。     • 数据发送完之后,清发送寄存器空中断标识。     • 设置其他标识,以便于触发其他程序。       定时器豆 图 6 定时器豆 定时器 100ms 产生一次中断。      
  • 热度 15
    2012-10-20 11:39
    2292 次阅读|
    0 个评论
    引言 先说说56F8346数字信号控制器,这是Freescale推出的16位基于56F8000内核的数字信号控制器,在电机控制领域有着出色的表现,比如感应电机的空间矢量控制,永磁同步电机及BLDC的数字控制。因此,特别适用于变频调速系统、伺服马达系统、家用电器的马达控制领域。 再说说56F8346的开发平台,Freescale有专门提供给16位DSC的软件平台,我当时用的是CodeWarrior7.0,有ProcessorExpert模块,其中有针对DSC内部各功能模块底层配置的Bean(豆),下文的叙述会涉及到,开发起来特别方便灵活,节省时间。 另外,Freescale的技术支持一如既往的到位,其官网有大量的应用案例和程序方面学习下载。 本文涉及的内容是2年以前,我利用业余时间把同事原本作为用于变频器的LED显示模块用来开发DSC的SPI,完全出于好玩的心态,不过,其本身还是具有实际意义的,希望对涉及这一块开发的朋友有借鉴意义。 使用Freescale 56F8346数字信号控制器(DSC)的SPI控制LED显示,显示的内容很多,可以通过SPI让其显示系统电压、电流、PID参数、电机转速、温度等等。 由于时间久远,没有当时显示效果的图片,仅有实物参考图。 正面照 背面照 内部正脸 内部背面 一 LED 排布及电路     LED 采用的是带小数点的八段显示数码管,本例中使用六只 LED 排布显示。使用 8 位的串行移位输入并行输出的 74hc595 芯片驱动 LED 显示。因此用到了 DSP 的 SPI 模块,本例中仅用到 SPI 模块的 master 模式。其电路原理如下图所示   图 1 LED 线路原理图 图 2 SPI 简图   图 2 中, Q7’ 为串行移位输出口, Q0 到 Q7 为并行输出驱动 LED 。   从图 1 中,我们可以找到 LED 和相应 74HC595 芯片的对应关系如下。 表 1 ( 注:数据从 U400 进入 ) LED LED401 LED403 LED404 LED400 LED402 LED405 74hc595 U400 U402 U404 U401 U403 U404 · 图 3 LED 排布