LCD ekranda 4 ayrı sıcaklık okuma için yardım ltf .

Başlatan Maxim, 05 Aralık 2005, 15:34:17

Maxim

Girişlerde OP07 opamp kullandım ,
acaba bu iş için fazlamı gelir ? birde OP07 tek besleme ile çalışırmı (+,0) ?
LM324 işimi görürmü ne dersiniz ?

Erol YILMAZ

OP07 opampi Rail to Rail değildir. (-) beslemeye yakin cikis veremez.

LM324 opamp (-) beslemeye yakin calisabiliyor.
Yine de giris sinyalin cok dusuk oldugu durumu denemek te fayda var.

Su anda size LM324 daha uygun gorunuyor.

Calismalarinizda basarilar

fsan

Alıntı yapılan: "maxiboost"Fsan arkadaşım teşekkürler ,dediğin gibi ekran titremesi kayboldu .Fakat küçük bir değişiklik daha yapmam gerekiyor .

Devreyi aşağıdaki gibi değiştirdim .4 satır lcd ekran kullanıyorum .1 giriş thermocouple için diğer 3 tanesi çeşitli bilgi ekranı için kullanılacak .Eski devrede lcd ekrandaki değerlerinin hepsinin sonunda derece işareti vardı artık bunda yok ,fsan senin verdiğin değişiklikleri malesef denedim ama buna uyarlayamadım beceremedim yani,bir de 'TRISb=%XXXX1111   'portb=0 değişikliğini neden yapıyoruz onu anlayamadım .

Devre şeması :


Proteus ve Proton pic basic kod dosyası :
http://groups.yahoo.com/group/PicProjeUP15/files/MaxiBoost/thermo4.zip


sevgili maxiboost,
evet haklisin programda LCD'ye yazdirma kismina yaptigin degisiklik; Cesitli "data type" icerdiginden benim LCD'de kirpisma önlemek icin sundugum kod'da biraz degisiklik yapmak gerektiriyor.

dword "data type" ler icin:

dim dwd as dword
   
DEC_DWD:
    select dwd
        case < 10   : LCDOUT DEC1 dwd, $DF,"   "
        case < 100  : LCDOUT DEC2 dwd, $DF,"  "
        case < 1000 : LCDOUT DEC3 dwd, $DF," "
        case else   : LCDOUT DEC4 dwd, $DF,""
    endselect
return



float "data type" ler icin:

Dim fld as float 

DEC_FLD:
    select fld 
        case < 10.0   : LCDOUT DEC1 fld, $DF,"   "
        case < 100.0  : LCDOUT DEC1 fld, $DF,"  "
        case < 1000.0 : LCDOUT DEC1 fld, $DF," "
        case else     : LCDOUT DEC1 fld, $DF,""
    endselect
return


degisiklik yapilabilir.
Baska "data typler" icin yine bunlara benzer uygun bir yöntem kullanilir.  

portb.0-3 girisler ile ilgili sorun:
portb semada bir yere bagli değil simdilik galiba? ama sen ileride kullanmayi düsünüyorsan  sorun yok. Sadece "TRISB" tanimlamasi yaparsin olur biter.

kolay gelsin

ipek

arkadaslar fikret hocamin izniyle soyle bir proje buldum motor manifolt
isilarini gozlemlemek icinmis
http://www.aprsworld.com/thermok/
kalin saglicakla ..

Maxim

Alıntı yapılan: "ipek"arkadaslar fikret hocamin izniyle soyle bir proje buldum motor manifolt
isilarini gozlemlemek icinmis
http://www.aprsworld.com/thermok/
kalin saglicakla ..

Bu da çok güzel bir çalışma .Tam benim istediğimi yapmış .

Maxim

Fsan teşekkürler dediğin gibi yaptım oldu ,kıpraşma falan kalmadı .

Programı baştan aşağı bir gözden geçirmek gerekiyor ,
sanki girişler birbirine karışıyor tuhaf bir durum var .


Videoyu seyrederseniz daha net anlaşılıyor ,girişlerde henüz LM324 opamp kullanmadım ,
Birinci girişe AD595'in çıkışı bağlı ,
devrede regülator olarak 7805 kullandım ,AD595'i 5 volt ile besledim ,haliyle ilk girişi 1200 den 500 e indirdim yani
5 volt gelince lcd ekranda 500 C gösteriyor ,bu girişte 5.1 volt zener var,diğerlerinde zener yok .
geri kalan 3 adet girişi kısa devre yapıp 25k lık bir potansa verdim ,işte klasik olarak potansın bir ucu 5 voltta
değer ucu şasede ,orta ucuda bu sözkonusu 3 girişe bağlı.
Normalde 20 C gözüken değer potans ile oynadığınız zaman değişiyor
ufakta olsa ! nedendir acaba ?

