Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: mcan - 02 Kasım 2005, 14:22:02

Başlık: darbe genişliğini okumak
Gönderen: mcan - 02 Kasım 2005, 14:22:02
darbe genişliğiini pic le okuma için şunu yazdım

#include <16F628a.h>
#use delay(clock = 4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#byte  PORTA = 5

int a=0;

dongu()
{while(True){ }}


say()
{
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);
   ext_int_edge(H_TO_L);
   a=a+1;
   dongu();
}



ata()
{
PORTA=get_timer0();
set_timer0(0);
ext_int_edge(L_TO_H);
a=0;
dongu();
}


#INT_EXT

sec()
  { if(a==0)say();
    if(a==1)ata();
  }




void main()
 {
      set_tris_a(0b00000);
      set_tris_b(0b00000001);



      ext_int_edge(L_TO_H);
      enable_interrupts(INT_EXT);
      enable_interrupts(GLOBAL);
      dongu();
 }
Başlık: darbe genişliğini okumak
Gönderen: mcan - 02 Kasım 2005, 14:23:00
amacıda şu

ana programa gidilir;

portların davranışı ayarlanır;

dongude beklenir;

kesme geldiğinde:

sec fonksiyonuna gidilir;

ilk bu fonksiyona geçince   a   sıfır olduğundan

say fonksiyonuna gidilir;

sayaç sıfırlanır;

kurulur; kurunca saymaya başlarmı?

kesmenin yönü değiştirilip ,
a  nın da değeri 1 artırılarak

döngüye gidilir;

kesmenin yönü değiştiğinden h_den_l ye geçiş olunca:

sec fonksiyonuna geri gidilir

a nın değeri bu sefer 1 olduğu için

buradan ,

ata fonksiyonuna geçilir;

porta ya timer değeri atanır;

kemenin yönü değiştirlip

a sıfırlanır;

döngüye gidilir.............
Başlık: darbe genişliğini okumak
Gönderen: mcan - 02 Kasım 2005, 21:36:55
bu kod neden çalışmıyor? acaba setup_counters   komutundan sonra timer sayamaya başlamıyormu? yoksa ext_int_edge(); bir kere belirlenip başka bir fonksiyon içinde değiştirilemiyormu neden çalışmaz ki bu kod
Başlık: darbe genişliğini okumak
Gönderen: Erkan Gench - 03 Kasım 2005, 03:22:15
interrupt'ın içine sonsuz döngü atmışsın nasıl çalışsın ki?
Başlık: darbe genişliğini okumak
Gönderen: mcan - 03 Kasım 2005, 09:35:43
kodu şöyle değiştirdim bişey farketmedi #include <16F628a.h>
#use delay(clock = 4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#byte  PORTA = 5

int a=0;

dongu()
{while(True){ }}


say()
{
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);
   ext_int_edge(H_TO_L);
   a=a+1;

}



ata()
{
PORTA=get_timer0();
set_timer0(0);
ext_int_edge(L_TO_H);
a=0;

}


#INT_EXT

sec()
  { if(a==0)say();
    if(a==1)ata();
  }




void main()
 {
      set_tris_a(0b00000);
      set_tris_b(0b00000001);



      ext_int_edge(L_TO_H);
      enable_interrupts(INT_EXT);
      enable_interrupts(GLOBAL);
      dongu();
 }

Başlık: darbe genişliğini okumak
Gönderen: mcan - 03 Kasım 2005, 12:04:46
bilgisayara bişey anlatmak zor :D  anlamıyor yaw,bilen biri hem bana hem ona anlatsın :D
ayrıca şöle bişeyde denedim buda olmadı

#include <16F628a.h>
#use delay(clock = 4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#byte  PORTA = 5

int a=0;


////////////////////////////////////////////////////////////////////////////////
say(){set_timer0(0);
    setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);
    ext_int_edge(H_TO_L);
    a=a+1;
    return;}
////////////////////////////////////////////////////////////////////////////////






