MCP4921 DAC SORUN.

Başlatan EMKE, 19 Şubat 2015, 00:03:13

EMKE

Arkadaşlar herkese iyi akşamlar yaptğım devrede 10 volt dc gerilim elde etmem lazım bunun içinde pıc ve dac entegresi olan mcp 4921 kullandım ısıs uygulamasında gayet başarılı sonuç aldım uygulamaya döktüğümde ise hiç voltaj alamıyorum entegreden daha öncebu entegre ile uygulama yapan arkadaşlardan ve tecrübeli büyüklerimden bilgilerini paylaşmlarını istiyorum benim mcp4921 için yazdığım kod aşağıdadır ve isis uygulamasında bir sıkıntı yok entegre arızalı olabilir belki diyebilirsiniz 3-4 entegre ile denedim voltaj yok entegre çıkışında.

       HIGH CS2
       PAUSEUS 500
       LOW CS2
       SHIFTOUT SDI2,SCK2,1,[%0011,DATAA\12]
       HIGH CS2
       LOW LDC1
       PAUSEUS 1
       HIGH LDC1
       RETURN   

ete

Pic çalışmıyorsa entegrede çalışmayacaktır. Önce pic in çalıştığından emin ol.
Programı bozmadan boş bir pinden flash şeklinde sinyal çıkar (bir high bir low aralarında en az 100 ms zaman olsun) böylece pic çalışıyorsa bu sinyali görebilir yada en azından ibreli bir ölçü aleti ile görürsün. Daha sonra mcp ile uğraşırsın.
Simulasyonda çalışıp gerçekte çalışmayan devreler içşn önemli bilgiler bölümünde yazmış olduğum bir yazı var onuda okumanda yarar var.

Ete

EMKE

pıc de bir sorun olduğunu zannetmiyorum hocam çünkü pıc ile 4 lü 7 segment displayi kontrol ediyorum şu anda bir sıkıntı yok .

ete

Komuta bakılırsa ( SHIFTOUT SDI2,SCK2,1,[%0011,DATAA\12])
Kazanç=1, ve OUTPUT enable edilmiş.
Bu durumda diğer kriterlere sırası ile bakmak gerek;
1. DATAA registeri =0 dır bu nedenle çıkışta bir değer yoktur. Anlamak için SHIFTOUT komutundan evvel,
DATAA=2048 değerini ver bakalım sonra çıkışa bakıver. Bu arada DATAA değişkeni WORD cinsindenmiş kontrol et.
Çıkış olarak VoutA seçilmiş ona bakman gerekiyor.

2. Vref girişinde 5V olması gerekir. Bu varmı onuda kontrol et.

3. LDAC pini başlangıçta HIGH da tutulmalı data aktarımı yapıldıktan sonra önce LOW sora HIGH yapılmalı.
Bunu yapıyorsun ama öncesinde LCDA nın değeri nedir o belli değil. Onuda shift kısmına eklersen iyi olur.
Ayrıca LOW LDAC yerine LCDAC=0 :PAUSEUS 1:LDAC=1  şeklinde komut kullan.

Bunların dışında yapacak başka bir şey yok zaten.
Ete


Hattuşa

@emke ustam, devrende PIC kullanacaksan ve 1 adet dac çıkışı lazımda  içinde dac olan (mesela 16F1827,16f1826) gibi bir entegre kullanabilirsiniz. bu daha basit olmaz mı? tabi çıkışın ne kadar hassasiyette olduğunu bilmediğim için böyle yazdım ben zira dediğim entegrede dac çıkışı 32 adım

EMKE

Malesef 2 tane dac çıkışı lazım sıkıntı burda mcp4921 simülasynda çok iyi çalışıyor yazdığım kodlardada sıkıntı görünmüyor  anlamadım entegrelermi bozuk acaba yeni entegre alıp deneme yapıcam sonucu yazıcam artık .

mihran1967

işine hala yararmı bilmiyorum ama ben aşağıdaki kodu kullanıyorum .

get_adc            bsf   adc_cs
            clrf   adc_LByte
            clrf   adc_HByte
   
            bcf   adc_clk
            bsf   adc_din      

            bcf   adc_cs

      ;---------------------------------------------

            bcf   adc_clk
            bsf   adc_din
            bsf   adc_clk         ; start

      ;---------------------------------------------

            bcf   adc_clk
            bsf   adc_din
            bsf   adc_clk         ; single

      ;---------------------------------------------

            bcf   adc_clk
            bcf   adc_din
            bsf   adc_clk         ; chanel 1

      ;---------------------------------------------

            bcf   adc_clk
            bsf   adc_din
            bsf   adc_clk         ; ms bf

      ;---------------------------------------------

            bcf   adc_clk
         ;   bsf   adc_clk         

      ;---------------------------------------------

            btfsc   adc_dout
            goto   $-1

      ;---------------------------------------------

            bsf   adc_clk
            bcf   adc_clk         ; null bit




            movlw   .4
            movwf   sayac
      
next_adc_h      bcf   adc_clk
            nop
            bsf   adc_clk

            clrc
            btfsc   adc_dout
            bsf   STATUS, C
            rlf   adc_HByte

            decfsz   sayac
            goto   next_adc_h   

            movlw   .8
            movwf   sayac         
      
next_adc_l         bcf   adc_clk
            nop
            bsf   adc_clk
      
            clrc
            btfsc   adc_dout
            bsf   STATUS, C
            rlf   adc_LByte

            decfsz   sayac
            goto   next_adc_l

            bsf   adc_cs
            bsf   adc_clk

            return

Powered by EzPortal