msp430 potansiyometri ile pwm uretme sizce problem ne olabilir

Başlatan Trance55, 05 Kasım 2012, 23:39:34

Trance55


#include "io430.h"
#include "in430.h"


unsigned int analog_register ;

void delay(void)
{
  unsigned int  p;
  for(p=5000;p>0;p--);
}

Void clock_configure(void)
{
  BCSCTL1 = CALBC1_1MHZ;
  DCOCTL  = CALDCO_1MHZ;
}

void analog(void)
{
  ADC10CTL0 &= ~ENC;                                                         
  ADC10CTL0 = ADC10SHT_3 + ADC10ON + ADC10IE;
  ADC10CTL1 = INCH_2 + ADC10SSEL_3 + ADC10DIV_3;   // analog  giris  BIT2 yapildi
  ADC10AE0  = BIT2;                                                         
}

Void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  clock_configure();
  delay();
  P1SEL = 0x01;   // P1.0 PWM CIKISI  ICIN
  P1DIR = 0x01;
 
  analog();
 
  TA0CTL = TASSEL_2 + ID_2 + MC_0;  // UP  MODE durduldu(stop mod) DIVIDER /2(bolucu 2ye bolucek) SMCLOCK
  TA0CCR0 = 1667-1;    // 200 HZ
  TA0CCR1 = 166 ;     // %10  PWM DUTY OLSUN 
  TA0CCTL1 = OUTMOD_7 ; // SET  RESET  gir outmod_7 de
  TA0CTL |= MC_1 ; // UP  MODE acildi
 
  while(1)
  {
     ADC10CTL0 |= ENC + ADC10SC;         // adc  cevrimi baslat
    __EINT();
   
  }
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{

  analog_register =(float)((ADC10MEM<<6)*4.788); // 5 VOLT ICIN
  TA0CCR1 = analog_register ;
  if(TA0CCR1 > 1333)
  {                                       doluluk orani %80  dan fazla oldunda    % 10na geri gelsin
    TA0CCR0 = 166;             
    _NOP();

  }
  _NOP();
  _NOP();                                 islem yapma;
}

aslinda  yapmak istedim su  timer  a  16 bit oldugu icin  adc10 modulu  de 10 bit oldu icin 5  v   bir  gerilim ile  adc  ile pwm uretmek  bunun icinde  ADC10MEM  register  6  bit  oteleme  yaptim 65536 sayisina cekip  verilen  degerle TA0CCR1 degerinin icine yazdirip  pwm gormek  nasil olduysa  osilaskopla  bir turlu goremedim sizce  problem ne  olabilir normal buttonla   deneme yaptim kod  calisti bu  calismadi  konuyla  ilgilenen arkadaslar  olursa   sevinirim su  msp  guzel uygulamalar  yapmak istiyorum
 

kralsam

Alıntı yapılan: Trance55 - 05 Kasım 2012, 23:39:34

...

  TA0CTL = TASSEL_2 + ID_2 + MC_0;  // UP  MODE durduldu(stop mod) DIVIDER /2(bolucu 2ye bolucek) SMCLOCK
  TA0CCR0 = 1667-1;    // 200 HZ
  TA0CCR1 = 166 ;     // %10  PWM DUTY OLSUN 
  TA0CCTL1 = OUTMOD_7 ; // SET  RESET  gir outmod_7 de
  TA0CTL |= MC_1 ; // UP  MODE acildi
 
  while(1)
  {
     ADC10CTL0 |= ENC + ADC10SC;         // adc  cevrimi baslat
    __EINT();
   
  }
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{

  analog_register =(float)((ADC10MEM<<6)*4.788); // 5 VOLT ICIN
  TA0CCR1 = analog_register ;
  if(TA0CCR1 > 1333)
  {                                       doluluk orani %80  dan fazla oldunda    % 10na geri gelsin
    TA0CCR0 = 166;             
    _NOP();

  }

  _NOP();
  _NOP();                                 islem yapma;
}

aslinda  yapmak istedim su  timer  a  16 bit oldugu icin  adc10 modulu  de 10 bit oldu icin 5  v   bir  gerilim ile  adc  ile pwm uretmek  bunun icinde  ADC10MEM  register  6  bit  oteleme  yaptim 65536 sayisina cekip  verilen  degerle TA0CCR1 degerinin icine yazdirip  pwm gormek  nasil olduysa  osilaskopla  bir turlu goremedim sizce  problem ne  olabilir normal buttonla   deneme yaptim kod  calisti bu  calismadi  konuyla  ilgilenen arkadaslar  olursa   sevinirim su  msp  guzel uygulamalar  yapmak istiyorum


Merhaba,

Datasheet e tekrar bakmadım ama hatırladığım kadarı ile kırmızı kısımda Duty yerine periyodu değiştirmişsiniz. Ayrıca aşağıdaki şekilde kullansanız daha iyi olabilir.

...

 
  if(analog_register > 1333)
  {                                       doluluk orani %80  dan fazla oldunda    % 10na geri gelsin
    TA0CCR1 = 166;             
    _NOP();

  }
  else
       TA0CCR1 = analog_register ;

Birde bu şekilde deneyin. İyi çalışmalar.

Trance55

if  and ile aklima bir  sey geldi aslinda  program yapisi daha uzun olucak ama  if (analog_reg > 500 & analog_reg<700) gibi else if  yapsam daha olmazmi sizce  ornegin artis orani % 5 % 7 bazi  periyotlar oyle olsa  daha iyi  diyimi sizce   ? sizin yazdinizda  mantikli aslinda  algoritmik olarak onuda   deniyecem bu  aksam sagolasiniz tessekur ederim