////////////////////////////////////////////////////////////////////////////////
ata(){
    PORTA=get_timer0();
    set_timer0(0);
    ext_int_edge(L_TO_H);
    a=0;
    return;
    }    
   
////////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////
dongu()
{
while(true){

if(a==1)say();

if(a==3)ata();}



}
//////////////////////////////////////






//////////////////////////////////////
#INT_EXT

sec()
  {a=a+1;
  }

//////////////////////////////////////





void main()
{
      set_tris_a(0b00000);
      set_tris_b(0b00000001);



      ext_int_edge(L_TO_H);
      enable_interrupts(INT_EXT);
      enable_interrupts(GLOBAL);
      dongu();
}


Başlık: darbe genişliğini okumak
Gönderen: mcan - 03 Kasım 2005, 13:39:42
tamam sanırım son verdiğim kod örneği çalışıyor,sonunda başardım sanırım isis de denedim çalıştı ,dün sinirden bredbordu kırdığımdan gerçekde deneyemedim bayramdan sona deneyeceğim
Başlık: darbe genişliğini okumak
Gönderen: mcan - 11 Kasım 2005, 22:27:07
öncelikle şunu belirteyim,ben bu son kodu 16f84a ya göre yazmışdım ve 628a ya sadece modeli değiştirip yükledikden sonra pikde bazı garipliklerle bazı hatalarla karşılaştım .daha sonra buna neyin sebep olduğunu kendi başıma deneyerek buldum. sorun NOLVP sigortasını belirtmememden kaynaklanıyormuş bunu belirtmeyince bendeki pik baya hatalı çalışmaya saçmalamaya başladı ,öyleki elimi rb4 pinine bağlı kabloya yaklaştırınca pik kendine reset atıyordu,aklınızda bulunsun belkide zaten biliyorsunuzdur paylaşayım dedim.......
Başlık: darbe genişliğini okumak
Gönderen: mcan - 15 Kasım 2005, 19:24:47
yardımınız gerekli ya bendeki 2 pikde bozuk yada atladığım bir nokta var bu verdiğim son kodu 16f84 veya 16f628 ile deneyebilecek biri varmı,ben isisde denedim bi sorun yok gibi port a ya değerleri atıyor değişen darbe genişliğine göre fakat gerçekde öle bişey olmuyor aksine elimi değdirmeden piklere 1-2 cm yaklaştırdığımda lambalar garip garip yanıp sönüyor (porta ya led bağladım) yardımınız gerekli bu kodu gerçekde deneyebilirmisiniz neden böle garip davranıyor pikler?kaynak olarak pil kullanıyorum 7805 ile devrede röle hoparlör motor gibi hiç bir eleman yok sadece led var birde giriş girişi toprağa bağlasam bile böyle oluyor

elinde 18f84 veya 16f628 olan birileri bu kodu deneyebilirmi acaba
Başlık: darbe genişliğini okumak
Gönderen: Erkan Gench - 15 Kasım 2005, 19:36:27
devre şemasını verirsen yardımcı olmaya çalışayım. büyük ihtimalle pullup direnci olması gereken yere pullup takmamışsın gibi geldi bana.
Başlık: darbe genişliğini okumak
Gönderen: mcan - 15 Kasım 2005, 21:12:04
devre şöyle bredbord üzerine kurulu bildiğimiz pic devresi yani kristal ve reset tuşu rb0 ucuna 1ms darbe genişlikli 4-5v luk bir sinyal yada yoksa öyle bişey direk toprağada bağlaanabilir porta ya ise hep led bağladım ra4 e bir pull up direnci bağladım yani devre porta nın hepsine led bağlı rb0 da sinyal var kesme oluşması için port b nin diğer bütün uçları boşta ve çıkış olarak tanımlılar eğer tanımlaya bildiysem
Başlık: darbe genişliğini okumak
Gönderen: mcan - 15 Kasım 2005, 21:44:52
şema gerçekden çok basit aslında şema bile değil sadece picin port a sının hepsine birer led rb0 da sinyali girdim port bnin kalan uçları da boşda isis de ise sadece rb0 a sinyali girdim diğer tüm uçlar boşta porta nında değerini debugger ile gözlüyorum isis de çalışıyo gerçekde ise anlattığım gibib oluyor
Başlık: darbe genişliğini okumak
Gönderen: Erkan Gench - 16 Kasım 2005, 05:23:24
bu bahsettiğin hata ya giriş olarak kullandığın hatlardan birini boşta bıraktığından olur yada reset girişini boşta bıraktığından olur ben böyle birşey yapmışmısın diye bakmak için devre şemanı istedim ama bu şekilde anlatınca pek bi işe yaramadı.