Son olarak her giriş için buton kullanarak set değeri (alarm) atamak mümkün olabilirmi ?
Daha önce bana yardım eden arkadaş ile yapmıştık ,programı bulamadım ,bulunca buraya koyarım ,
tabi o ilk yaptığımız program bundan baya farklı olmasına rağmen şöyle çalışıyordu .
Butona bastığınız an ekranda set değeri yazısı çıkıyor ve her basışınızda bu değer 10'ar 10'ar yükseliyor ,
butona arka arkaya basarak örnek olarak set değerini 860 yaptınız diyelim ,sıcaklık 860 dereceyi geçtiği zaman
pic'in bir çıkışı aktif oluyor ,artık oraya bir led takabilir veya buzzer bağlayabilir
veya bir transistör kullanarak röle çektirebiliyorsunuz .


Resim:



Video:
http://rapidshare.de/files/13502145/test.avi.html


DEVICE 16F877	

    Declare XTAL 4
   'OSILATOR FRKANSI 4MHz OLARAK BELIRLENIR

  		'2x16 LCD icin ayarlar tanimlanir
		'4 bit baglanti
        Declare LCD_DTPIN	PortD.4
        Declare	LCD_RSPIN	PortD.1
        Declare	LCD_ENPIN	PortD.0
        Declare	LCD_INTERFACE	4
        Declare	LCD_LINES	2 

		'ADC icin tanimlamalar
       	Declare ADIN_RES	10
        Declare ADIN_TAD	FRC
        Declare ADIN_STIME	100
		   
    'EKRANA YAZDIRILACAK ADC DEGISKENLERI TANIMLANIR
    DIM ADC_KANAL1 AS FLOAT
    DIM ADC_KANAL2 AS FLOAT
    DIM ADC_KANAL3 AS FLOAT
    DIM ADC_KANAL4 AS FLOAT
    
    'ISLEMLER ICIN GEREKLI GECICI DEGISKENLER TANIMLANIR
    DIM TEMP1 AS BYTE    
    DIM W1 AS WORD
    DIM W2 AS FLOAT
    Dim W3 As Float
    Dim W4 As Float
    Dim W5 As Float
    DIM DWD0 AS DWORD
    Dim DWD1 As DWord
    DIM FLD0 AS FLOAT
    DIM FLD1 AS FLOAT
        
   'OLCUM VOLTAJI
   DIM OLCUM_VOLTAJI AS 500
   DIM OLCUM_VOLTAJI1 AS 12
   Dim OLCUM_VOLTAJI2 As 100
   Dim OLCUM_VOLTAJI3 aS 5
   
   DIM ADC_ORNEKSAYISI AS 100

GOTO RESET_VECTOR

;********************************************************************
PRJ_LOOP:
    ASM
        NOP
        NOP
        CLRWDT
        NOP
        NOP
    ENDASM
    call    adc_oku
    DELAYMS 1
GOTO PRJ_LOOP

;********************************************************************
'BU BOLUMDE ISLEMCININ BASLANGIC AYARLARI YAPILIR
RESET_VECTOR:
    ASM
        BCF	INTCON,GIE
        BTFSC   INTCON,GIE
        GOTO    RESET_VECTOR
    ENDASM

    ;ENERJI HATLARINDAKI PARAZITIK ETKI ICIN ACILIS GECIKMESI
    DELAYMS 1000
 
    TRISA=%00111111
    ADCON1 = %10000010	   ' Set PORTA analog and right 
    INTCON=%00100000
    
    PRINT $FE, 1 ;lcd temizlenir

    TEMP1=ADC_ORNEKSAYISI
    ADC_KANAL1=0
    ADC_KANAL2=0
    ADC_KANAL3=0
    ADC_KANAL4=0

GOTO PRJ_LOOP

;********************************************************************
ADC_OKU:
	'ORNEKLER ALINIR VE ORTALAMA DEGER HESAPLANIR
	'BU EN DOGRU DEGERI YAKALAK VE
	'ADC GORUNTULEME HIZINI YAVASLATMAK ICINDIR

