Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Atima - 03 Haziran 2021, 14:14:16

Başlık: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 03 Haziran 2021, 14:14:16
Merhabalar, 16f877a ile ccp2 ve timer1 kullanarak sensör out pininden frekans ölçmek istiyorum. Yardımcı olur musunuz?
Kullandığım derleyici CCS C.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: sadogan - 03 Haziran 2021, 21:24:38
 
Merhaba ,
 CCP2 capture modunda çalışıp peryot ölçmen lazım,
neler yaptığını paylaşabilirsen yardımcı olmaya çalışalım.
 
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 03 Haziran 2021, 22:58:44
Alıntı yapılan: sadogan - 03 Haziran 2021, 21:24:38Merhaba ,
 CCP2 capture modunda çalışıp peryot ölçmen lazım,
neler yaptığını paylaşabilirsen yardımcı olmaya çalışalım.
 
Acikcasi cok bisey yapmadim nette hazir kodlarla kendime gore duzenledim fakat duzgun calismiyor. renk ayirma sistemi yapiyorum tcs3200. Renklerin frekanslarini olcmem gerektigini dusundugum icin.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 03 Haziran 2021, 23:02:31
Alıntı yapılan: sadogan - 03 Haziran 2021, 21:24:38Merhaba ,
 CCP2 capture modunda çalışıp peryot ölçmen lazım,
neler yaptığını paylaşabilirsen yardımcı olmaya çalışalım.
 

(https://i.ibb.co/zSdczFb/20210603-230052.jpg) (https://ibb.co/zSdczFb)

(https://i.ibb.co/k4mKkcS/20210603-230036.jpg) (https://ibb.co/k4mKkcS)

Bu kodlarla timer1ve2 kullanilmus gerekli baglantilarla renklere tuttugumda frekanslari olculuyor fakat kararsiz olcuyor.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: mr.engineer - 04 Haziran 2021, 10:01:12
Kullandığın PIC'de neler var bilmiyorum ama ben son yaptığım işlemde IOC(İnterrupt On Change) ve Timer kullanarak gelen bir kare sinyalde bit aralıklarını ölçmüştüm.

İlk edge geldiğinde IOC kesmesi gelir ve timer saymaya başlar, sonraki edge'de timer değerini okur ve timer'ı sıfırlarsın. Daha sonraki edge'de yine timer'ı oku ve sıfırla....
Zaten ilk iki pulse aralığını okuyunca frekansı bulmuş olursun. Ama frekansın değişme durumu olacağı için okuma işlemini her gelen edge için yapmalısın.
Tam hatırlamıyorum ama bu yöntem CCP'den daha basitti.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 04 Haziran 2021, 10:20:56
Alıntı yapılan: mr.engineer - 04 Haziran 2021, 10:01:12Kullandığın PIC'de neler var bilmiyorum ama ben son yaptığım işlemde IOC(İnterrupt On Change) ve Timer kullanarak gelen bir kare sinyalde bit aralıklarını ölçmüştüm.

İlk edge geldiğinde IOC kesmesi gelir ve timer saymaya başlar, sonraki edge'de timer değerini okur ve timer'ı sıfırlarsın. Daha sonraki edge'de yine timer'ı oku ve sıfırla....
Zaten ilk iki pulse aralığını okuyunca frekansı bulmuş olursun. Ama frekansın değişme durumu olacağı için okuma işlemini her gelen edge için yapmalısın.
Tam hatırlamıyorum ama bu yöntem CCP'den daha basitti.
Duruyorsa kodu paylasabilir misiniz ?
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: sadogan - 04 Haziran 2021, 11:55:52
#include <16f877A.h>     
 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) 
#use RS232(baud=19200, xmit=PIN_C6, rcv=PIN_c7,STREAM = UART1, ERRORS )
#use fast_io(b) 
#use fast_io(c) 

#INT_CCP2   
void CapTur2INT()
{
   set_timer1(0);
}
void main ( )
{
   delay_ms(10);
   setup_psp(PSP_DISABLED);         
   set_tris_c(0x07);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
 
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);             
 
   enable_interrupts(INT_CCP2); 
   enable_interrupts(GLOBAL);   

 
   setup_ccp2(CCP_CAPTURE_RE);    //Yükselen kenarda
   CCP_2_HIGH=0x00; 
   CCP_2_LOW=0x00;   
   set_timer1(0);


 
   while(true)
   {
          printf("%LU \n\r",CCP_2);// peryot'u yaz.
          delay_ms(1000);
   }
}


Capture modu ile kare dalganın peryodunu ölçmek için bir örnek.
Ölçmek istediğin peryot uzunluğuna göre ayarlama yapman gerekebilir.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 04 Haziran 2021, 12:43:55
Alıntı yapılan: sadogan - 04 Haziran 2021, 11:55:52#include <16f877A.h>     
 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) 