sen olaya "herşeyi doğru yaptım ben niye çalışmıyor bu alet" şeklinde yaklaşıyorsun. zaten olaya bu şekilde yaklaştığın için bu kadar zamandır basit bi projeyi yapamadın gibi geliyor bana. bu işte yeni olmanın elbette etkisi vardır ama bu kadarda uğraştırmazdı heralde :)

hayır herşeyi doğru yapsaydın alet zaten çalışırdı. olaya yaklaşımın "bu alet çalışmadığına göre bir yerde yanlış yapıyorum ama nerede" şeklinde olmalı. öncelikle elemanlarının sağlamlığından emin olmalısın. mesela pic ile daha önce çalıştığından emin olduğun basit bi devreyi yeniden kur ve picin çalışıp çalışmadığından emin ol. aynı işleri diğer parçalar içinde yap. daha sonra herseferinde bir değişkeni değiştirerek meydana gelen değişiklikleri gözlemle (deneysel çalışma). arasıra dur ve yaptığın şeye bir bak bazen işi bırakıp kafan boşaldıktan sonra tekrar bakarsan daha önce göremediğin şeyleri görebilirsin. eğer işin çalışmamasının sebebinin senin bilmediğin bir şeyden olduğuna emin olursan o zaman yardım iste.

aslında herşeyden önce arıza çözme tekniğini kavramamız lazım sanırım :)
Başlık: darbe genişliğini okumak
Gönderen: mcan - 16 Kasım 2005, 15:04:55
"herşeyi doğru yaptım ben niye çalışmıyor bu alet" şeklinde yaklaştığımı düşünüp "bu kadar zamandır bu kadar basit bi alet çalışmadığına göre bir yerde yanlış yapıyorum ama nerede :roll: "diye düşünmeye başladım

elemanların sağlamlığından emin olmak için, her zamanki yapıtığım gibi ,ilk yazdığım led yakıp söndüren dosyayı yine piklere yükledim ve çalışıyorlar diğer parçalardan sadece ledler olduğundan onlarıda denedim

ayrıca pikin resetinin boşda olup olmadığını kontrol ettim,isisde değişkeni değiştirip simüle ettim orada normal çalıştığını düşünüyorum şünki portA daki değerler önceden istediğim değerler.... zaten buraya kadarını önceden yapmıştım ama bir daha yapayım dedim

şu an çalışmıyor, aynı sorunlar var bu kadar basit bir konuyu bu kadar uzun  zamandır yapamadığıma göre bende bir eksiklik var ve ben bunu  bu kadar zaman uğraştıkdan sonra aşamadığım içinde sizlere sormuşdum

çalışmamasının sebebini kısa süre uğraştıkdan sonra düşünseydim mutlaka atladığım bişey var derdim,ama uzun süre uğraştıktan sonra atladığım birşeyin yerini yavaş yavaş bilmediğim birşeymi var sorusu alıyor

fazla yazdım aslında ,en iyisi ben bunu birazdaha çalıştırmaya çalışayım
nede olsa basit bir konu elbet bi şekilde aşarım :D
akşama yeni bir pikle deneyeceğim belki piklerimde bir sorun vardır

tavsiyelerinizi dikkate aldım teşekkürler