ADC_OKU_1:    
    ADCIN 0,W1
    ADC_KANAL1=ADC_KANAL1+W1
    
    ADCIN 1,W1
    ADC_KANAL2=ADC_KANAL2+W1

    ADCIN 2,W1
    ADC_KANAL3=ADC_KANAL3+W1

    ADCIN 3,W1
    ADC_KANAL4=ADC_KANAL4+W1
    
    TEMP1=TEMP1-1
    IF TEMP1>0 THEN RETURN 
	
    ADC_KANAL1=ADC_KANAL1/ADC_ORNEKSAYISI
    ADC_KANAL2=ADC_KANAL2/ADC_ORNEKSAYISI
    ADC_KANAL3=ADC_KANAL3/ADC_ORNEKSAYISI
    ADC_KANAL4=ADC_KANAL4/ADC_ORNEKSAYISI
	
    W2=OLCUM_VOLTAJI
    W3=OLCUM_VOLTAJI1
    W4=OLCUM_VOLTAJI2
    W5=OLCUM_VOLTAJI3
    
    W2=W2/1023
    W3=W3/1023
    w4=w4/1023
    W5=W5/1023
    
    ADC_KANAL1=ADC_KANAL1*W2
    ADC_KANAL2=ADC_KANAL2*W3
    ADC_KANAL3=ADC_KANAL3*W4
    ADC_KANAL4=ADC_KANAL4*W5
    
    cALL EKRANI_YAZ

    TEMP1=ADC_ORNEKSAYISI
    ADC_KANAL1=0
    ADC_KANAL2=0
    ADC_KANAL3=0
    ADC_KANAL4=0
	           
RETURN
;********************************************************************
EKRANI_YAZ:

    DWD0=adc_kanal1
    PRINT $FE, $80
    PRINT "A->"
    'PRINT $DF
    GOSUB DEC_DWD0
   	
   	FLD0=ADC_KANAL2 +8
    PRINT $FE, $88
    PRINT "B->"',DEC1 (ADC_KANAL2 +8)
   	GOSUB DEC_FLD0
   	
    DWD1=ADC_KANAL3
    PRINT $FE, $C0
    PRINT "C->"
    GOSUB DEC_DWD1
    
    FLD1=ADC_KANAL4	
    PRINT $FE, $C8
    PRINT "D->"
   	GOSUB DEC_FLD1
   	
RETURN

DEC_DWD0:
select dwd0 
        case < 10   : PRINT DEC1 dwd0, $DF,"   " 
        case < 100  : PRINT DEC2 dwd0, $DF,"  " 
        case < 1000 : PRINT DEC3 dwd0, $DF," " 
        case else   : PRINT DEC4 dwd0, $DF,"" 
    endselect 
    
return

DEC_DWD1:
select dwd1 
        case < 10   : PRINT DEC1 dwd1, "%","   " 
        case < 100  : PRINT DEC2 dwd1, "%","  " 
        case < 1000 : PRINT DEC3 dwd1, "%"," " 
        case else   : PRINT DEC4 dwd1, "%","" 
    endselect 
 
 RETURN

 DEC_FLD0: 
    select fld0 
        case < 10.0   : PRINT DEC1 fld0, "*","   " 
        case < 100.0  : PRINT DEC1 fld0, "*","  " 
        case < 1000.0 : PRINT DEC1 fld0, "*"," " 
        case else     : PRINT DEC1 fld0, "*","" 
    endselect
     
return 

DEC_FLD1: 
    select fld1 
        case < 10.0   : PRINT DEC1 fld1, "V","   " 
        case < 100.0  : PRINT DEC1 fld1, "V","  " 
        case < 1000.0 : PRINT DEC1 fld1, "V"," " 
        case else     : PRINT DEC1 fld1, "V","" 
    endselect
     
return 

END



Proteus simulasyonu ve programı her zaman olduğu gibi ,
http://groups.yahoo.com/group/PicProjeUP15/files/
Maxiboost altında thermo5.zip dosyasında bulabilirsiniz.

Maxim

Daha önce yaptığımız alarm set çalışmasını,
http://groups.yahoo.com/group/PicProjeUP15/files/
Maxiboost altında eski_alarmset.zip dosyasında bulabilirsiniz.

Maxim

Arkadaşlar slm ,
valla yüzdüm yüzdüm kuyruğuna geldim diyim artık ,
bi el atında bitireyim şunu özellikle FSAN arkadaşım sana diyom  :)  çok yardımın dokundu daha önce ,belki yoğunsundur bu aralar bilemiyorum .

Eklemek istiyorum ,

programda Declare ADIN_STIME   100 satırı var ,bu sampling olayını 50 veya 20 yaparsanız yani sampling olayını arttırırsanız bu bahsettiğim problem çok belirgin oluyor .


Bu arada burayada yazayım LMC6484 opampı nereden bulabilirim acaba ,bu hem rail-to-rail hemde tek beslemeli bir opamp .Karaköyde baktım bi kaç yerde yok .

fsan

Alıntı yapılan: "maxiboost"Programı baştan aşağı bir gözden geçirmek gerekiyor , sanki girişler birbirine karışıyor tuhaf bir durum var .

devrede regülator olarak 7805 kullandım

merhaba arkadasim,

Yazdigin kodu proteuste simüle edince yukaridaki bahsettigin sorun yok.

Birde OPAMPlari bulunca (girislere yakin bir yere) bagladiktan sonra dene bakalim nasil olacak.  

