analog sinyal çıkışı- 16f877a

Başlatan ihsan5888, 21 Aralık 2012, 15:35:21

ihsan5888

İyi günler. 16f877a mikrodenetleyiciden 0 ile 5 v arası analog çıkışı almak istiyorum. komutlarla alakalı protonun yardım kısmına ve sitesine bakdım, buradada baktım ama birşey bulamadım. isterseniz sitemi tam olarakda anlatabilirim.

zamzam23

kardeşim öncelikle foruma hoşgeldin. bu işlemcide DAC olmadığı için arada başka elemanlar kullanmalısın. DS1868 digital potansiyometre kullanarak 20-25ma 0-5V arasında değişken gerilim elde edebilirsin.

VFR

Zamzam23'ün de dediği gibi 16F877'de DAC yok , hatta PIC'in çoğu modelinde DAC yok.
Ancak , eğer tüm pinleri kullanmıyorsan , örneğin B portunun tamamını kullanarak bir merdiven DAC devresi ile 8 bitlik DAC elde edebilirsin.

ankyra

pwm cikisini (tam analog olmasa da) bazi durumlarda analog cikis gibi kullanabilirsin. (mesela bir ledin parlakligini kisip acabilirsin)

Tagli

DAC0808 piyasada kolaylıkla bulunur. 8 bit paralel arayüzlüdür. Çıkışını bir op-amp ile tamponlamakta fayda var.

Bulabilirsen MCP4922 veya MCP4921 güzeldir. SPI arayüzlüdür ve biraz pahalıdır (10 TL civarında).

ankyra'nın da dediği gibi PWM çıkışı kullanılabilir, donanımsal veya yazılımsal olarak. Çıkışına bir alçak geçiren filtre koymakta fayda var. Bu yöntem, filtre sebebiyle biraz yavaş çalışır, yani analog değerin oturması uzun sürebilir, 1-2 ms belki.
Gökçe Tağlıoğlu

Murat Mert

S.a.
Picin pwm  cikisini direnc ve kondansator  ile flitre edilip 8 bit ile 0-5 yada opamp ile 0-10 volt yaparsin yada  mcp4821 ile 12 bit dac ile 0-5 volt alirsin.
mert07

ihsan5888

benim yapmaya çalıştığım sistem şu. bende giriş 24 voltu 14-24 v çıkış olarak ayarlayabilen ve bunun kontrolunude potansiyometre sayesinde(0-11.4v) yapan bir güç elektroniği sistemi var. ben bu sistemi pic pwm burada benim işime yaramaz gibi geliyor. diğer dac cihazlarınıda nasıl kullanılır bilmiyorum proton da nasıl olur bununla alakalı döküman vs varsa, yardım ederseniz sevinirim.

ihsan5888

#7
son mesaja cevap verilmedi heralde biraz uğreş öyle gel denildi bende 1 aydır uğrasıyorum bir yere kadar geldim fakat tıkandım bundan sonra tecrübeli arkadaslardan tavsiyelerini bekliyorum.proton da yazdıgım kod şöyle. proteusda da çalışıyor fakat devrede çalışmadı bence yazılımda bişeyler yanlış. eksik bişey varsa acemiliğime verin.


Device 16F877A
XTAL 10
                     '10 Mhz Kristal kullanılıyor.
TRISA=%00000001               'PORTA.0'ı giriş diğerlerini çıkış yap
TRISB=0               'PORTB'yi çıkış yap
TRISC=0                  'PORTC'yi çıkış yap
Declare ADIN_RES 10            'A/D çevirim sonucu kaç bit olacak
Declare ADIN_TAD FRC            'Clock kaynağı
Declare ADIN_STIME 100            ' Örnekleme Zamanı
Dim des As Word
Dim seviye As Word
ADCON1 = %10000000
Main:                                                 
seviye = ADIn 0
Low PORTB

