ADC devresinde yazılım yardımı.

Başlatan qntrl, 27 Nisan 2007, 21:54:35

qntrl

Merhaba arkadaşlar;
Forumu tesadüfen keşfetmiştim.
Ben dijital benzin göstergesi yapmak istiyorum.
Renault 9 marka aracım var.
Aracımın manual'inden şamandıranın hangi değerde hangi direnci gösterdiğini öğrendim.
Bunu litreye çevirerek lcd ekranda göstermek istiyorum.

Baştan söyleyeyim mesleğimin elektronikle uzaktan yakından bir alakası yok(Gıda Mühendisiyim) ve elektronik bilgim tahmin edebileceğiniz gibi zayıf.

Biraz araştırma sonucunda 16f877'nin işimi göreceğini öğrendim.LCD olarakta yeşil tabanlı olan lcdlerden düşünüyorum.

Şimdi direnç değerleri aşağıdaki tablodaki gibi;


Depo kapasitesi 47 litre.

Buna uygun bir devra şeması ve yazılım konusunda yardımlarınızı bekliyorum.

Saygılar
Ercan

mech

şu başlığı incelerseniz bilgi edinebiilirsinizadc ve direnç
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

qntrl

mech teşekkür ederim link için.

ben üst konudaki örneklerden birini kendi yapmak istediğime benzettim.
Ama en alt kısımdaki hesaplamanın nasıl yapıldığını anlayamadım.

   
'****************************************************************
    '* Name : TERMISTOR.BAS *
    '* Author : [Erol Tahir Erdal] *
    '* Notice : Copyright (c) 2005 [ETE] *
    '* : All Rights Reserved *
    '* Date : 21.04.2005 *
    '* Version : 1.0 *
    '* Notes : *
    '* : *
    '****************************************************************
    TRISA=%00000001
    TRISB=0
    TRISC=0
    TRISD=0
    '-------------------------------------------------------------------------------
    @ DEVICE pic16F877
    @ DEVICE pic16F877, WDT_on
    @ DEVICE pic16F877, PWRT_ON
    @ DEVICE pic16F877, PROTECT_OFF
    @ DEVICE pic16F877, XT_OSC
    '-------------------------------------------------------------------------------
    DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
    DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
    DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
    DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
    DEFINE LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
    DEFINE LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
    DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
    DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
    DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
    DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor

    DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
    DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc)
    DEFINE ADC_SAMPLEUS 100 'Şarj zamanı mikro saniye cinsinden.
    '-------------------------------------------------------------------------------
    ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
    '-------------------------------------------------------------------------------
    ISI VAR word
    HAM VAR WORD
    ONDA VAR BYTE
    '-------------------------------------------------------------------------------
    Low PORTB.2 ' LCD R/W line Low (W), şemada direkt GND ye bağlanabilir.
    LCDOut $FE,1 ' LCD de CLS yapar
    pause 200 ' LCD nin açılması için gerekli süredir.
    '-------------------------------------------------------------------------------

    BASLA:
    ADCIN 0,HAM '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.

    BAK: IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.


    lcdout $FE,1,"HAM =",# HAM
    '50 derecede okunan ADC değeri 256 ve 0 derecede okunan 146 olduğundan
    '0-50 derece arası okunan değer farkı 110 dur (256-146) . O halde her bir derece
    'için okunması gereken değer 110/50=2,2 olacaktır. Pic e uyarlamak için
    'okunan değeri 10 ile çarpıp 22 ye bölersek direkt sıcaklığı bulmuş olacağız.
    Â‘ondalık değeri de hesaplamak için 10 yerine 100 ile çarpıyoruz.

    ISI=((HAM-146)*100)/22
    onda=ISI//10
    ISI=ISI/10
    LCDOUT $FE,$C0," ISI=",#ISI,",",#onda,"`C"
    pause 500
    goto basla