ayarlama yaparken 7805 cikisndaki gerilim degisiyor galiba? Birde resimde bir sürü kablolar var; parazit olayi olabilirmi acaba?

kolay gelsin

Maxim

Alıntı yapılan: "fsan"
Alıntı yapılan: "maxiboost"Programı baştan aşağı bir gözden geçirmek gerekiyor , sanki girişler birbirine karışıyor tuhaf bir durum var .

devrede regülator olarak 7805 kullandım

merhaba arkadasim,

Yazdigin kodu proteuste simüle edince yukaridaki bahsettigin sorun yok.

Birde OPAMPlari bulunca (girislere yakin bir yere) bagladiktan sonra dene bakalim nasil olacak.  

ayarlama yaparken 7805 cikisndaki gerilim degisiyor galiba? Birde resimde bir sürü kablolar var; parazit olayi olabilirmi acaba?

kolay gelsin

Valla bende anlayamadım o yüzden sanki programda bir hata yapmışım gibi geldi ,dediğin gibi isis simulasyonunda taş gibi çalışıyor .
Şu an baskı devreyi çizmeye başladım ,önce delikli plaketemi yapsam falan dedim vazgeçtim ,dediğin gibi Lm324 leride takıp deneyeyim .
4 satır lcd ekranımda yarın geliyor .

https://www.picproje.org/index.php/topic,8612
Burayı okuyabilirsen sevinirim .

Göktuğ


Maxim

Evet oldu ,bende tam onları yazacaktım bugün .

Bu gelen 4x20 lcd ekranım


Bu gelen typek sensörüm ,


Süper süper ,


Bu pcb nin daha bitmemiş hali ,


Bu şemanın bitmemiş hali ,


Bu 4-20ma simetrik beslemeli 0-5 volt çevirici ,


Bu da 4-20ma çevirici için açtığım topiğin linki ,
https://www.picproje.org/index.php/topic,8612


Gelelim son duruma ,

Bu gerilimlerin karışma olayı girişlere opamp koyduktan sonra kayboldu bilginize .

Toplam olarak 6 girişli bir adc olacak ,

1. giriş AD595 e bağlı ,eksozt manifoldunda takılı olan sensöründen gelen ısı değerini gösterecek ,0-1200 C
2. giriş wide band lambda dan gelen hava yakıt karışımını gösterecek ,8.0 -20
3. giriş aracın gaz kelebeğinde takılı bulunan potansa bağlanacak % olarak ne kadar gaza bastığınız gözükecek .Potans yaklaşık 0-5 volt arasında bir gerilim üretiyor .
4. giriş basit ,gerilim okuyucu ,akü voltajı yani ,0-16 volt arası .
5. giriş sıkıntılı yer olan basınç girişi ,aracın benzin basıncını gösterecek 0-10 bar arası .
6. giriş biraz düşündüm sonra buraya da araç içinin sıcaklığını görebilmek için bir tane lm35 bağladım ,yani 0 -100 C .Burası değişebilir .


Fakat şu anda en büyük sorunum 4-20 ma çevirici devrede ,bunun için simetrik kaynağım yok .Eğer fsan yardım ederse böyle bir devre yapmadan direkt olayı yazılım ile çözebiliriz .Yani sorun picin girişine 1 volt civarı verdiğimizde bunu 0.0 olarak ,5 volt verdiğimizde 10.0 olarak
ekrana yazdırabilmek .

İkinci problemim de sadece birinci girişe bir adet set değeri tanımlayabilmek ama bu çok dert değil .

Veli B.

Adc girişinde ki değerinin %20 sini (0,8 ile çarparak)yazılımla öldür.Atıyorum 4V mu ölçüyorsun, bunu 3,2V a düşür.sonraki adımda yeni oluşan değeri 2,5 ile çarp.İstediğin işi yapacaktır.

Edit:
Sanırım değerleri kurallara göre yazmadığım için oldu.
A)  4 derken kastım 4 volt idi
B)  320 derken kastım 3,2V idi.
Özür dilerim tam olarak yazmadığım için...

OG

R2 ye paralel 5V1 zener ve 100nF+100uF koyarsan iyi olur. Olası sıçramalar zenerle engellenir, akü hattındaki ani değişiklikler de kondansatörlerle elimine edilir. Voltajdaki lüzumsuz oynamaları görmemiş olursun.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Maxim

Alıntı yapılan: "katana"Adc girişinde ki değerinin %20 sini (0,8 ile çarparak)yazılımla öldür.Atıyorum 4 mü ölçüyorsun, bunu 320 ye düşür.sonraki adımda yeni oluşan değeri 2,5 ile çarp.İstediğin işi yapacaktır.

ne değişekki bu şekilde ? gene sonuç aynı değilmi ?