PIC İLE ZAMAN AYARLI FLİP FLOP(YARDIM);

Başlatan musti, 16 Aralık 2016, 02:34:31

musti

Adem kardeş bu gönderdiğin Serdar Çiçek'in CCS C ile Pic programlama kitabının uygulama örnekleri.Kitabın kendisi zaten bende var.Söylediğim konuyla ilgili bir şeyler olsa o uygulamalar da yardım istemezdim zaten.Ayrıca soru sormak için  foruma üye oldum yardım almak için. Beni günah keçisi ilan etmeyin lütfen.

Adem AYDIN

Kimseye bir şey ilan etmedim sitede adc ve kesme örnekleri var bu iki programı birleştirip yazacaksın yapamadığın yerde yardım isteyebilirsin. Söylediğin konu ile ilgili şeyler var. Tekrar söylüyorum,
Bakmıyorsan Görmezsin.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

musti

eyvallah birader bakıyorum görüyorum birleştirmeyi defalarca denedim ama uygulayamıyorum.Kapasite meselesi işte yapacak bişe yok.Sen yapabiliyorsan yardımcı olsan forumun amacı olan paylaşıma hizmet etmiş olursun.bizde mutlu olur yeni projeler için takıldığımız yerlerde yardım isteriz yine

Adem AYDIN

O zaman sorunlarını yazarak başla, nerde sorun var? Sorunu anlamadan yardımcı olamayız. Birleştirme yapmışsın onun neresi hatalı onu yaz, bir yerde sorun varsa yada hangi kısmını yapamadın bunları yaz. Çokmu zor yardımcı olan yok bir yerde bulamadım deme sorunu söyle yada kaldığın kısmı. Büyük harfle yazma, internetinde bir kuralları var. Bu şekilde yardım istemek ne kadar doğru, neyse uzatmayayım sen sorunları yada çalışmayan şeyleri onları söyle.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

musti

