Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: helloworld - 10 Ekim 2014, 23:39:54

Başlık: ccs c ile voltaj farkı
Gönderen: helloworld - 10 Ekim 2014, 23:39:54

(http://s29.postimg.cc/ruav3mk2b/Ads_z.jpg) (http://postimg.cc/image/ruav3mk2b/)

merhaba!
resimde de görüldüğü gibi 2 tane brbrndn farklı voltaj degeri a pinlerinden giriyor.ve çıkış olarak da b pini aralarındaki farklı bildiriyor.fikir yürütebilen paylaşabilir mi?
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: mehmet - 13 Ekim 2014, 03:06:15
Analog giriş yapıp fark alınır. Bu pwm
olarak dışarı verilir. Uygun filitre
dc gerilime çevrilir. Ya da PCF8591
ile iki değer okunur fark alınır, bu
Aout ile dışarı verilir.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: Salih - 13 Ekim 2014, 11:02:10
@helloword sorduğun devre ne amaçladır,
dersindeki bir sorumudur, projemidir, yapman gereken devremidir?
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 13 Ekim 2014, 11:27:45
Projem için yapmam gereken aşamalardan biri.analog girişleri alıp pwm olarak dışarı vermem gerekiyor(@ mehmet e katılıyorum) kodlarını yazamıyorum.ayrı ayrı olsa kodlarını yazarım belki ama iç içe olunca yazamadım
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: sadogan - 13 Ekim 2014, 20:18:30
Takılıdığın yer neresi :
V1-V2<0 olma durumumu ?
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 13 Ekim 2014, 20:28:06
Hayır v1-v2 ye göre bi motorun voltajını arttırıp azaltıcam
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: Salih - 13 Ekim 2014, 20:30:15
Önce çalışacağın PIC modelini tespit et,
ve programa başla, takıldığın yerlerde yardım ederiz.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 20 Ekim 2014, 04:11:12

(http://s10.postimg.cc/lpi91ciit/Ads_z.jpg) (http://postimg.cc/image/lpi91ciit/)

girişe 2 farklı voltaj degeri veriyorum.bunların farkı float oldugu için çıkışa (b portu) binary olarak veremiyorum.nasıl yapabilirim acaba.

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(e) //Port yönlendirme komutları E portu için geçerli


#byte portb=6



#INT_AD               // ADC çevrimi bitti kesmesi
void ADC_Kesmesi ( )
{
   output_high(pin_c5);  // RC5 çıkışı 1
   delay_ms(200);
   output_low(pin_c5);   // RC5 çıkışı 0
}

unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
double voltaj1,voltaj2,V_fark;            // ondalıklı tipte voltaj isminde değişken tanıtılıyor

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_c(0x00);  // C portu komple çıkış
   set_tris_e(0x0F);  // E portu komple giriş

   output_c(0x00);    // C portu çıkışını sıfırla

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog
   enable_interrupts(INT_AD);     // AD çevrimi bitti kesmesi tanıtılıyor
   enable_interrupts(GLOBAL);     // Tüm kesmeler aktif



   while(1)   // sonsuz döngü
   {
      set_adc_channel(5);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

      voltaj1=0.0048828125*bilgi;  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
     
      delay_ms(500);
   
      set_adc_channel(6);   // RE1/AN6 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      bilgi=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

      voltaj2=0.0048828125*bilgi;  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      delay_ms(500);
       
      V_fark=voltaj1-voltaj2;   //burada farkını buluyorum.fakat ondalıklı
     
     
     
      set_tris_b(portb);
             
   }
}


nasıl bir kod yazalım ki V_fark 8 bitlik b portuna binary olarak aktarılsın.daha sonra buradan DAC yapmam gerekicek.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: sadogan - 20 Ekim 2014, 13:14:16
Adc ile okuduğun değer giriş geriliminin binary değeri
bunu ister dac ister pwm e gönder ordada farkın binary değeri gerekiyor.
Kısaca onlu siteme çevirmen gerekmiyor.
Söyle yapabilirsin.

include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(e) //Port yönlendirme komutları E portu için geçerli


#byte portb=6



#INT_AD               // ADC çevrimi bitti kesmesi
void ADC_Kesmesi ( )
{
   output_high(pin_c5);  // RC5 çıkışı 1
   delay_ms(200);
   output_low(pin_c5);   // RC5 çıkışı 0
}

unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
double voltaj1,voltaj2,V_fark;            // ondalıklı tipte voltaj isminde değişken tanıtılıyor

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_c(0x00);  // C portu komple çıkış
   set_tris_e(0x0F);  // E portu komple giriş

   output_c(0x00);    // C portu çıkışını sıfırla

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog
   enable_interrupts(INT_AD);     // AD çevrimi bitti kesmesi tanıtılıyor
   enable_interrupts(GLOBAL);     // Tüm kesmeler aktif



   while(1)   // sonsuz döngü
   {
      unsigned int16 adc_val1,adc_val2,adc_fark;
      set_adc_channel(5);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      adc_val1=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

  //    voltaj1=0.0048828125*bilgi;  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
     
      delay_ms(500);
   
      set_adc_channel(6);   // RE1/AN6 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      adc_val2=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

    //  voltaj2=0.0048828125*bilgi;  // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
      delay_ms(500);
       
      adc_fark=adc_val1-adc_val2;   //burada farkını buluyorum.fakat ondalıklı
     
     
     
      set_tris_b(portb);
             
   }
}
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: Salih - 20 Ekim 2014, 13:36:34
Alıntı yapılan: helloworld - 13 Ekim 2014, 20:28:06
Hayır v1-v2 ye göre bi motorun voltajını arttırıp azaltıcam

