Merhaba arkadaşlar.
Arkadaşlar kendim multiplex sistemli bir saat ve termometre yapmaya çalışıyorum. Saat kısmında sorun yok fakat ısı ölçerken sorun yaşıyorum. Bu arada ısı sensörü olarakda lm35 kullanmayı düşünüyorum. Daha önce bu sensörle hiç çalışmadım tecrübe olur bana. Devrede şöyle bir sorun var adc ile sensörde okuma yapamıyorum. Yani yapıyorum fakat displaylerde 00 derece gösteriyor herzaman. Adc ölçümünde kullandığım kodlar aşağıdaki gibi yine forumda başka bir arkadaştan aldım.
ADCIN 0,HAM
IF ADCON0.2=1 THEN basla
ISI=(5*HAM)-(5*HAM/64)-(5*HAM/128)
ISI=ISI/10
Kodlarda bi sorun yok gibi çünkü başka bi devrede sadece 2x16lcd ve 16f877 ile ölçüm yapıp ekranda rahatlıkla gösterebiliyorum. Sorun gözükmüyor. Ama benim kullandığım devrede çalıştıramadım. Ayrıca saat devresinde ısı değerine kendim bir değer veriyorum (örnek ISI=23 gibi) ekranda gösteriyor. Ama kendisi ölçtüğü zaman ekranda 00 derece gibi bir değer gösteriyor. Acaba nerede sorun olabilir anlayamadım ben çeştli kodlarla denedim yine aynı şekilde
yazdığım deneme programı aşağıdaki gibidir. (programın bazı bölümleri Ete hocanın kodlarıdır.)
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 20.11.2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE OSC 4
@ DEVICE pic16F873
@ DEVICE pic16F873, WDT_on
@ DEVICE pic16F873, PWRT_ON
@ DEVICE pic16F873, PROTECT_OFF
@ DEVICE pic16F873, XT_OSC
TRISA=%00000001
TRISB=%00000111
TRISC=%00000000
PORTA=0:PORTB=0:PORTC=0
ADCON1=%10001110
OPTION_REG=%10000100
INTCON=%10100000
TMR0=99
ON INTERRUPT GoTo KESME
RTC_RST var PORTB.2
RTC_CLK var PORTB.1
RTC_DTA var PORTB.0
SH_CLK VAR PORTB.4
SH_DTA VAR PORTB.3
SH_KLT VAR PORTB.5
SYMBOL DIG0=PORTC.0
SYMBOL DIG1=PORTC.1
SYMBOL DIG2=PORTC.2
SYMBOL DIG3=PORTC.3
SYMBOL DIG4=PORTC.4
SYMBOL DIG5=PORTC.5
SYMBOL LED =PORTB.7
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI=PORTA.2
HAM VAR WORD ' Sensör HAM okuma değeri
ISI VAR WORD
ZAM VAR WORD
EKRAN_ZAM VAR BYTE
EKRAN_ISI VAR BYTE
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
AY VAR BYTE
YIL VAR BYTE
HAFTA VAR BYTE
MEM VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
SAYAC VAR BYTE
SAYI VAR BYTE
SIRA VAR BYTE
Z VAR BYTE
Y VAR BYTE
SUM VAR BYTE
SNY VAR BIT
ESN VAR BYTE
AKTAR1 VAR BYTE
AKTAR2 VAR BYTE
AKTAR3 VAR BYTE
AKTAR4 VAR BYTE
AKTAR5 VAR BYTE
AKTAR6 VAR BYTE
SNY=0
EKRAN_ZAM=10
EKRAN_ISI=5
SUM=EKRAN_ISI+EKRAN_ZAM
HIGH LED
GOSUB EKRAN0
GOSUB SENSOR_OKU
GOSUB ZAMAN_OKU
ESN=SN
BASLA:
GOSUB ZAMAN_OKU
IF SAYAC=80 THEN LOW LED
IF Y=SUM THEN Y=0
IF Y>(EKRAN_ZAM) AND Y<SUM THEN
IF Y=(EKRAN_ZAM+1) THEN GOSUB SENSOR_OKU
SNY=1
GOSUB EKRAN1
ENDIF
IF ESN=SN THEN ATLA
Y=Y+1 : ESN=SN : SAYAC=0
IF Y<=EKRAN_ZAM THEN
HIGH LED
SNY=0
GOSUB EKRAN0
ENDIF
ATLA:
GOTO BASLA
AL: LOOKUP Z,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI :RETURN
EKRAN0:
Z=SN DIG 0:GOSUB AL :AKTAR1= SAYI
Z=SN DIG 1:GOSUB AL :AKTAR2= SAYI
Z=dak DIG 0:GOSUB AL :AKTAR3= SAYI
Z=dak DIG 1:GOSUB AL :AKTAR4= SAYI
Z=SAAT DIG 0:GOSUB AL :AKTAR5= SAYI
Z=SAAT DIG 1:GOSUB AL :AKTAR6= SAYI
RETURN
EKRAN1:
Z=11:GOSUB AL:AKTAR1=SAYI
Z=10:GOSUB AL:AKTAR2=SAYI
Z=ISI DIG 0:GOSUB AL:AKTAR3=SAYI
Z=ISI DIG 1:GOSUB AL:AKTAR4=SAYI
AKTAR5=0
AKTAR6=0
RETURN
SENSOR_OKU:
ADCIN 0,HAM
IF ADCON0.2=1 THEN SENSOR_OKU
ISI=(5*HAM)-(5*HAM/64)-(5*HAM/128)
ISI=ISI/10
RETURN
ZAMAN_OKU:
high RTC_RST:OUTPUT RTC_DTA
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HAFTA, YIL, MEM] 'OKU
MEM=SN:GOSUB CEVIR:SN=SAYI
MEM=DAK:GOSUB CEVIR:DAK=SAYI
MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
MEM=GUN:GOSUB CEVIR:GUN=SAYI
MEM=AY:GOSUB CEVIR:AY=SAYI
MEM=YIL:GOSUB CEVIR:YIL=SAYI
MEM=HAFTA:GOSUB CEVIR:HAFTA=SAYI
low RTC_RST
return
ZAMAN_YAZ:
MEM=sn:gosub TERSCEVIR:sn=SAYI
MEM=DAK:gosub TERSCEVIR:DAK=SAYI
MEM=SAAT:gosub TERSCEVIR:SAAT=SAYI
MEM=GUN:gosub TERSCEVIR:GUN=SAYI
MEM=AY:gosub TERSCEVIR:AY=SAYI
MEM=YIL:gosub TERSCEVIR:YIL=SAYI
MEM=HAFTA:GOSUB TERSCEVIR:HAFTA=SAYI
high RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0] 'WRT Protek açıldı
low RTC_RST:PAUSEUS 10
high RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, HAFTA, YIL, 128] 'YAZ
low RTC_RST
PAUSEUS 10
return
CEVIR:
ONLAR=MEM & %01110000
ONLAR=ONLAR>>4
BIRLER=MEM & %00001111
SAYI=ONLAR*10+BIRLER
return
TERSCEVIR:
ONLAR=MEM DIG 1
ONLAR=ONLAR<<4
BIRLER=MEM DIG 0
SAYI=ONLAR+BIRLER
return
DISABLE
KESME:
SIRA=SIRA+1
IF SIRA>5 then
SIRA=0
ENDIF
SAYAC=SAYAC+1
''''''''''''''''''''''''''''
IF SIRA=0 then
DIG5=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR1]
DIG0=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
IF SIRA=1 THEN
DIG0=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR2]
DIG1=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
IF SIRA=2 THEN
DIG1=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR3]
DIG2=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
IF SIRA=3 THEN
DIG2=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR4]
DIG3=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
IF SIRA=4 THEN
DIG3=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR5]
DIG4=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
IF SIRA=5 THEN
DIG4=0
pauseus 1
SHIFTOUT SH_DTA,SH_CLK,1,[AKTAR6]
DIG5=1
SH_KLT=1:PAUSEUS 1:SH_KLT=0
ENDIF
''''''''''''''''''''''''''''''
TMR0=99
INTCON.2=0
RESUME
ENABLE
Devre şeması
[IMG]http://img222.imageshack.us/img222/3999/adszvwg.png[/img] (http://img222.imageshack.us/i/adszvwg.png/)
Uploaded with ImageShack.us (http://imageshack.us)
Aşağıda devre şemasını ve kaynak kodlarını veriyorum. Yardımcı olursanız sevinirim arkadaşlar
http://hotfile.com/dl/84190999/cc7c560/saat_mutli.rar.html (http://hotfile.com/dl/84190999/cc7c560/saat_mutli.rar.html)
Arkadaşlar hala sorunu çözemedim. Birçok ısı hesaplama formülleri denedim ama sorun hesaplamadan kaynaklanmıyor. Çünkü aynı kodları lcd ekranlı lm 35 ile yaptığım ısı göstergesinde deniyorum çalışıyor. Fakat Nedense bu saat devresinde çalışmıyor. Acaba adcon registerinindemi sorun var orayımı yanlış ayarladım. Başka nerede sorun olabilir bilemiyorum. Bu konuda yardımcı olursanız sevinirim.
lm35 sensor hesaplamasini nasil yaptin arkadasim bilgi verirmisin...
- simdi arkadasim ben basic pek bilmem ama sunu soylemeliyim ADCON0 registerini belirlememissin..
- ikincisi ADCIN adc okuma komutu ise ilk once ADCON0 registerinin ikinci bitini 1 yapin daha sonra IF ADCON0.2=1 THEN basla boyle yapin daha sonra ADCIN 0,HAM bu satiri kullanin...
yani ilk once ADCON0 registerinin GO bitini manuel olarak 1 yapmaniz gerek sonra GO biti 0 olana kadar beklemelisiniz daha sonra ADC degerini okuyabilirsiniz yoksa yalnis degerler verebilir...
arkadaşım simülasyonda 7 segmentlerde rakamlar oluşmuyor.
Alıntı Yaplm35 sensor hesaplamasini nasil yaptin arkadasim bilgi verirmisin...
Cevabınız için teşekkürler arkadaşlar. ısı ölçme kodlarını yukarıda vermişim yanlız kodlar bana ait değil forumda başka birisinin kodları
Kodların çalıştığına eminim çünkü başka bi lm 35 ve lc ekran ile yapılmış ısı göstergesinde çalışıyor. Benim devrede bir türlü çalıştıramadım. sorunun nerede olduğunu anlayamadım. Programda ısı değişkenine kendim bir değer veriyorum verdiğim değeri ekranda gösteriyor.
Alıntı Yaparkadaşım simülasyonda 7 segmentlerde rakamlar oluşmuyor.
Rakamlar oluşmuyor derken tam olarak anlayamadım. Nasıl oluşmuyor.
bende basic compiler olmadigi icin deneyemiyorum yukarida yazdiklarimi denermisiniz...
Dediklerini uyguladım fakat değişen bişey olmadı. Isı ölçmek için aşağıdaki komutu kullnıyorum aslında senin demek istediğini ben yapmıştım pek bi kar etmiyor.
SENSOR_OKU:
ADCIN 0,HAM
IF ADCON0.2=1 THEN SENSOR_OKU
ISI=(5*HAM)-(5*HAM/64)-(5*HAM/128)
ISI=ISI/10RETURN
Demek istedigim su sekildeydi arkadasim...
ayrica ADCON0 registeri tanimlanmamis mesela senin hangi analog bacagi kullanacagin,ADC hizi,ADC enable bile kullanilmamis yani ADC calismiyor bile...
SENSOR_OKU:
ADCON0.2=1
OKU:
IF ADCON0.2=1 THEN OKU
ADCIN 0,HAM
ISI=(5*HAM)-(5*HAM/64)-(5*HAM/128)
ISI=ISI/10
RETURN
Haklısın arkadaşım şimdi sorunum çözüldü adc çalışmıyormuş. Dediğin gibi adc configürasyon ayarlarını yapmamışım çok çok teşekkür ederim sana. Aslında bu devrede ilk başta lm35 yerine ds18b20 kullanıyordum. nedense ds18b20 den okuma işlemi yapılınca simülasyon çok yavaşlıyordu ekranda titreme oluyordu bu hiç hoşuma gitmiyordu bu yüzden birazda lm35 ile çalışayım dedim çok teşekkür ederim ilgin ve alakan için
mucit kardeş sorunu çözdüğüne sevindim güzel bir proje çıkıyor ortaya fakat neden 74hc595 tpic6b595 gibi shiftregisterlar yada max7219 gibi özel display sürücü entegreler varken tarama yöntemini kullandığını merak ettim. simulasyonda bir sorun görünmüyor ama gerçekte devreyi kurunca titreme sorunu yaratacaktır ben 4 displayli bir devre yapmıştım 20mhzde çalışmama rağmen tarama hissediliyordu 6 displayde dahada fazla olacağını düşünüyorum
Evet haklısın erdem abi Simülasyonda iyi çalışıyor.Gerçekte ne olur kestiremiyorum. Dediğin gibi tireme olabilir. Aslında Şu max7219u bi türlü anlayamadım. Nasıl çalışıyor. Max7219 8 adet display sürebiliyor.Max7219 a nasıl bilgi gönderiliyor. Datasheedini inceledim fakat fazla bişey anlayamadım. Elinde max7219 kullanımı açıklayan örnek kod varsa paylaşırsanız. Benim için çok iyi olur. Birde şöyle bişey var erdem abi, ben devreyi tamamiyle smd olarak yapmayı düşünüyorum. Yani kartı çok küçük yapıcam. Display olarak 25 mm den daha büyük kullanmam herhalde. Şimdilik devreye tarihde ekledim. Yani 10 sn saati, 5 saniye tarihi ve yine 5 sn yede sıcaklığı gösteriyor.