#use RS232(baud=19200, xmit=PIN_C6, rcv=PIN_c7,STREAM = UART1, ERRORS )
#use fast_io(b) 
#use fast_io(c) 

#INT_CCP2   
void CapTur2INT()
{
   set_timer1(0);
}
void main ( )
{
   delay_ms(10);
   setup_psp(PSP_DISABLED);         
   set_tris_c(0x07);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
 
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);             
 
   enable_interrupts(INT_CCP2); 
   enable_interrupts(GLOBAL);   

 
   setup_ccp2(CCP_CAPTURE_RE);    //Yükselen kenarda
   CCP_2_HIGH=0x00; 
   CCP_2_LOW=0x00;   
   set_timer1(0);


 
   while(true)
   {
          printf("%LU \n\r",CCP_2);// peryot'u yaz.
          delay_ms(1000);
   }
}


Capture modu ile kare dalganın peryodunu ölçmek için bir örnek.
Ölçmek istediğin peryot uzunluğuna göre ayarlama yapman gerekebilir.

.

Oncelikle tesekkur ederim.
Bu program ile renk sensorunu renklerin uzerinde tutup degerleri olcecegim. Sonra karsilastirma ile renkleri tanimasini deneyecegim.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 04 Haziran 2021, 23:22:50
Alıntı yapılan: sadogan - 04 Haziran 2021, 11:55:52#include <16f877A.h>     
 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) 
#use RS232(baud=19200, xmit=PIN_C6, rcv=PIN_c7,STREAM = UART1, ERRORS )
#use fast_io(b) 
#use fast_io(c) 

#INT_CCP2   
void CapTur2INT()
{
   set_timer1(0);
}
void main ( )
{
   delay_ms(10);
   setup_psp(PSP_DISABLED);         
   set_tris_c(0x07);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
 
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);             
 
   enable_interrupts(INT_CCP2); 
   enable_interrupts(GLOBAL);   

 
   setup_ccp2(CCP_CAPTURE_RE);    //Yükselen kenarda
   CCP_2_HIGH=0x00; 
   CCP_2_LOW=0x00;   
   set_timer1(0);


 
   while(true)
   {
          printf("%LU \n\r",CCP_2);// peryot'u yaz.
          delay_ms(1000);
   }
}


Capture modu ile kare dalganın peryodunu ölçmek için bir örnek.
Ölçmek istediğin peryot uzunluğuna göre ayarlama yapman gerekebilir.

lcd ekranda yazmıyor sanırım çalıştıramadım
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: sadogan - 05 Haziran 2021, 01:09:55
Uartan yazıyor bu, lcd için düzenlemeniz lazım.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 05 Haziran 2021, 10:29:30
Alıntı yapılan: sadogan - 05 Haziran 2021, 01:09:55Uartan yazıyor bu, lcd için düzenlemeniz lazım.
Lcd dosyasini ekledim ve printf(lcd_putc 
Komutuunu kulladim rs232 kismini silerek fakat deger alamadim
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: sadogan - 05 Haziran 2021, 12:33:09
LCD herhangi bir şey yazıyormu ?
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 05 Haziran 2021, 14:18:50
Alıntı yapılan: sadogan - 05 Haziran 2021, 12:33:09LCD herhangi bir şey yazıyormu ?

Herhangi bir karakter olmuyor ama siyah kareler mevcut. Baglantidan dolayi olabilir mi cok kez kontrol ettim ama
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: tekosis - 05 Haziran 2021, 15:45:10
Önce başka bir programda sadece lcd ekrana yazı yazdırmayı deneyin. O kısmı hallettikten sonra frekans ölçümünü halledersinz.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: tekosis - 05 Haziran 2021, 15:45:31
Şemanızı da bir paylaşın.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 05 Haziran 2021, 16:09:23
Alıntı yapılan: tekosis - 05 Haziran 2021, 15:45:10Önce başka bir programda sadece lcd ekrana yazı yazdırmayı deneyin. O kısmı hallettikten sonra frekans ölçümünü halledersinz.
Tabikide. Tesekkur ederim
Peki tcs3200 ile frekansi olcerken s2 s3 pinlerinde kodlamalarda nasil bir yol izlemeliyim.
Ornegin kirmizi renge tutup frekansi okumak icin farkli kod yesil renk icin farkli kod mu gerekiyor. Sonucta her ikisi icin s2 s3 pinleri farklu deger aliyor.
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 06 Haziran 2021, 00:40:37
(https://i.ibb.co/SRMSqvv/20210606-003734.jpg) (https://ibb.co/SRMSqvv)

(https://i.ibb.co/f1Fj4c2/20210606-003724.jpg) (https://ibb.co/f1Fj4c2)

Bu tarz bazen 0 gozukmesi normal mi ?
Başlık: Ynt: 16f877a ile CCP2 ve timer1 kullanımı
Gönderen: Atima - 09 Haziran 2021, 12:53:05
?