zfer
Üye
- Katılım
- 23 Kas 2008
- Mesajlar
- 63
- Puanları
- 1
- Yaş
- 40
Merhaba arkadaşlar,
Pic16f819 ile enkoder okutmak istiyorum. kodu falan yazdım. devreyi similasyonda hazırladım(isisde). orada sorunsuz çalışıyor fakat gerçeğe gelince işler sarpa sarıyor. enkoder çıkışını (24v enkoder, +24v çıkış veriyor, 100 puls) 16 tane optocouplere bağladım. 1k lık dirençlerle. diğerucları şaseye çektim. optocouplerin çıkışını da kollektörden +5v girdim emiterden pic'e bağladım. pic e giden uca 10k dirençle şaseye bağladım. bir tane de butonum var. o da 24v ile çalışıyor. onu da enkodere yaptığımı yaptım. buton kısmı pice tam 5v veriyo sorunsuz. yani butona bastığımda sorunsuz olarak giriyor fakat enkoder girişi aynı işlemi yapmıyor. 2,5v a düşüyor ki pic de bunu okumuyor. pic i çıkarttığımda bi sorun yok ikisinden de +5v alabiliyorum çalıştırdıkça..
kodda da enkoder b0 pinine bağlı buton b1 pinine bağlı. enkoder kesme ile kontrol ediliyor. acaba kodda mı hata var? kodun okuma kısmı da aşağıda;
kodda bağzı yerler sl
Pic16f819 ile enkoder okutmak istiyorum. kodu falan yazdım. devreyi similasyonda hazırladım(isisde). orada sorunsuz çalışıyor fakat gerçeğe gelince işler sarpa sarıyor. enkoder çıkışını (24v enkoder, +24v çıkış veriyor, 100 puls) 16 tane optocouplere bağladım. 1k lık dirençlerle. diğerucları şaseye çektim. optocouplerin çıkışını da kollektörden +5v girdim emiterden pic'e bağladım. pic e giden uca 10k dirençle şaseye bağladım. bir tane de butonum var. o da 24v ile çalışıyor. onu da enkodere yaptığımı yaptım. buton kısmı pice tam 5v veriyo sorunsuz. yani butona bastığımda sorunsuz olarak giriyor fakat enkoder girişi aynı işlemi yapmıyor. 2,5v a düşüyor ki pic de bunu okumuyor. pic i çıkarttığımda bi sorun yok ikisinden de +5v alabiliyorum çalıştırdıkça..
kodda da enkoder b0 pinine bağlı buton b1 pinine bağlı. enkoder kesme ile kontrol ediliyor. acaba kodda mı hata var? kodun okuma kısmı da aşağıda;
Kod:
#include <16f819.h>#use delay(clock=20000000)
#fuses HS,PUT,NOWDT,NOBROWNOUT,NOPROTECT,NOMCLR,INTRC_IO
#use fast_io(a)
#use fast_io(b)
#define giris1 input(pin_b1) //sensor girişi
#define giris2 input(pin_b0) // enkoder girişi
#define tampon 10
unsigned int32 puls=100;
unsigned int8 c=0,d;
unsigned int8 an[tampon+1];
unsigned int8 dd[tampon+1];
int1 bit=1;
unsigned int32 counter[tampon+1];
#int_ext
void ext_kesmesi ()
{
output_bit(PIN_B5,0);
for(d=1;d<=tampon;d++)
{
if(giris1==0) bit=1;
if(an[c]==1)
{
counter[d]++;
if(counter[c] >= puls)
{
pic çıkışı,
}
}
}
}
void main ( )
{
setup_adc_ports(no_analogs);
set_tris_a(0xff);
set_tris_b(0b00000011);
output_a(0x00);
output_b(0x00);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
for(d=1;d<=tampon;d++) dd[d]=1;
while(true)
{
if( giris1==1 && bit==1)
{
c++;
bit=0;
}
if(giris1==0) bit=1;
if(c==(tampon+1))
{
c=1;
for(d=1;d<=tampon;d++) dd[d]=1;
}
for(d=1;d<=tampon;d++)
{
if(c==b) an[d]=1;
if(dd[d]==0) an[d]=0;
}
}
}
kodda bağzı yerler sl