/******************************************************
      PIC16F877 ile Timer0 Uygulaması-1
      PIC PROG/DEKA     : Port B jumper'ı LED konumunda olmalı
*******************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
// 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ı B portu için geçerli
#define use_portb_lcd TRUE
#include <lcd.c>
int i=0; // Tamsayı tipinde değişken tanımlanıyor

//****************** Timer0 Kesmesi *****************************

#int_timer0  // Timer0 kesmesi
void  timer0_kesme ()   // Kesme fonksiyonu ismi
{ set_timer0(1);   // TMR0 değeri belirleniyor
    i++;   // i değeri 1 arttırılıyor
    if (i==75)  // i değeri 75'a eşitse RB0 çıkışı lojik-1 olsun
{output_high(pin_c6);
output_low(pin_c7);

        lcd_putc("\f);
       lcd_putc("\n );}
    if (i==150)  // i değeri 150'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın
{output_high(pin_c7);
output_low(pin_c6);
       lcd_putc("\f       );
       lcd_putc("\n     ); 
   i=0;
           
       }
       
}

/********* 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_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi 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ış

   output_c(0x00);     // C portu çıkışı ilk anda sıfırlanıyor

   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
   set_timer0(60);   // TMR0 değeri belirleniyor


   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver
set_tris_c(0b00000000);
set_tris_a(0xFF);
set_tris_d(0x00);
output_d(0);
lcd_init();     
char dizi[4]={1,2,4,8};

lcd_putc("\f  );
lcd_putc("\n   );
delay_ms(3000);

output_high(pin_c5);
output_high(pin_c2);                   
delay_ms(0);                           
output_low(pin_c2);                     
delay_ms(20);         
  while(TRUE)   // Sonsuz döngü
 
  {

if(input(pin_a0)==1)                     
{output_d(dizi[0]);                        // 1.led aktif
output_high(pin_c4);                      // buzzer çıkış
delay_ms(50);                             // buzzer çıkış
output_low(pin_c4);                       // buzzer çıkış
output_high(pin_c2);                     
delay_us(1250);                           
output_low(pin_c2);                     
delay_ms(20);                             
lcd_putc("\f  );
lcd_putc("\n    );
       delay_ms(1000);
}
if(input(pin_a1)==1)                     
   {  output_d(dizi[1]);                     
      output_high(pin_c4);                     
      delay_ms(50);                             
      output_low(pin_c4);                     
      output_high(pin_c2);                     
      delay_us(1500);                         
      output_low(pin_c2);                       
      delay_ms(20);                           
      lcd_putc("\f  );
      lcd_putc("\n    );
            delay_ms(1000);
}

  if(input(pin_a2)==1)                         
  {   output_d(dizi[2]);                       
      output_high(pin_c4);                     
      delay_ms(50);                             
      output_low(pin_c4);                       
      output_high(pin_c2);                     
      delay_us(1750);                           
      output_low(pin_c2);                     
      delay_ms(20);                           
      lcd_putc("\f  ");
      lcd_putc("\n    ");
      delay_ms(1000);

      }

      if(input(pin_a3)==1)                     
  {   output_d(dizi[3]);                       
      output_high(pin_c4);                     
      delay_ms(50);                             
      output_low(pin_c4);                     
      output_high(pin_c2);                     
      delay_us(2000);                           
      output_low(pin_c2);                       
      delay_ms(20);                             
      lcd_putc("\f  ");
      lcd_putc("\n  );
            delay_ms(1000);
       }
       
  }

musti

Adem bu programın timer kısmını  ADC ile 1-15 saniye değişecek şekilde potansiyometre ile ayarlamam gerekli.Sorun bu kısma ADCyi bile tanımlayamadım hata verip durdu.

Adem AYDIN

#21
Ana program kısmında analog giriş kapalı adc nasıl yapacak? Bunu değiştirip dene. Sadece bu değil bir kaç eksik daha var adcde okunacak değeri bir değişkene aktarmak/kaydetmek gerek sonra hesap işlemi falan var.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

musti

Hah işte bende tam onu soruyordum.ilave edip yazabilirsin mesela.yazilari başından okursan ne istedigimi açık açık yazdım ete hoca da basamakları söyledi.yani ben ancak bu kadarını yapabildim.gerisi için yardım istedim.

Adem AYDIN

Sana yardım edebilmek için bu c dilinde adc olayına bakacağım. Nasıl adc okuması yapılır ne gibi komutlar kullanılmış bu verdiğim sitedeki örneklerden bakacağım sonra hazırlayıp buraya atmaya çalışırım. Kesmede sorun varsa onada bakayım.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

musti

Adem teşekkür ederim.kesmede sorun yok.yani şu an ortalama 3 saniyede 1 flip flop yapıyor.başlangıçta 6sn bekleme var onu çözemedim sadece.

Adem AYDIN

Bu sitede adc örneği var.
ccspic.com/ccs-c-ile-adc-uygulamasi/
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

musti

Evet adem zaten oda serdar çiçek in kitabında ki uygulamaldan birisi.dedigin gibi bunu ilişkilendirmeyi daha önce denemeye çalistim ama beceremedim yani mantık kuramadım.

ete

Basit bir program parçasını nerelere taşıdınız.
Bu programda ADC (AN0) aktive edilecek hangi işlemci kullanuılıyor ise.
Normal Kesmeler aktif edilmeyecek. Kesme kullanmaya gerek yok. Yalnızca TMR1 kesme bayrağına bakacağız kesme aktive etmeden.
Basic örnek programı aşağıdadır.
HAM VAR WORD
SURE VAR WORD
SAY  VAR BYTE
FLIP  VAR BIT
FLOP  VAR BIT

PAUSE 300


BASLA:
      ADCIN 0,HAM
      Sure=(HAM */351)+1  '1-15 sn aralığı
      T1CON=%00110001:SAY=SURE*2
BASLA_BIR:
          TMR1H=$0B:TMR1L=$DC:PIR1.0=0     

          WHILE PIR1.0
'          BU SATIRLARA LCD DE YAZILACAKLAR
'          YADA VARSA BAŞKA İŞLER YAPILACAKTIR
          WEND
          SAY=SAY-1
          IF SAY>0 THEN BASLA_BIR
'PROGRAM BU SATIRA GELDİĞİNDE SURE DEĞERİ KADAR SN GEÇMİŞ OLACAKTIR
          T1CON=0
          TOGGLE FLIP:FLOP=~FLIP
          CIKISA=FLIP:CIKISB=FLOP
          GOTO BASLA

ete

Adem AYDIN

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#byte porta=5                 //Porta Tanımlaması Yapıldı
#byte portb=6                 //Portb Tanımlaması Yapıldı
#define use_portb_lcd TRUE   // LCD B portuna bağlı
#include <lcd.c>   // lcd.c dosyası tanıtılıyor

unsigned long int ham,sure; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj;            // ondalıklı tipte voltaj isminde değişken tanıtılıyor
void main ( )
{
   set_tris_b(0x00);  // C portu komple çıkış
   set_tris_a(0xfF);

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog
   lcd_init();                            // LCD hazır hale getiriliyor
   
while(81)   // sonsuz döngü
   {
      set_adc_channel(0);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
      delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
      ham=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      delay_ms(10);
/*
      if(ham!=0)
      ham+=1;
*/
      sure=(HAM*0.0136852394)+1;  //1-15 sn aralığı
      printf(lcd_putc,"\fHam=%lu",ham); // AN5 ucundaki sinyalin dijital karşılığı LCD'ye aktarılıyor
      printf(lcd_putc,"\nsure=%lu",sure);
      delay_ms(180);
   }
}
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Adem AYDIN

ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Powered by EzPortal