Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

timer0 kodda hata nerededir ?

Başlatan AYKIRI, 07 Eylül 2013, 11:42:07

sadogan

list dosyasında buna benzer ram rom stack kullanımı ile bilgiler var.   
           ROM used:   1399 words (9%)
                           Largest free fragment is 2048
               RAM used:   22 (2%) at main() level
                           54 (5%) worst case
               Stack used: 3 locations
               Stack size: 16
16f877a nın stack size 8 acaba ne kadarı kullanılmış.
Stack taşması olabilir varmı bakarmısınız.

AYKIRI

Alıntı yapılan: sadogan - 08 Eylül 2013, 00:52:47
list dosyasında buna benzer ram rom stack kullanımı ile bilgiler var.   
           ROM used:   1399 words (9%)
                           Largest free fragment is 2048
               RAM used:   22 (2%) at main() level
                           54 (5%) worst case
               Stack used: 3 locations
               Stack size: 16
16f877a nın stack size 8 acaba ne kadarı kullanılmış.
Stack taşması olabilir varmı bakarmısınız.
buyrun ekledim

               ROM used:   1322 words (16%)
                           Largest free fragment is 2048
               RAM used:   17 (5%) at main() level
                           48 (13%) worst case
               Stack used: 6 locations (5 in main + 1 for interrupts)
               Stack size: 8

diversant

Alıntı yapılan: AYKIRI - 07 Eylül 2013, 11:42:07
int i=0;
#int_timer0 //timer0 kesmesi
int i=0
int timer0   ->bu şekilde olması gerekiyo diye biliyorum ben

WrtM

enable_interrupts ve global satırlarını while döngüsüne koyup bir dene bakalım genelde bunlar while döngüsü içerisine konuluyor diye biliyorum.

AYKIRI

Alıntı yapılan: WrtM - 08 Eylül 2013, 10:35:37
enable_interrupts ve global satırlarını while döngüsüne koyup bir dene bakalım genelde bunlar while döngüsü içerisine konuluyor diye biliyorum.

dediğiniz gibi yaptım çalıştı fakat anlamadığım birşey var herhangi bir şekilde disable olmamışken neden while altına almak gerekli ?
main altında yazdıktan sonra tekrar while altına alma mantığını kavrayamadım.
saygılar

sadogan

Alıntı yapılan: AYKIRI - 08 Eylül 2013, 01:07:16
buyrun ekledim

               ROM used:   1322 words (16%)
                           Largest free fragment is 2048
               RAM used:   17 (5%) at main() level
                           48 (13%) worst case
               Stack used: 6 locations (5 in main + 1 for interrupts)
               Stack size: 8
Normal görünüyor
Alıntı yapılan: AYKIRI - 08 Eylül 2013, 00:31:58
ilgilendiğiniz için öncelikle teşekkür ederim
evet c1 den kontrol ediyorum led hiç yanmıyor
ds18b20 d2 pinine bağlı
i değer,n, lcd yazdırdığımda sabit 5 te kalıyor hiç değişmiyor
eğer i değerini 10 değilde 5 e çekersem led yanıyor ve tekrar sönmüyor
eğer i değerini 10 ve 50 yerine 4 ve 5 e çekersem led yanıyor 5 e gelince sönüyor ve 0 oluyor bunu lcd de 0 olarak görebiliyorum ama 0 olarak kalıyor değişmiyor bunun dışında ölçümler normal
saygılar
Bu anlattıklarınızdan tmr0 interrupt a giriyor ama bir nedenle kapanıyor.
1.wire.c ve ds1820.c kütüphanelerinin içeriklerini gözden geçirin,  interrupt tu kapanan bir yapı var
görünüyor.
Alıntı yapılan: AYKIRI - 08 Eylül 2013, 10:52:35
dediğiniz gibi yaptım çalıştı fakat anlamadığım birşey var herhangi bir şekilde disable olmamışken neden while altına almak gerekli ?
main altında yazdıktan sonra tekrar while altına alma mantığını kavrayamadım.
saygılar
interrupt böyle kullanılmaz zaten.
istem dişi kapatıldığında kapalı kaldığı sürece interrupt lardan yanıt alamasınız.

AYKIRI

haklısınız bu interrupt sorununu nasıl çözerim bilmiyorum 18b20 ve 1 wire.c dosyaları standart olanlar hiçbir değişiklik yapmadım
enable_interrupts(GLOBAL); satırını while içine aldım şuan çalışıyor ama dediğiniz gibi mantık hatası var

salihonur

Alıntı yapılan: AYKIRI - 08 Eylül 2013, 12:25:13
haklısınız bu interrupt sorununu nasıl çözerim bilmiyorum 18b20 ve 1 wire.c dosyaları standart olanlar hiçbir değişiklik yapmadım
enable_interrupts(GLOBAL); satırını while içine aldım şuan çalışıyor ama dediğiniz gibi mantık hatası var

Bir de interruptları temperature = ds1820_read(); altına alıp deneyin. Olmazsa bir de I2C ile timer0 kesme periodlarına bakın. Birini artırın veya azaltın.