这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请问,在互补PWM模式中AD的值与TRDRD0等之间的关系??

共4条 1/1 1 跳转至

请问,在互补PWM模式中AD的值与TRDRD0等之间的关系??

菜鸟
2008-04-03 14:19:12     打赏

瑞萨工程师你好:
        我在做互补PWM时和AD配合用的。利用PWM中的TRD0和trdgra0 比较匹配进行AD值传送的。AD在8位时是对的。但是我有10位AD时,发现AD 的高2位的值不传到TRDGRD0(也就是无法传入TRDGRB0)中,这样就失去10位AD的作用。请问这是什么原因形成的?

void ad_init(void)
{

 adcon0 = 0x07; 
 adcap = 1;
 adcon1 = 0x28; /* 28=10 bit mode cks1=0 setting / Vref connected */
  adcon2 = 0x00; 
 wait_vref();
 adic = 0x00;         // 中断位IR清零,中断优先级为0级 
 asm("NOP");            /* Waiting for stability */
 asm("NOP"); 
    adst = 0;            //A/D转换开始和停止位
    ad = 0x00;           //AD寄存器清零
    adge = 1;            //TRD1 比较匹配时输出 AD触发=1。
    adtrg = 1;           //允许A/D触发


trdgrd0 = ad;  //trdgrd0 值在比较匹配时传送 trdgrb0      
trdgrc1 = ad;      //问题就在这边,无法正常传高2位的值????  
trdgrd1 = ad;




关键词: 请问     互补     模式     TRDRD0     等之     间的     关系    

菜鸟
2008-04-03 16:36:00     打赏
2楼
 trd0 = 0;        /* The Count value of TRD0 is initialized of 0 */
 trdgra0 = 4000- 1;      /* 25ns * 4000 = 100us */
上面C语言程序。

以下是反汇编程序。

  trd0 = 0;        /* The Count value of TRD0 is initialized of 0 */
   MOV.W     #0H,0146H
 trdgra0 = 4000- 1;
MOV.W     #0F9FH,0148H

 trdgra0 分别在0148 0149H两个单元。而现在C里只有MOV.W     #0F9FH,0148H;
这肯定是错的,只送了9F到0148。而0F 到0149。却被程序丢了。
这个是你们瑞萨官方网上下的程序。里面有错。
按照这个 trdgra0 不能超过255。那有什么用啊。
请瑞萨工程师给于解决一下。谢谢。

菜鸟
2008-04-07 09:04:01     打赏
3楼

谢谢你们的参与。我用互补PWM与AD转换程序是对的。我试了,很多次了。也与实际电压作了多次验证。现在关键是数据传送有问题???
就是传送trdgra0 = 1000-1;这样一个数值。在内存中看数据就有0148h里有数值。而 0149h里没有数据。说明在C中传送数据时丢失了高八位的数据。

谢谢大家能帮个忙。!!!


菜鸟
2008-04-07 14:57:52     打赏
4楼
已经好了。我已经试了,就是byte .word两者的区别。谢谢。

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]