12f1822 kullanımı hakkında

Başlatan muyat, 06 Aralık 2018, 01:01:55

ete

Pek çok yanlış şey var programda. O nedenle ben kendi programımı yazdım.
Aşağıdaki programda ADC okumalarında kullanılacak referans voltajı olarak Fixed Voltaj Referans kullanılmıştır.
Aldığım referans voltajı 4,096V dur. daha düşük değerler almak işini kolaylaştırmıyor zorlaştırıyor. Yada başka deyişle hassasiyetin azalıyor.

Ayrıca gerilim bölücüde büyük değerli (10K nın üzerinde) dirençler kullanılması direnç toleranslarındankaynaklanan sapmaların çok artmasına sebep olur. Bu nedenle 10K nın altında değerler kullanmaya özen göstermelisin. Ayrıca standart dirençlerle iş yapmayada özen göstermen gerekiyor. Tercih ettiğim değerler şunlar. R1=4K7 ve R2=1K8 bu ikili sana 14V voltajı 3,88V ta düşürecektir. İşin hassas ise R2 direncini 10K lık ayarlı direnç olarak kullanırsın ve uygun değere ayarlarsın.

Bu sistem adc okuması yaparak voltajı hesaplamakta ve giriş ucu ile birlikte değerlendirerek giriş<9 V ise ledi yakmaktadır.
Dosyalar ilişikte olup programdaki config satırlaında PBP2.60 kullanıyorsan #CONFIG yerine ASM, #ENDCONFIG yerine ENDASM yazman yeterli olacaktır.

Ete

#CONFIG 
__config _CONFIG1, _FOSC_INTOSC & _MCLRE_OFF & _PWRTE_ON & _WDTE_OFF & _CPD_OFF
__config _CONFIG2, _PLLEN_OFF & _LVP_OFF & _WRT_OFF
#ENDCONFIG

DEFINE OSC 4

OSCCON=%01101000  '%01111000=16mHZ %01101000=4 mHZ  ,  %01110000=8 mHZ  , %01111000=16mHZ ,
OPTION_REG.7=1
CM1CON0=0   'KOMPARATÖRLER İPTAL EDİLDİ
CM1CON1=0
ANSELA = %00010000  'ANALOG GİRİŞLER İPTAL HEPSİ DİGİTAL
PORTA=0
TRISA=%00010010
WPUA=0
CPSCON0.7=0

DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1     ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 11 ' ADC sampling time (uSec)
                      ' Disable comparator                   
HAM VAR WORD  56
VOLT VAR BYTE 58

FVRCON = %11000011       'referans voltajı 4,096V   

ADCON1 = %10010011       

LED VAR PORTA.5
GIRIS VAR PORTA.1

PAUSE 200

BASLA:
      ADCIN 3,HAM
      VOLT= (HAM*/371)/100
     
      IF GIRIS=1 AND VOLT<9 THEN
        LED=1
      ELSE
        LED=0
      ENDIF
      PAUSE 100
      GOTO BASLA
         
END
'  R1=4k7   R2=1K8

muyat

Hocam 2 şey sorcam..
Öncelikle üst sınır 3.88 voltu elde etmek için kullanılan dirençleri  4.096ya yakın oldugun için mi seçtik?
Bir diger husus mesela ben 10.5 voltda ledi yakmak istersem program virgüllü sayıları kabul etmiyor?O kısmı yazılımda nasıl ayarlıcaz?
Son olarak önceki yaşadıgım problemler bu sefer çıkmadı.Teşekkür ederim

ete

Maksimum voltaj değerimiz olan 14 voltu gerilim bölücü ile bölünce ref voltajına en yakın değeri elde etmeliyizki voltaj düştüğünde kolaylıkla ölçüma alıp anlayabilelim. O nedenle o dirençleri seçtim. Ondalıklı voltaj için sistem şöyle olmalı
Formül  VOLT= (HAM*/371)/100 şeklinde idi.
Bunu  VOLT= (HAM*/371)/10 şeklinde uygularsan voltajın 10 ile çarpılmış halini bulursun. Bu da sana virgülden sonra bir hane alma imkanı tanır. Örnek vereyim,
Ham=780 okuduğumuzu varsayalım. Buna göre bulunacak değer,
Volt=(780 x 371)/256=1130 olacaktır. Bunu 10 a bölünce (formüldeki 10 bölme işlemi nedeni ile) sonuç 113 çıkacaktır.
Bunu ekranda
LCDOUT $FE,$80,"volt=",dec volt/10, ",", dec volt//10," V " şeklindeki bir satır ile gösterirsen ekrandaki görüntü 11,3V şeklinde çıkacaktır.

Ete


Powered by EzPortal