Voltajla Değişen Işıklar

Başlatan since1990, 28 Nisan 2011, 23:15:13

since1990

Aşağıdaki Program LAunchpad lerdeki G2231 için ADC girisişin(P1.1) kullanarak giriş gerilimi, VCC/3 ün altında iken kırmızı ışığı Vcc/2 ve üzerinde yeşil ışığı yakar.
;----"zq@n 25.04.2011 Tarihli Ödev, Voltajla Değişen Işıkklar-----------
#include  "msp430g2231.h"
;-------------------------------------------------------------------------------
            RSEG    CSTACK                  ; Define stack segment
;-------------------------------------------------------------------------------
            RSEG    CODE                    ; Assemble to Flash memory
;-------------------------------------------------------------------------------
RESET       mov.w   #SFE(CSTACK),SP         ; Initialize stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
SetupADC10  mov.w   #ADC10SHT_2+ADC10ON+ADC10IE,&ADC10CTL0 ; 16x, enable int.
            mov.w   #INCH_1, &ADC10CTL1
            bis.b   #02h,&ADC10AE0          ; P1.1 ADC10 option select
SetupP1     bis.b   #065,&P1DIR            ; P1.0 output
                                            ;
Mainloop    bis.w   #ENC+ADC10SC,&ADC10CTL0 ; Start sampling/conversion
            bis.w   #CPUOFF+GIE,SR          ; LPM0, ADC10_ISR will force exit
            bic.b   #65,&P1OUT              ;Çıkışları Temizle
            
            cmp.w   #341,&ADC10MEM        ; Eğer Gerilim Vcc/3 nin altına
            jlo     kirmizi               ;Düşerse kirmizi ledi yak
            
            cmp.w   #512,&ADC10MEM        ;Eğer Gerilim Vcc/2 ve üzerinde 
            jge     yesil                 ;Yeşil ışığı yak
            
jmp         Mainloop              
                                            
kirmizi     bis.b   #01,&P1OUT            ;Kırmızı ışığın bağlı olduğu P1.0i yak
jmp         Mainloop

yesil       bis.b   #64,&P1OUT            ;Yeşil Işığın bağlı olduğı P1.6yi yak
jmp         Mainloop
                                          ;Sürekli Devam Et...
;-------------------------------------------------------------------------------
ADC10_ISR;  Exit LPM0 on reti
;-------------------------------------------------------------------------------
            bic.w   #CPUOFF,0(SP)           ; Exit LPM0 on reti
            reti                            ;
                                            ;
;-------------------------------------------------------------------------------
            COMMON  INTVEC                  ; Interrupt Vectors
;-------------------------------------------------------------------------------
            ORG     ADC10_VECTOR            ; ADC10 Vector
            DW      ADC10_ISR
            ORG     RESET_VECTOR            ; POR, ext. Reset
            DW      RESET
            END

"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

electronious

Merhaba, ben de buna benzer birşeyler yapmaya çalışıyorum. Fakat referans gerilimleriyle ilgili sorunum var. C bildiğim için de sizin koddan çıkaramadım. Acaba bu referans gerilimleri Vr+ Vr- tam olarak bize ne sağlıyor?

fatihinanc

Referans gerilimi için herhangi bir koda ihtiyaç yok. Eğer dahili referans gerilimi üreten birimi kullanmak istemiyorsanız referans gerilimi için ön tanımlı olarak V+ = Vcc , V- = Vss seçiliyor. Bunu da aşağıdaki tablodan görebilirsiniz. Bu değerler ön tanımlı olarak 000 olduğu için ekstra bir kod da gerekmiyor.

SREF
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)