Pic ile Analog – Digital Çevirici Kullanımı: Günlük hayatta kullandığımız cihazlar genelde Analog ve Dijital olarak ikiye ayrılmaktadırlar. Sayısal sistemle çalışan tüm cihazlar Dijital olarak nitelendirilmekte bunun dışındakiler ise Analog cihazlar olarak nitelendirilmektedirler. Mikroişlemcilerin tamamı dijital cihazlardır.
Zaman zaman mikroişlemci bazlı bazı cihazların Analog cihazları kontrol etmesi istenir. Zaman zamanda Analog sinyallerin işlenip değerlendirilmesi için bu sinyallerin dijital sinyaller haline getirilmesi gerekir.
İşte bu gibi durumlarda Analog – Digital çeviriciler kullanılır. Yalnızca A/D çevirici olarak üretilmiş entegreler olduğu gibi bazı Pic’ler de bu çeviriciler seçimli olarak hazır bulunurlar. Burada A/D çeviricisi bulunan Pic’ler incelenecek ve kullanımları konusunda örnekler verilecektir.
Bu konuda en çok kullanılan Pic’lerden birisi PIC16F877 entegresidir. 40 bacaklı olan bu entegrede 8 kanal ve 10 bit hassasiyette A/D çeviricisi bulunmaktadır.
A/D çevirim prensibi genelde bir kondansatörün belirli bir referans voltajı ile şarj edilip deşarj için geçen sürenin sayılması esasına dayanır. Elde edilen süre bilgisi ise Analog değere karşılık elde edilmiş olan dijital değer olarak verilir.
Üzerinde A/D çevirici bulunan bir Pic kullanılırken yapılacak işlerin başında hangi bacakların ANALOG hangilerinin DIGITAL olarak kullanılacağına karar vermektir. Sonra A/D çevirici için referans voltajı kaynağının seçimi yapılmalıdır. İki türlü referans voltajı vardır. Birincisi Pic’in kendi VDD beslemesi (+5V) diğeri ise harici bir voltaj kaynağıdır. Tabiiki harici kaynaklar referans voltajının 5 Volt’tan farklı olması durumunda seçilmelidir.
Şimdi gelelim bu seçimleri yaptıktan sonra bunları Pic’e nasıl vereceğimize. A/D çeviricisi olan Pic’lerde ADCON register’i denilen 8 bitlik bir yazmaç bulunmaktadır. Genellikle bu yazmaç ADCON1 adı ile isimlendirilir.
Şimdi PIC16F877 nin ADCON1 yazmaç’ını inceleyelim.
2: ADCON1 REGISTER (ADDRESS 9Fh)
Bit-7: A/D Sonuç Format Seçme biti dir.
1 olur ise sonuç sağa hizalanmış , ADRESH nin 6. uç bitleri 0 olarak okunur.
0 olur ise sonuç sola hizalanmış, ADRESL nin alt bitleri 0 olarak okunur.
Bit 6-4 arası kullanılmaz ve 0 olarak okunur.
Bit -3-0 arası PCFG3 – PCFG0 A/D portu ayarlama kontrol bitleridir. İşte bu bitleri ayarlayarak portların seçimleri yapılır. Aşağıdaki tabloya bakınız.
Şimdi tablo üzerinde biraz kafa yoralım.
Şayet PCFG3:PCFG0 bitlerini 0000 olarak verir isek bu durumda RA0-RA3 , RA5, RE0-RE2 bacaklarının tamamı ANALOG olarak ayarlanmış olacak ve artı referans Voltajı VDD den eksi referans voltajı ise VSS yani GND den alınacaktır.
Şimdi diyelim ki bize 3 adet Analog giriş lazım diğerleri Digital olabilir. +5V ve GND de referans voltajları olarak kullanılacak. Bu durumda tabloya bakar isek 0100 değeri tam istediğimiz ayarlamayı yapabiliyor. Tablonun en son hanesinde ilk değer kaç Analog giriş olduğunu / işaretinden sonraki değer ise harici referans voltaj girişi adedini gösteriyor. Seçtiğimiz değerde burası 3/0 olarak görülmektedir. Anlamı 3 adet Analog giriş ve sıfır referans voltajı var demek. Zaten biz Pic’in kendi voltaj girişlerini kullanmak istediğimizden gerçektende bize sıfır referans girişi lazımdır.
Pic’in voltaj girişleri referans voltajı olarak seçildiğinde Pic’e giren Analog voltaj değerinin 5 Volt’u aşmamasına dikkat edilmelidir.
Bu şekilde tablonun kullanılmasını anlattıktan sonra bu aşamada tüm girişlerin Digital seçilmesi konusunda değinmek isterim. Analog girişlerin Digital olarak kullanılması istenir ise tablodan sağ tarafta 0/0 değerinin bulunduğu satırda PCFG3:PCFG0 değeri 0111 (Desimal 7) olarak görülür. Demek ki ADCON1=7 veya ADCON1=%0111 dediğimiz zaman Pic 17F877 nin Analog girişleri iptal edilerek normal Digital giriş çıkışa dönüştürülmektedir. A/D çeviricisi bulunan Piclerde aksine bir komut bulunmaz ise ilk açılışta A/D pin’ler Analog olarak açılırlar. Dolayısıyla bu pinleri Digital kullanmak isterseniz mutlaka Adcon1=7 komutunu vermeniz gerekir.
Bu kadar bilgi bir örnek üzerinde çalışmamız için yeterlidir. Şimdi bir örnek program yapalım.
Örnek Program:
Bu programımız AN0 yani PORTA.0 bacağına bağlayacağımız bir potansiyometre üzerinden voltaj okuması yapılmasını sağlayacaktır.
Bu durumda 1 adet Analog giriş gerekiyor. PCFG3:PCFG0 değeri olarak tablodan 1110 değerini seçiyoruz. Bu seçenek tek Analog giriş (AN0-RA0) verdiği gibi Pic in voltaj girişlerini de referans voltajı olarak kullanmamızı sağlamaktadır. Devremiz aşağıdaki gibi olacaktır.
Şimdi Programımızı yazalım
‘**************************************************************** ‘* Name : ADC.BAS * ‘* Author : [ETE] * ‘* Notice : Copyright (c) 2005 [ETE] * ‘* : All Rights Reserved * ‘* Date : 20.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 ‘Örnekleme zamanı mikro saniye cinsinden. ‘——————————————————————————- ADCON1=%10001110 ‘7. bit 1 yapıldı 10 bit sonuç almak için. ‘——————————————————————————- HAM var word ‘ADC den okunan ham Digital değer. VOLT var word ‘16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak. Mvolt 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 Ham=ham+1 ‘Hesap kolaylığı açısından Ham değerini bir artırdık ‘Okunan değer 0-5 volt için 0-1024 olacağından okunacak değer başına volt değeri ‘ 5/1024 =0,0048828 olacaktır. Sayı çok küçük olduğundan bu değeri 1000 ile ‘çarpmalıyız. O halde (Okuma/V)= 4,8828 bu değeri 256 ile çarpar isek ‘4,8875 x 256 = 1250 değerini buluruz. Bu değeri kullanarak 32 bit işlem yapabiliriz. ‘1250 değeri (5/1024)*256 değerine karşılık gelmektedir. ’sonuçta ADC HAM değerini bu sayı ile çarpıp 256′ya bölersek sonucu elde etmiş oluruz. ‘ancak sonuç 32 bitlik sınırda olduğundan bu işi 32 bit çarpma ile yapıyoruz ve orta ‘baytı aldığımızda ise zaten sayının 256′ya bölünmüş halini aldığımızdan başka bir ‘işlem yapmadan sonucu elde etmiş oluruz. Volt=(ham */ 1250)/100 ‘Ham ile 1250 yi 32 bit olarak çarp ve 100′böl Mvolt=Volt // 10 ‘Mvolt= Volt MOD 10 ‘Burada yeni bir komut veya işlem şekli görüyorsunuz. MOD alma yani (//) kalan bulma ‘Bir sayını başka bir sayıya bölünmesinden sonra kalan miktarı bulma işlemine MOD ‘alma denir. Örnek W=A//1000 , A’yı 1000′e böl kalanı W değişkenine koy anlamındadır. ‘bizde yukarıda Mili volt değerini bulmak için volt (10 ile çarpılmış halini) 10′a ‘bölüp kalanı Mvolt değişkenine yerleştiriyoruz. Volt=Volt/10 LCDOUT $FE,$C0,” VOLT=”,#VOLT,”,”,# Mvolt PAUSE 500 GOTO BASLA
ADC işlemlerinde ölçümler genelde çok kararlı olmaz. Bir biri arkasına yapılan ölçümlerde ufak tefek farklılıklar görülebilir. Bu nedenle çoğunlukla ortalama alma metodu kullanılır. Aynı yerde birden fazla ölçüm alınır ve sonuçlar toplanır. Sonuçta kaç adet ölçüm yapılmış ise toplam, o sayıya bölünür. Örnek vermek gerekir ise;
For I=1 To 10
ADCIN 0,HAM
TOPLAM=TOPLAM+HAM
NEXT I
HAM=TOPLAM/10
Sonuçta Ham değeri 10 adet ölçümün ortalamasını gösterecektir ve oldukça kararlı bir değer olacaktır.
ADC çevirme işlemlerinde en önemli husus elde edilen Ham değerin istenen değere çevrilmesi için oluşturulacak formülün bulunmasıdır. Örneğin bir sıcaklık ölçümü yapıyorsunuz ve bir ısı sensörü değerini ölçüyorsunuz. 8 bitlik bir işlemde 0-255 arası değerler , 10 bitlik bir işlemde 0-1023 arası değerler bulacaksınız. Peki bu değerleri nasıl sıcaklık değeri olarak göstereceksiniz. İşin önemli noktası burası.
Hemen şu hesaplamayı yapmalısınız. 8 bit hesaplama için , Sensör den okunabilecek en yüksek değer 255 olacaktır. Peki bu değer kaç derece sıcaklığa eşdeğerdir?. Yani Sensör ün gösterebileceği maksimum sıcaklık ne olacaktır. Bunu sensör bilgilerinden (bilgi formu veya üretici bilgilerinden) alacaksınız. Diyelim ki 120 dereceye eş değerdir. O halde birim okuma başına düşen sıcaklık değeri 120/255 =0,470 derece olacaktır.
Bunu Pic de kullanabilmek için 0,470 x100 = 47 olarak bir değer elde edilecektir. Demek ki ben okuduğum değeri 47 ile çarpıp sonucu 100 e bölersem sıcaklığı bulabilirim.
O halde sensör den okunan 134 dijital değerinin sıcaklık karşılığı ne olacaktır diye sorduğumuzda formülümüz bize;
Sıcaklık =(134 x 47)/100=62,98 derece olarak bulunacaktır.
ADC konusunda söylenecek son söz olarak üzerinde ADC çevirici bulunan her Pic farklı özellikler taşıyabilir. En azından Analog pinlerinin ayarlanması işlemi farklı olabilir. Bu nedenle farklı Pic ler ile çalışırken mutlaka bilgi formlarında belirtilen ADC özelliklerine göz atmanızı tavsiye ediyorum.
Diğer bir husus da program başında verilen ADC DEFINE parametrelerinin ayarlanmasıdır.
Bunlar;
DEFINE ADC_BITS 10 ‘A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 3 ‘Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100 ‘Örnekleme zamanı mikro saniye cinsinden.
Sırası ile tekrar gözden geçirirsek;
DEFINE ADC_BITS 10 ADC çevirim sonucunun kaç bitlik olacağını ayarlamaktadır. Sonuç 8 bit ise buraya 8 , 10 bit ise buraya 10 yazılmalıdır. Tabiiki kullanılacak değişken tespit edilen Bit değerine uygun olmalıdır.
DEFINE ADC_CLOCK 3 ‘Clock kaynağı (3=rc) Adc çevrim işlemlerinde her bit karşılığı bir Clock palsı ile belirlenir. Clock kaynağı olarak Pic in osilatörü veya dahili RC osilatör kullanılır. ADC işlemlerinde Bit başına çevirim süresi yaklaşık 1,6 mikro saniye olmalıdır. Pic in kendi osilatörü kullanılacak ise bu süreyi tutturmak için sistemi çalıştıran kristal frekansına göre bir hesap yapılıp gerekli parametre bulunmalı ve buraya yazılmalıdır. Şimdi örnek bir hesap yapalım.
Bu hesapta kullanabileceğimiz formül şöyledir;
Tçevirim= X/Fosc. Burada X değeri 2 veya 8 veya 32 olabilmektedir. Fosc ise kristal frekansı olup MHZ cinsindendir. Tçevirim=1,6 us. Olduğuna göre şimdi diyelim ki kristal frekansımız 4 Mhz ve Pic’in osilatörü nü kullanacağız. Hesaba göre ;
(00) Tcevirim=2/4 = 0,5 us çıkar 1,6 dan çok küçük olduğu için uygun değildir.
(01) Tcevirim=8/4 = 2 us çıkar 1,6 dan büyük ve yakın olduğu için kullanılabilir.
(10) Tcevirim=32/4 = 8 us çıkar 1,6 dan çok büyük olduğu için uygun değildir.
Kullanılabilir olan 8 değerinin Define komutundaki karşılığı (%01=1) 1 dir.O halde komut
DEFINE ADC_CLOCK 1 ‘olacaktır.
Aynı hesabı 20 MHz için yapar isek;
(00) Tcevirim=2/20 = 0,1 us çıkar 1,6 dan çok küçük olduğu için uygun değildir.
(01) Tcevirim=8/20 = 0,4 us çıkar 1,6 dan çok küçük olduğu için uygun değildir.
(10) Tcevirim=32/20 = 1,6 us çıkar 1,6 ile aynı olduğundan çok uygundur.
O halde komut; (%10=2)
DEFINE ADC_CLOCK 2 ‘olacaktır.
Kristal osilatör ün uygun olmadığı durumlarda (%11=3) bu komut 3 olarak verilerek dahili RC osilatör kullanılır. En çok kullanılan seçenek budur.
Son olarak;
DEFINE ADC_SAMPLEUS 100 komutunu inceleyelim.
ADC çevirim işleminin dahili bir kondansatörün önce şarj edilip sonra deşarj olma süresinin ölçüldüğünü söylemiş idik. Belirtilen ADC_SAMPLEUS süresi ADC işleminin başlatılmasını müteakip yani ADON bit inin set edilmesini müteakip uygulanan bir gecikme süresidir ve bir yerde kondansatörün şarj süresi olarak açıklanır. Genelde 50-100 us dolayındaki süreler çevirim için uygun gelmektedir.
Son bir örnek vererek ADC konusunu bitirelim.
Örneğimiz 5K değerinde bir termistör ün ısı sensörü olarak kullanımına ait bir örnek olacaktır. Termistör değerini ölçerek ekranda buna karşılık gelen sıcaklık değerini göstermeye çalışacağız. Kullanacağımız termistör NTC (Negative Temperature Coefficient) tipi bir termistör olacak yani sıcaklık arttıkça direnç değeri azalacak. Birde PTC tipleri mevcut olup bunlarda sıcaklık arttıkça direnç değeri de artmaktadır.
Programa geçmeden önce bazı varsayımlarımız olacak. 5 K lık termistör ’ün değeri 25 oC de ölçülen değeridir. Varsayalım ki 0 oC de ki değeri 6 K olsun. 50 oC de ise 3 K olsun. Bu kriterleri kullanarak programımızı yazalım. Amacımız bu termistör ü kullanarak bir termometre yapmak olacaktır. Önce devremizi verelim
5 K lık termistör 0 derecede 6 K olacağı ve 50 derecede 3K ya düşeceği için yaklaşık 3K lık bir direnç sabit kalmakta yalnızca 3 K lık bölüm değişmektedir. O nedenle şemada 5 K lık termistör 3K (Pot) + 3K sabit Direnç olarak gösterilmiştir.
ÖRNEK PROGRAM : TERMISTOR.BAS
‘**************************************************************** ‘* 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
Hazırlayan: Erol Tahir Erdal (ETE) PICBasic Dersleri
PIC Basic Pro ile PIC Programlama 5 Kod ve simülasyon dosyaları;
Şifre-Pass: 320volt.com
PICBasic Dersleri PIC Basic Pro ile PIC Programlama-6 Ders-6 Devam
Yayım tarihi: 2010/04/30 Etiketler: kılavuz ders, pic basic dersleri, PIC programlama, picbasic eğitim, picbasic pro
Hocam emeğiniz için teşekkür ederiz. Takip ediyoruz. Bu derse ek olarak ısı mesela 30 derece olunca bir led yansa yada röle açılsa 37 derece olunca kapansa bunla ilgili komut ne yazmalıyız. teşekkürler.
“4,8828 bu değeri 256 ile çarpar isek” neden 256 ile çarpıyoruz. tam olarak anlayamadım.
Pic Basic de bir matematik işlemi vardır işareti de */ şeklindedir. C=(A*/B)
Bu bu işaretin sol tarafındaki sayının (A) sağ tarafta yer alan sayı(B) ile çarpılıp 256 ya bölünmüş halini verir (C=A*B/256) Bu nedenle eşitlik bozulmasın diye önce 256 ile çarpıyoruz ve işlem sonucunda hesaplanan değer 256 ya otomatik bölündüğü için eşitlik bozulmamış oluyor.
Aslında */ işlemi için 32 bit çarpma yapılıyor ve ortadaki 16 bitlik değer alınıyor şeklinde bir açıklama vardır. Bu açıklama da doğrudur.
Ete
hocam 50 derecede 256 ve 0 derecede 146 değer okunduğunu nasıl hesapladınız?
256 ve 146 değerleri hesaplanan değerler değildir. Sonuçta kullanılan malzeme bir Termistördür ve kullanmayı düşündüğünüz ortamda maksimum sıcaklıktaki direnç değeri ile min sıcaklıktaki direnç değerlerini ölçerek bulabilirsiniz. Bende öyle yaptım. Yaptığım değerlendirmede 50 derece ile 0 sıderece deki direnç değerlerini okudum. SOnra bunu bir simulasyona devresine uyarladım. Değişen miktar yalnızca 3K lık kısım olduğu için 6K lık termistörü 3K sabit direnç ve devamında sıcaklığa göre değişen 3K lık bir ayarlı direnç ile simule ettim. Bu düzeneği kurunca (simualsyon devresine bakınız) Maksimum sıcaklıkta (pot minimum değerde iken) yani 50 dereceninkarşılığı olarak bana HAM=256 değerini ,ve aynı şekilde maksimum pot değerinde yani sıfır derece karşılığında bana 146 değerini verdiğini gözlemledim.
Bu değerleri kullanarak ölçüm aralığım için sıcaklık formülünü oluşturdum. Açıklaması programda vardır.
Ete
anladım hocam, siz Türkiyede bulunmaz nimetsiniz :))
TRISD=%00000001
…….
ISI değerini daha önceki derslerden hesapla
…….
IF (ISI>29) AND (ISI<38) THEN
HIGH PORTD.1
ELSE
LOW PORTD.1
ENDIF
örnek programda “Okunan değer 0-5 volt için 0-1024 olacağından okunacak değer başına volt değeri” 1024 ün matığı ne ve neden devamında 256 ile çarpıyoruz
selam yıldırım. 1024 deki amaç 10 bit lik değerin 0 ile 1023 aralığında ve toplamda 0 dahil 1024 değer olmasından dolayı oluşuyor. neden 256 ilede çarpılırın cevabını ETE hocamız bir iki mesaj yukarda bana açıklamıştı okursan görürsün. selamlar
konu yazılalı çok olmuş ancak belki cevap gelir. ilk programdaki 100e bölme olayını anlayamadım.
BAK: IF ADCON0.2=1 THEN BAK Hocam ben burada ADCON0.2 neyi ifade ediyor açıkcası anlayamadım.
Örneğin;
ADCIN0, ADCIN1,ADCIN2… (RA0,RA1 ve RA2) de girişlerimiz olsun
BAK1: IF ADCON0.2=1 THEN BAK1 ( 0 için sizin yaptığınız kod )
BAK2: IF ADCON1.2=1 THEN BAK2
BAK3: IF ADCON2.2=1 THEN BAK3
RA1 ve RA2 için yazdıklarım doğru olur mu yoksa farklı bir şekilde mi yazılması gerekiyor?
Teşekkürler
ÖNCELİKLE BU YAPILAN YAZILIM NE TÜR İŞE YARAR NE KAZANDIRIR BENİM ARADIĞIM YAZILIM 16F628A İCİN KODA YAZILAN FREKANS NE YAZILMIŞSA AYNI FREKANS ALGILADIĞINDA BUZZER VE LED İLE UYARI VERMESİNİ İSTİYORUM