MSP430 ile 0-99 sayaç

Başlatan mozkan87, 08 Aralık 2011, 21:24:42

mozkan87

Yeni yeni oynamaya başaldığım MSP430 Launchpad ile yapmış olduğum 0-99 sayaç ile ilgili iar dosyaları aşağıdaki linktedir. 7 segmentler tarama yöntemiyle sürülmüştür. Tarama için TimerA kesmesi kullanılmıştır. Elimden geldiğince kodların yanınada not almaya çalıştım. Her ne kadar MSP430G2231'in boşta pini kalmamış olsada örnek teşkil edeceğini düşünüyorum.
MSP430 kitabını yayınlayan arkadaşlarada buradan teşekkürlerimi iletiyorum.
link
/* MSP430G2231 ile iki adet 7 segmentin multipleks olarak sürülmesi
2 adet ortak katot 7 segment kullanılmıştır. Tarama yapmak için TimerA birimi
kullanıldı. 7 segement bağlantısı aşağıdaki gibidir.
a -> P1.0
b -> P1.1
c -> P1.2
d -> P1.3
e -> P1.4
f -> P1.5
g -> P1.6

katot0 -> P1.7
katot1 -> P2.6
*/

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

#define Katot0 P1OUT_bit.P7
#define Katot1 P2OUT_bit.P6
#define SPORT P1OUT

unsigned char count=0;
const unsigned char segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int sayi=0;

void delayus(unsigned int dly); //yaklaşık "dly" mikrosaniye gecikme yaratır.

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  DCOCTL=CALDCO_1MHZ; 
  BCSCTL1=CALBC1_1MHZ;
  
  P1OUT=0xff; 
  P1DIR=0xff; //P1 'in hepsi çıkış.
  
  P2SEL_bit.P6=0; //P2.6 dijital I/O yapıldı.
  P2DIR_bit.P6=1; //P2.6 çıkış olarak yarlamdı.
  
  TACCTL0=CCIE; //TimerA interrupt izni verildi.
  TACCR0=5000;  //interrupt'ın oluşacağı değer yüklendi. 5ms'de interrupt oluşacak.
  TACTL=TASSEL_2 + MC_1 + TAIE; //Timer clock kaynağı ayarlandı.
  _BIS_SR(GIE); //Kesme izni verildi
  
  while(1){
    for(sayi=0;sayi<100;sayi++){ //0,5s aralıklarlar ile artan sayaç 
      delayus(500);
    }
   }
}

#pragma vector=TIMERA0_VECTOR       //TimerA kesme rutini
__interrupt void Timer_A0 (void) { 
    count++;
    if(count==1){
    SPORT=(P1IN & 0x80) | segment[sayi/10];
    Katot0=0;Katot1=1;
    }
    if(count>1){
    SPORT=(P1IN & 0x80) | segment[sayi%10];
    Katot1=0;Katot0=1;
    count=0;
    }
    TACTL_bit.TAIFG = 0; //TimerA flag'ını temizledik.
}

void delayus(unsigned int dly){
  unsigned int j,a;
  for(j=dly;j>0;j--){
    for(a=130;a>0;a--);
  }
}


xxlxxl

çok güzel eline sağlık hocam tabiki arşivde bulunması gereken bir kod bbir şey sormak istiyorum launcpad ile bende uygulama yapmaya başladım fakat start butonunu nasıl otomatik yaparız her seferinde mutlaka tıklamam gerekiyor bunu otomatik yapmak veya program içerisinden oto cklk yapmak birde bu buton start tıklama ile ilgili bir örnek led yak söndür gibi