2 kanal adc sorunu

Başlatan argeman, 07 Ocak 2015, 00:28:43

argeman

  Merhaba arkadaşlar pic in daha başlarındayım,nette bulduğum ve simülede sorunsuz çalışan ama gerçekte çalıştırabildiğim fakat hatalı çalışan bir kod için yardımcı olursanız sevinirim,günlerdir 2 kanal hazır adc devresi arıyorum malesef bulamadım,2 isteğim var sizden 1. bu devre 3 haneli olarak gösteriyor sonucu,ben kanalın 1 tanesini 4 hane olarak kullanmak istiyorum,2. ise devreyi gerçekte kurdum çalıştırdım, pot 1 i 0-100 arasında ayarlayabiliyorum fakat pot2 eğer 50 deyse pot1 yükselmiyor yada pot 2 yi son değer olan 100 yaptım diyelim ,pot 1 102 den yani son değerinden düşürürken pot2 nin değeride düşüyor,yani pot1 her iki satırada komut gönderiyor,bağımsız çalışması gerekmez mi,bu devre benim için baya önemli yardımcı olursanız sevinirim,eğer ki arşivinizde 2 kanal 4 hane ölçebilecek 2x16 lcd ekran ile kullanabileceğim devre varsa paylaşırsanız sevinirim.

Link: http://profahmet.blogcu.com/pic16f877-ile-2-kanal-adc-seviye/12898281

argeman

  Daha ilk mesajım biliyorum ama yaptığım bir kumanda devresi için benim için çok önemli,ETE hocam ve diğer arkadaşlar vakit ayırıp yardımcı olursanız sevinirim.

ete

Sistem assembly de isteniyor. Elimden bir şey gelmez maalesef.

Ete

argeman

   Devrenin isiste çalışıp gerçekte sorun çıkarması adlı yazınızıda baştan sona okudum hocam,tüm olasılıkları dikkatlice yaptım fakat yine olmadı(1 kanalı ayarlarken diğer kanalda değişiyor),15 gündür 2 kanal 4x16 lcd olarak bir adc devresini araştırmadığım site kalmadı,sizin projelerinizdede yok malesef.Peki hocam aşağıda paylaştığım lm35 ısı kontrolu kodlarında 2. kanalı ölçmek için hangi satırları eklemeliyim?
Elektronikçiyim ama programlama işine yeni başladım ve çok acemiyim.
http://www.mcu-turkey.com/pic16f877-adc-modulu-ve-lm35-sicaklik-olcum-uygulamasi/

magic_gun

kolay gelsin, programın çalışmaması için bir sorun yok
ama tahmin ediyorumki kullandıgınız F877 20 mhz versiyon degil

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_HS_OSC &_BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF 


program config satırlarında HS osilator modunda


__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC &_BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_ENABLE_OFF 


XT modunda olursa sorunsuz çalışacağını düşünüyorum

yada bu orjinal konfigrasyon ile 20mhz lik hs versiyonunu kullanmanızı öneririm

Günhan
saygı ve sevgi ile ,,,
hayal etemeden basaramazsınız
u cnt achieve w/out dreamin

argeman

   Cevap için teşekkür ederim yarın ilk işim bunu denemek olacak,umarım ondandır.İşyerim için bir sıvı seviye kontrolu yapıyorum ve sadece bu sorun yüzünden 10 gündür 2 kanal bir adc arıyorum.Saygılar.

ete

#6
Adc okumasının iki kanal yada tek kanal yapılması diye bir şey sorun olmamalıdır. Birden fazla adc okumasımolan pek çok program yazdım. İki adc ye örnek volt-amper okuma devresi olabilir. Orada hem volt hemde akım okuma için iki ayrı adc okuması yapılmıştır.
Basic de bu iş son derece basittir. Adcin kanal,değişken.  Şeklinde komut verildiği müddetçe bir çok kanaldan adc okuması yapılabilir. Kanal sayısı 0-x arasında değişir. X sayısı o şlemcide kaç tane adc kanalı (pini) varsa o kadar kabul edilir.

Data sheet bir adc okumasının nasıl yapıldığını hem laf olarak hemde asm komutları ile açıklamıştır. Zaman zaman bu açıklamayı bende kullanırım.
Programın başında adc modülü ayarlanır. Bu ayarlamada, okuma bit sayısı, clk seçimi ve kaç kanal okuma yapılacağı ilgili registerlerden ayarlanır.
Sonra işlem sırası olarak,
-adc modül on yapılır.(adon=1)
-kanal seçimi yapılır
-o işlemci için belirlenmiş acquistation yani çevrim süresi kadar beklenir.
- sonra go/done biti 1 yapılarak çevrim başlatılır.
- aynı bit in işlemci tarafından sıfır yapılması beklenir.
- ilgili bit sıfır olunca adresh ve adresl registerlerinden sonuç alınıp kendi değişkenine aktarılır.
- adon=0 yapılarak ikinci kanal işlemine kadar beklenir.
İkinci kanal ölçümü için aynı işlemler tekrarlanır.
Hepsi bu kadar.
Ete

argeman

magic gun ve ETE hocam yardımlarınız için teşekkür ederim,devremi çalıştırabilidim sonunda fakat sanırım ezbere bir iş yaptım,4mhz lik kristal yerine 2 mhz takınca tüm sorunlar gitti,problemsiz çalışıyor.

alisumer

Alıntı yapılan: argeman - 11 Ocak 2015, 19:34:49
magic gun ve ETE hocam yardımlarınız için teşekkür ederim,devremi çalıştırabilidim sonunda fakat sanırım ezbere bir iş yaptım,4mhz lik kristal yerine 2 mhz takınca tüm sorunlar gitti,problemsiz çalışıyor.

konu eskimiş ama belki birine yardımcı olur adc nin 10p kapasitörlerini dolumu için bir süre gerekir(TAD) o süre ilgili registerlerden bölücü kullanılarak uygun gecikme sağlanmalı yoksa değer doğru olarak okunmaz muhtemelen sistem hızını yarıya düşürünce o gecikmeyi sağlamış oldunuz .
	MOVLW	B'10000001'         ; 10 BİT AN KANAL 0 
MOVWF ADCON0
DECFSZ ZAMAN ,F
GOTO $-1

BCF STATUS ,RP0
BSF ADCON0 ,GO ;AN KANAL 0 OKU
NOP
BTFSC ADCON0 ,GO
GOTO $-1
MOVLW 0X22
MOVWF ZAMAN
DECFSZ ZAMAN ,F
GOTO $-1 ;16 çevrim bekler frekansına göre süre hesaplanmalı 20mhz 16 x 200 ns +200ns
MOVF ADRESH ,W
MOVWF KANAT_H
BSF STATUS ,RP0 ;BANK 1
MOVF ADRESL ,W
BCF STATUS ,RP0 ;BANK 0
MOVWF KANAT_L
Hep meraktan

Powered by EzPortal