Arkadaşlar kolay gelsin aşağıda ki bir devre yaptım 0-100 sn arası sayan teorik olarak hesapladığımda 25 saatte 1 sn yapması gerekiyor fakat isiste çalıştırıp kronometre ile baktığımda 1. sn den itibaren arada ki fark açılmaya başlıyor açıkçası ben pek anlayamadım neden böyle olduğunu yardımlarınız için şimdiden teşekkür ederim .
[IMG]http://img16.imageshack.us/img16/5571/sayg.jpg[/img] (http://imageshack.us/photo/my-images/16/sayg.jpg/)
LIST P=16F877A
INCLUDE"P16F877A.INC"
__CONFIG h'3F31'
SAYAC1 EQU h'20'
SAYAC2 EQU h'21'
BIRLER_BAS EQU h'22'
ONLAR_BAS EQU h'23'
ara1 equ h'24'
ara2 equ h'25'
hex_yuksek equ h'26'
hex_dusuk equ h'27'
w_GEC equ h'24'
status_GEC equ h'25'
ORG h'00'
RESET
goto BASLA
ORG h'04'
goto ASIL
BASLA
banksel TRISB
movlw h'00'
movwf TRISB
movlw b'10000101'
BANKSEL OPTION_REG
movwf OPTION_REG
BCF STATUS,5
BCF STATUS,6
clrf BIRLER_BAS
clrf ONLAR_BAS
clrf ara1
clrf ara2
movlw b'10100000'
movwf INTCON
movlw h'3e'
movwf hex_yuksek
movlw h'09'
movwf hex_dusuk
goto GOSTER
GOSTER
movlw b'00100000'
iorwf BIRLER_BAS,w
movwf PORTB
call GECIKME
movlw b'00010000'
iorwf ONLAR_BAS,w
movwf PORTB
call GECIKME
goto GOSTER
ASIL
movwf w_GEC
swapf STATUS,w
movwf status_GEC
swapf status_GEC,f
tstf hex_yuksek
skpnz
goto CIK
decfsz hex_yuksek,f
goto CIK
movlw h'3d'
movwf hex_yuksek
movlw h'09'
addwf hex_dusuk,f
skpnc
incf hex_yuksek,f
btfss INTCON,T0IF
goto CIK
bcf STATUS,2
incf BIRLER_BAS,f
movf BIRLER_BAS,w
sublw d'10'
btfss STATUS,2
goto CIK
clrf BIRLER_BAS
bcf STATUS,2
incf ONLAR_BAS,f
movf ONLAR_BAS,w
sublw d'10'
btfss STATUS,2
goto CIK
clrf ONLAR_BAS
CIK
bcf INTCON,T0IF
swapf status_GEC,w
movwf ara1
swapf ara1,w
movwf STATUS
swapf w_GEC,w
movwf ara1
swapf ara1,w
RETFIE
GECIKME
MOVLW h'0A'
MOVWF SAYAC1
DONGU1
MOVLW h'ff'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
END
isis de böyle problemler olabiliyor. Gerçekte devreyi kurup dene. Eğer yine problem varsa en doğru sonucu bulana kadar kalibrasyon yaparsın.
isis gerçek zamanda simülasyon yapamıyor. Asıl önemlisi bu programın işlemci üzerinde nasıl davranacağı.
16f877A'nın simülasyonunda sorun çıkmıyordu. Diğerlerinde olanlar var. Gerçi bu durum versiyonlara göre değişiklik de gösterebilir.
1 saniyeni nasıl kurguladın , hangi timer 'ı nasıl kullandın ?
kronometre ile kontrol değil de isis in kendi zaman sayacı var. ondan neden kontrol etmiyorsunuz? xtal frekansınız tam ise isisdeki zaman sayacı ile gerçek zaman aynı olur.
Alıntı yapılan: fahri- - 23 Ocak 2012, 17:36:06
kronometre ile kontrol değil de isis in kendi zaman sayacı var. ondan neden kontrol etmiyorsunuz? xtal frekansınız tam ise isisdeki zaman sayacı ile gerçek zaman aynı olur.
İsis de nerede bu sayaç bilmiyorum ?
Alıntı yapılan: ambar7 - 23 Ocak 2012, 10:36:27
isis gerçek zamanda simülasyon yapamıyor. Asıl önemlisi bu programın işlemci üzerinde nasıl davranacağı.
Alıntı yapılan: Mucit23 - 23 Ocak 2012, 09:32:36
isis de böyle problemler olabiliyor. Gerçekte devreyi kurup dene. Eğer yine problem varsa en doğru sonucu bulana kadar kalibrasyon yaparsın.
Sağolasınız üstadlar fakat gerçek ortama geçiş yaparken birkaç küçük sıkıntı yaşıyorum şu anda (programlayıcıda arıza oluştu :) ).
Alıntı yapılan: camby - 23 Ocak 2012, 17:27:37
16f877A'nın simülasyonunda sorun çıkmıyordu. Diğerlerinde olanlar var. Gerçi bu durum versiyonlara göre değişiklik de gösterebilir.
1 saniyeni nasıl kurguladın , hangi timer 'ı nasıl kullandın ?
Timer0 la kurguladım 3D sayısının farklı ortalamalarını alarak yaptım 29 saniyede bir 09'lar üst üste toplandığında elde bitini oluşturuyor bu oluşan elde bitini 3D sayısına ekliyorum böylece ortalama zamanı tutturuyorum.Zaman kayması yaşanıyor yine de fakat teoriye göre 25 saatte 1 sn kayıyor bana normal geldi bunu saate uyarlayacağım o yüzden soruyorum bu hata normal midir ?
timer içindeki bütün dörgü gecikmelerini hesapladın mı? Kesme içindeki gecikmeler gerçekten baya karışık geldi.
Zamanlamanın kesinleşmesini istiyorsan kesmeyi mümkün olduğu kadar kısa tut. Bir bayrak ata. Bu bayrağı kullan.
Hatta sen timer içine giriyorsun dolanıp duruyor ve çıkarkende tekrar çalıştırıyorsun. Buradaki hesap seni şaşırtabilir.
Alıntı yapılan: ambar7 - 23 Ocak 2012, 18:51:25
timer içindeki bütün dörgü gecikmelerini hesapladın mı? Kesme içindeki gecikmeler gerçekten baya karışık geldi.
Zamanlamanın kesinleşmesini istiyorsan kesmeyi mümkün olduğu kadar kısa tut. Bir bayrak ata. Bu bayrağı kullan.
Hatta sen timer içine giriyorsun dolanıp duruyor ve çıkarkende tekrar çalıştırıyorsun. Buradaki hesap seni şaşırtabilir.
Hocam timer0 ın her bir artışı 64 us bir oluyor benim orada kullandığım en fazla 100-200 komut bu arada kesme gelmesi çok zor fakat bilmediğim bir nokta var timer0 kesme bayrağı sıfırlamasamda saymaya devam ediyor mu eğer saymaya devam etmiyorsa büyük ihtimal hesabım yanlış eğer saymaya devam edip kesmeye izin vermiyorsa timer0 ın en fazla 5 saymasında komutların bitmiş olması gerekiyor hesabı ona göre yapmıştım zaman için nasıl bir döngü kullanabilirim hatası az olan aydınlatırsanız sevinirim :)
isis de şemanın en altında sayaç var. cpu load var. görmüyormusun?
Alıntı yapılan: fahri- - 23 Ocak 2012, 21:08:51
isis de şemanın en altında sayaç var. cpu load var. görmüyormusun?
farketmemişim sağolun
Arkadaşlar yeni konu açmak istemedim şöyle bir sorunum var konunun başında yazdığım kodu ve devreyi yaptım picten aldığım çıkışları bc237 e vererek 7 segmentlerin besleme bacağına anahtarladım fakat devre hiçbir şekilde çıkış vermiyor.Bende problemi tespit amaçlı led yakıp söndüren bir program yazdım o da isisde çalışıyor fakat gerçekte tık yok.Config ayarlarını en baştan kurcalamıştım programda öyle duruyordu.Yazdığım iki programdada config bitleri aynı kısacası elimde 2 tane 16f877a var ve hiçbirine birşey yaptıramadım.Programlayıcıyı test etmek için ayrıca 12f675 ile led yakıp söndüren bir program daha denedim ve çalıştırdım(Programlayıcım PK2 klonu).Yardımlarınız için şimdiden teşekkür ederim.
mclr pini boşta mı?
Alıntı yapılan: fahri- - 01 Şubat 2012, 12:20:34
mclr pini boşta mı?
lojik 1 e çekiyorum hata var mıdır?
1-10k dirençle +5V a bağlamak yeterli. Osilatörde kullandığınız kristal ve kondansatörler nedir?
Alıntı yapılan: fahri- - 01 Şubat 2012, 14:50:00
1-10k dirençle +5V a bağlamak yeterli. Osilatörde kullandığınız kristal ve kondansatörler nedir?
Ben dirençsiz direkt beslemeye çekiyorum mclr pinini sorun oluşur mu bundan?Kristal ise 4 MHz kondansatörler 22 pF yazılımda mclr pinini iptal etmek çözüm olur mu ??
Dirençlede mclr ye çektim devrede hâlâ tık yok config ayarlarıyla oynayıp h'3739' yaptım yinede değişen birşey yok.Arkadaşlar bir yardım edin çünkü yazdığım hiçbir program çalışmıyor 16f877a da :-X.
Arkadaşlar her türlü olayı denedim devre üzerinde yazılım çalışmıyor bile sıkıntı var şuradan anladım ki portb.1 e bir adet led bağladım ve yazılımı ona göre düzenledim fakat ledde tık yok aşağıda yeni kodları da veriyorum bi el atın çözelim şu sorunu takıldım kaldım burada LIST P=16F877A
INCLUDE"P16F877A.INC"
__CONFIG h'3F31'
d1 EQU h'20'
d2 EQU h'21'
BIRLER_BAS EQU h'22'
ONLAR_BAS EQU h'23'
ara1 equ h'24'
ara2 equ h'25'
hex_yuksek equ h'26'
hex_dusuk equ h'27'
w_GEC equ h'24'
status_GEC equ h'25'
hex_orta equ h'2F'
ORG h'00'
RESET
goto BASLA
ORG h'04'
goto ASIL
BASLA
banksel TRISD
movlw h'00'
movwf TRISD
clrf PORTD
banksel TRISB
movwf TRISB
clrf PORTB
movlw b'10000000'
BANKSEL OPTION_REG
movwf OPTION_REG
BCF STATUS,5
BCF STATUS,6
clrf BIRLER_BAS
clrf ONLAR_BAS
clrf ara1
clrf ara2
movlw b'10100000'
movwf INTCON
MOVLW h'07' ;
MOVWF hex_yuksek ; HEX_YUKSEK <- h'07'
MOVLW h'A1'+1 ;
MOVWF hex_orta ; HEX_ORTA <- h'A1'+1
MOVLW h'20' ;
MOVWF hex_dusuk ; HEX_DUSUK <- h'20'
goto GOSTER
GOSTER
movlw b'00100000'
iorwf BIRLER_BAS,w
movwf PORTD
call GECIKME
movlw b'00010000'
iorwf ONLAR_BAS,w
movwf PORTD
call GECIKME
test
bsf PORTB,1
goto GOSTER
ASIL
movwf w_GEC
swapf STATUS,w
movwf status_GEC
swapf status_GEC,f
TSTF hex_orta ; ilk test (HEX_ORTA==0 için)
SKPNZ ;
DECF hex_yuksek,F ;
DECFSZ hex_orta,F ;
GOTO CIK ;;
TSTF hex_yuksek ;
SKPZ ;
GOTO CIK ;
MOVLW h'07' ;
MOVWF hex_yuksek ; HEX_YUKSEK <- h'07'
MOVLW h'A1' ;
MOVWF hex_orta ; HEX_ORTA <- h'A1'
MOVLW h'20' ;
ADDWF hex_dusuk,F ;
SKPNC ;
INCF hex_orta,F ;
BTFSS INTCON,T0IF
GOTO CIK
bcf STATUS,2
incf BIRLER_BAS,f
movf BIRLER_BAS,w
sublw d'10'
btfss STATUS,2
goto CIK
clrf BIRLER_BAS
bcf STATUS,2
incf ONLAR_BAS,f
movf ONLAR_BAS,w
sublw d'10'
btfss STATUS,2
goto CIK
clrf ONLAR_BAS
CIK
bcf INTCON,T0IF
swapf status_GEC,w
movwf ara1
swapf ara1,w
movwf STATUS
swapf w_GEC,w
movwf ara1
swapf ara1,w
RETFIE
GECIKME
movlw 0xE7
movwf d1
movlw 0x04
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;2 cycles
goto $+1
RETURN
END