Motorun özelliği nedir.
Eğer DC ise pic den pwm çıkışını bir mosfet le motora uygulayabilirsin.
Pwm'nin değerini de fark gerilime bağlarsın.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 20 Ekim 2014, 21:01:44
Alıntı yapılan: salih - 20 Ekim 2014, 13:36:34
Motorun özelliği nedir.
Eğer DC ise pic den pwm çıkışını bir mosfet le motora uygulayabilirsin.
Pwm'nin değerini de fark gerilime bağlarsın.

motor 12v dc hocam.

@sadogan , şimdi 3.33 v ile 2.50 nin farkı 0.83 ya.yazdıgın programda bu portb ye aktarılan deger ne oluyor? ben orasını anlıyamıyorum.pwm yapsam nasıl yaparım.yani benim o 0.83 ü birşekilde belirtmem gerek portb de.yani artık 8 bitlik mi olur bu? yoksa pwm mi yapılır nasıl yapılır?

çünkü amacım şu.bu gelen analog bilgide motorun yüke binip binmedigini pic anlıyacak.binerse motorun voltajını arttırıcam.motor da aynı hızıyla dönmeye devam edicek.projeyi veren hoca ilk 2 tane voltajın farkını bul çıkısa bildir getir bakalım dedi.aşama aşama gidiyorum.o yüzden gerçekten yardım lazım.geceleri buna çalısmaktan çıldırıcam  :-\

mesaj birleştirme:: 20 Ekim 2014, 21:59:23

portb=adc_fark;
set_tris_b(portb);

burada b portu 8 bitlik ama adc 10 bitlik.msb tarafından 2bit b protunda gözükmüyor.artan 2 biti c portundan nasıl devam ettirebilirim?

yani aşşagıdaki gibi olucak


(http://s30.postimg.cc/pnb7t2ecd/asfdasfa.jpg) (http://postimg.cc/image/pnb7t2ecd/)

yukarıda fark 2 v: ve çıkış 0110011001=409 ve 409*0,004...=2v ama baştaki 2 biti b portundan gösteremiyorum
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: Salih - 20 Ekim 2014, 22:04:53
Forumu biraz araştırsan istediğin her şeyi bulursun.
Aşağıdaki linkdeki konu hemen hemen senin istediğinle aynı, bir incele.

https://www.picproje.org/index.php/topic,45659.msg337869.html#msg337869 (https://www.picproje.org/index.php/topic,45659.msg337869.html#msg337869)
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: sadogan - 20 Ekim 2014, 22:34:29

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(e) //Port yönlendirme komutları E portu için geçerli

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_c(0x00);  // C portu komple çıkış
   set_tris_e(0x0F);  // E portu komple giriş

   output_c(0x00);    // C portu çıkışını sıfırla

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog
    enable_interrupts(GLOBAL);     // Tüm kesmeler aktif
   while(1)   // sonsuz döngü
   {
      unsigned int16 adc_val1,adc_val2,adc_fark;
      set_adc_channel(5);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      adc_val1=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
       set_adc_channel(6);   // RE1/AN6 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      adc_val2=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      adc_fark=adc_val1-adc_val2; 
      output_b(adc_fark);       
      output_c(adc_fark>>8);
             
}
}


Bu istediğin basit bir işlem, programını düzenledim
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 20 Ekim 2014, 22:37:58
az önce en baştaki #devide ADC=10 U 8 yaptım.b portuna sıgdırdım.ama hassas olmaz diye senin kodunu kullanıyım.peki şimdi dac yapıp bunu 2v olarak nasıl çıkarabilirim.mesela dac0800 var ama isis te no model specified diyor.
şu farkı analog olarak nasıl verebilirim ekstra dac entegresi kullanark.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: Salih - 20 Ekim 2014, 22:37:58
@sadogan arkadaş nihayetinde DC motor kontrol etmek istiyor.
Dolayısı ile pwm çıkışı kullanması gerekir.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: sadogan - 20 Ekim 2014, 22:54:54
Alıntı yapılan: salih - 20 Ekim 2014, 22:37:58
@sadogan arkadaş nihayetinde DC motor kontrol etmek istiyor.
Dolayısı ile pwm çıkışı kullanması gerekir.
Başta bende öyle düşünmüştüm ama dac kullanmak istediğine göre  liner bir
sürücü yapacak gibi.
Başlık: Ynt: ccs c ile voltaj farkı
Gönderen: helloworld - 20 Ekim 2014, 22:56:38
Valla ben de anlamadım.hoca önce bu farkı bul getir dedi.haftalık gidiyorum yanına.