搜索
bottom↓
回复: 3

T/C0相位修正PWM模式死活就是不输出波形,

[复制链接]

出0入0汤圆

发表于 2009-7-3 22:19:12 | 显示全部楼层 |阅读模式
问这个问题,我都觉得不好意思,可是我搞了几天就是搞不定这个问题,只好请教各位朋友帮帮忙,看看,我到底是哪里错了?


/*****************************************************
Chip type           : ATtiny2313V
Clock frequency     : 4.000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/

#include "mytiny2313.h"
#include <delay.h>

#define uchar        unsigned char  
#define uint        unsigned int
#define   sei()      #asm("sei")
#define   cli()      #asm("cli")
#define int0_enable    GIMSK|=0X40
#define int0_disable   GIMSK&=~(0X40)

uchar dtime=0;                         //已经延时的时间
uchar ttime=0;                         //15秒的计数次数

/*函数声明*/
void port_init(void);
void init_devices(void);

//端口初始化  
void port_init(void)  
{      
        PORTB=0x00;     
        DDRB=0xff;

        PORTD=0x3f;
        DDRD=0x43;
        
        TCCR1A=0x00;
        TCCR1B |=((1<<WGM12)|(1<<CS12)|(1<<CS10));       // 系统时钟1024分频,比较匹配清0模式 ,当匹配中断时 TIFR.4 置位
        TCNT1H=0x00;       //
        TCNT1L=0x00;
        OCR1AH=0xe4;      //匹配值为 58594(E4E2)
        OCR1AL=0xe2;
        TCNT0=0;
        OCR0A=127;
        TCCR0A |=((1<<COM0A1)|(1<<COM0A0)|(1<<WGM00));      // 相位修正PWM模式,WGM=5,在升 序计数时发生比较匹配将置位 OC0A ;降序计数时发生比较
                                                                                                // 匹配将清零 OC0A
        TCCR0B |=((1<<WGM02)|(1<<CS01));                              // 系统时钟8分频
        
}                                                         /*不知道上面的设置有什么问题,OC0A就是不输出PWM波形,只有当OCR0A=0的时候,OC0A输出2.2v的电压
                                                             当OCR0A为别的数值的时候,OC0A的脚只是输出0V的电压,没有波形?  T/C1工作正常,只是T/C0有问题?*/
/**********************************************************/      
void init_devices(void)  
{  
        cli();                   //禁止所有中断  
        MCUCR  = 0b00000010;  
        int0_disable;
           
        sei();                  //开全局中断  
        int0_enable;
}


/************************************************************/   
// Timer 1 overflow interrupt service routine
interrupt[TIM1_COMPA] void delay15s()       //延时240*15s=1H
{
  ttime++;                                
  if(ttime==241)                 //240*15s=0.5H
   {
     dtime++;                   //够1小时,dtime的值加1
     ttime=0;
   };
   
}

// Declare your global variables here  
/*********************************************************************************/
void main(void)
{

OSCCAL=0x58;
port_init();
init_devices();

while (1)
  {
   
  };

}



非常希望老师指导一下,看了N遍attiny2313的pdf手册,代码改了N次,还是不行,笨鸟啊!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-7-4 20:13:22 | 显示全部楼层
是不是问题太简单了,各位老师都懒得回答啊,
我用CVAVR自动生成了代码,可是还是不行,用PROTEUS仿真也行,实际烧到板上也不行,郁闷啊,各位大侠指点指点啊,到底是怎么回事,下面是CVAVR自动生成的代码,我只是加了一个按键的代码,按一下按键,OCR0A的值+5,在OC0A(PB2)的输出端通过330的电阻接了一个LED,可是LED不亮,只有OCR0A的值为0的时候,LED亮,PB2的端口有2.2V的电压,但是没有波形,当OCR0A的值为别的数值的时候,PB2端口的电压为0,没有波形,当按着按键不放的时候,LED一闪一闪的微亮,
各位大侠帮帮忙吧,小弟初学,自己搞了很久都不行,

Chip type           : ATtiny2313V
Clock frequency     : 4.000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>
                  
#define key            PIND.3
// Declare your global variables here

void main(void)
{

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


PORTB=0x00;
DDRB=0xFF;

PORTD=0x3f;
DDRD=0x43;


TCCR0A=0xC1;
TCCR0B=0x0A;
TCNT0=0x00;
OCR0A=0x7f;
OCR0B=0x00;


TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


USICR=0x00;


ACSR=0x80;

while (1)
      {
        if(key==0)
    {
      delay_ms(10);
      if(key==0)
      {
        OCR0A=OCR0A+5;
      };
      
    };
    delay_ms(800);

      };
}

出0入0汤圆

 楼主| 发表于 2009-7-4 21:33:02 | 显示全部楼层
麻烦马老师帮忙看看怎么回事好不好,同样的程序在M16上面运行什么事都有没有,但是在ATTINY2313上面就是不行,真的郁闷啊,不知哪里问题,下面是M16的代码
#include <mega16.h>
#include <delay.h>

#define    key     PINB.0



void main(void)
{

PORTB=0x09;
DDRB=0x08;


TCCR0=0x72;
TCNT0=0x00;
OCR0=0x00;


while (1)
      {
        if(key==0)
    {
      delay_ms(10);
      if(key==0)
      {
        OCR0=OCR0+5;
      };
      
    };
    delay_ms(500);

      };
}


下面是ATTINY2313的代码

#include <tiny2313.h>
#include <delay.h>
#define key            PIND.3               //按键输入端


// Declare your global variables here

void main(void)
{

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


PORTB=0x00;
DDRB=0xFF;


PORTD=0x3F;
DDRD=0x40;


TCCR0A=0xC1;
TCCR0B=0x0A;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;


while (1)
      {
        if(key==0)
    {
      delay_ms(10);
      if(key==0)
      {
        OCR0A=OCR0A+5;
      };
      
    };
    delay_ms(500);
   

      };
}

真的不知哪里问题啊,怎么就是不行呢?

出0入0汤圆

发表于 2009-7-27 19:17:00 | 显示全部楼层
小弟也刚学AVR   帮不了你!    只能顶下!
   
     希望路过的老师帮下他吧     很造孽的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 07:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表