16f876 adc device ayarları yardım lütfen

Başlatan microlight, 12 Nisan 2011, 13:15:32

microlight

ete hocamızı  adc projelerini 16f876  da  yapmam için adc pıc ın  adc device ayarlarında yardımcı  olurmusunuz size zahmet . ete derslerindeki projelerin  küçük  kısımlarını  değiştirdim ama bord da  çalıştıramadım. diğer sorum ise16f628 device ayarları led yakıp söndürmek için, herşeyde  yeniyim..  uygulamada  kullanılan  lcd ve  pıc leri  yeni  sipariş  verdim daha acemiyim  lütfen yardımcı olun. malzemem var  ama  yeterli uygulama için  yeterli  değilim.teorikte  ette derslerini 11. derse  kadar  okudum.  pıc lerin device  ayarlarını öğrenebilmem için bir kaynak  gösterebilimisiniz.
ilk kodda pot uygulaması. ham, 500 den  büyük olunca led  yanacak
  kodları  ekliyorum 
TRISA=%00000001
TRISB=0
TRISC=0
TRISD=0
@ DEVICE pic16F876A
@ DEVICE pic16F876A, WDT_on
@ DEVICE pic16F876A, PWRT_ON
@ DEVICE pic16F876A, PROTECT_OFF
@ DEVICE pic16F876A, XT_OSC

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 cinsinde

INTCON=0
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.

BASLA:
ADCIN 0,HAM '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
IF VOLT > 500 THEN  
HIGH PORTB.4
ELSE
LOW PORTB.4
ENDIF
BAK: IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.     
Ham=ham+1 
Volt=(ham */ 1250)/100 
Volt=Volt/10
PAUSE 500

GOTO BASLA
end



microlight


ete

16F876 da komparatör yoktur ama 16F876A da komparatör vardır ve A portu önseçimli olarak komparatör işlevi ile açılır.
Bu pinler aynı zamanda ADC girişleri içinde kullanılır ama önce komparatör özelliğini iptal etmek gerekir.
Bunun için CMCON=7 komutunuprogramın başına yazmalısın.

Diğer komutların doğru bu şekilde çalışması gerekir.

10 Bit ADC çevriminde potun maksimum değerinde okyacağın digital değer 1023 dür. 0-1024 toplam 1024 kademe eder .Bunun yarısı 512 dir.
O halde okuduğun adc değerine bir ekleyip 512 ile karşılaştırırsan led yakma işini yapabilirsin.
Şöyle

ADCIN 0,HAM
IF (HAM+1)>512 then
    LED=1
ELSE
    LED=0
ENDIF
ben pot değerinin yarısı olsun diye 512 aldım sen 500 demişsin oraya 500 yazarsan değerlendirme 500 e göre yapılacaktır.

16F628 de A ve A sız fark etmez Komparatör vardır. A portunu digital kullanmak için programın başına  CMCON=7 komutunu yine koymalısın.
Sigorta ayarları;
@ DEVICE pic16F628A                                   'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_on                   'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON                'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF               'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
kristal kullanacak isen son satır 6 Mhz e kadar aşağıdaki komut daha yüksek frekanslar için HS_OSC komutu kullanılmalıdır.
@ DEVICE pic16F628A, XT_OSC

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

microlight

#3
teşekkür ederim ete hocam,  sitenizde hayırlı olsun internetimi iptal ettirdiğim içim hergün giremiyorum nete  biraz uğraştım  tekrar ilgilenirmisin. led yakma programı hatalı çalışıyor, pin sürekli high çıkarıyor. sigorta ayarları baş belası sanki
[
TRISA=0 
TRISB=0
'-----------------------------------------------------------------
@ DEVICE pic16F628A         'işlemci 16F628A
@ DEVICE pic16F628A, WDT_ON 'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_OFF 'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'-------------------------------------------------------------------
 SYMBOL LED=PORTB.1
 CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
 PORTA=0
 PORTB=0
'-------------------------------------------------------------------
 BASLA:
 HIGH LED
 PAUSE 500
 LOW LED
 PAUSE 500
 GOTO BASLA
  END
][/code]


16F84A AYARLARINI YAPABİLİYORUM. 16F84A DAKİ DENEDİĞİM AYNI bread bord da
KODLARI UYGULADIM ÇALIŞTI  AMA  628 DE  ÇALIŞMIYOR......

@ DEVICE pic16F84A
@ DEVICE pic16F84A, XT_OSC
 DEFINE OSC 4
TRISB=%00000000
BASLA:
PAUSE 500
LOW PORTB.0
PAUSE 500
GOTO BASLA
END

med

 sorunun tam ne oldugunu tam anlayamadik acarsan iyi olur . fakat 16f84A ve 16F628A piclerinde adc registerleri yok bu yuzden bunlarin device tanimlamalarini yapman mumkun degil. birde 16f84 picinde deneyip basardigini soylemissin nasil basardin bunu biraz acarmisin belki ben yalnis anlamis olabilirim.
Önyargıları parçalamak ATOMU parçalamaktan daha zor. Einstein

ete

Kod da bir hata gözükmüyor. Çalışması lazım. Çalışmıyorsa pic bozuktur. Bu durumda başka bir sebep bulmak mümkün değil.
Ya devreni kontrol edeceksin yada pici değiştireceksin.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

microlight

16876a ile  adc uygulamasını çalıştırdım, 16f84 ile led yak söndürü çalıştırdım,  16f628a ile ilgili uygulamayı  çalıştıramadım. kaç kez denedim olmadı 6-7 tane ayrı ayrı 16f28a da da  denediğim halde bir türlü kod olduğu gibi çalışmadı. 16f628a ile ilgili programda, led bağlı pin  sürekli yanıp yanıp sönüyor. pause komutunu 7000 lere  kadar çıkarttığım  zamanda   pause 500  hızında sürekli  high  çıkartıyor. 

led'i başka  potrlarda da farklı  pause sürelinde  yazıp denediğimde de hiç  birşey fark  etmiyor.  pause 500  hızında sürekli  high  çıkartıyor. kullandığım hex ara yüz yükleyicim, pıc kit 2.61
pull-up  yapmağa gerek  varmıdır  PORTB çıkış  olarak  ayarlandığında ve  PORTA kullanılmadığında comparatör leri dıgıtal yapmak  zorunlumudur. bu ikiside  sebep  olabilirmi.
yardımlarınız  için teşekkür ederim.