If seviye = 256 Then
PORTC.0=1
High PORTB
EndIf
If 0 < seviye And seviye < 256   Then
PORTC.0 = 1
PORTC.1 = 0
PORTC.2 = 0
PORTC.3 = 0
des = seviye
If 256>=des And des >= 128  Then
    des = des-128
    PORTB.0=1  'most significant bit
    EndIf
If 128>des And des >= 64   Then
        des = des-64
        PORTB.1=1
EndIf
If 64>des And des >= 32   Then
        des = des-32
        PORTB.2=1
EndIf
If 32>des And des >= 16     Then
        des = des-16
        PORTB.3=1
EndIf
If 16>des And des >= 8  Then
        des = des-8
        PORTB.4=1
EndIf
If 8>des And des >= 4 Then
        des = des-4
        PORTB.5=1
EndIf
If 4>des And des >= 2  Then
        des = des-2
        PORTB.6=1
EndIf
If des = 2 Then    ' less significant bit
       
        PORTB.7=1
EndIf
EndIf
If 256 < seviye And seviye < 512  Then
PORTC.1 = 1
PORTC.0 = 1
PORTC.2 = 0
PORTC.3 = 0
des = seviye - 256
If 255>=des And des >= 128 Then
    des = des-128
    PORTB.0=1  'most significant bit
    EndIf
If 128>des And des >= 64       Then
        des = des-64
        PORTB.1=1
EndIf
If 64>des And des >= 32            Then
        des = des-32
        PORTB.2=1
EndIf
If 32>des And des >= 16                Then
        des = des-16
        PORTB.3=1
EndIf
If 16>des And des >= 8  Then
        des = des-8
        PORTB.4=1
EndIf
If 8>des And des >= 4 Then
        des = des-4
        PORTB.5=1
EndIf
If 4>des And des >= 2 Then
        des = des-2
        PORTB.6=1
EndIf
If des = 2 Then    ' less significant bit
       
        PORTB.7=1
EndIf
EndIf
If 512 < seviye And seviye < 768 Then
PORTC.2 = 1
PORTC.1 = 1
PORTC.0 = 1
PORTC.3 = 0
des = seviye - 512
If 255>=des And des >= 128 Then 
    des = des-128
    PORTB.0=1  'most significant bit
    EndIf
If 128>des And des >= 64  Then
        des = des-64
        PORTB.1=1
EndIf
If 64>des And des >= 32  Then
        des = des-32
        PORTB.2=1
EndIf
If 32>des And des >= 16 Then
        des = des-16
        PORTB.3=1
EndIf
If 16>des And des >= 8 Then
        des = des-8
        PORTB.4=1
EndIf
If 8>des And des >= 4 Then
        des = des-4
        PORTB.5=1
EndIf
If 4>des And des >= 2 Then
        des = des-2
        PORTB.6=1
EndIf
If des = 2 Then    ' less significant bit
       
        PORTB.7=1
EndIf
EndIf
If 768 < seviye And seviye < 1024 Then
PORTC.3 = 1
PORTC.2 = 1
PORTC.1 = 1
PORTC.0 = 1
des = seviye - 768
If 255>=des And des >= 128 Then
    des = des-128
    PORTB.0=1  'most significant bit
    EndIf
If 128>des And des >= 64 Then
        des = des-64
        PORTB.1=1
EndIf
If 64>des And des >= 32 Then
        des = des-32
        PORTB.2=1
EndIf
If 32>des And des >= 16  Then
        des = des-16
        PORTB.3=1
EndIf
If 16>des And des >= 8  Then
        des = des-8
        PORTB.4=1
EndIf
If 8>des And des >= 4  Then
        des = des-4
        PORTB.5=1
EndIf
If 4>des And des >= 2 Then
        des = des-2
        PORTB.6=1
EndIf
If des = 2 Then    ' less significant bit
       
        PORTB.7=1
EndIf
EndIf
GoTo Main
End

http://postimg.cc/image/3s7pqjzcb