CCS C ile Matris LED Display Uygulaması

pr_01_37_max

 

/******************************************************
 Uygulama Adı : Matris LED Display Uygulamas
*******************************************************/
#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ılan osilatör frekansı belirtiliyor

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

//******** Matrise Gönderilecek Karakter Bilgileri *******
 int A[]={0x03,0x75,0x76,0x75,0X03};
 int B[]={124, 4, 120, 4, 120};
 int C[]={0x41,0x3E,0x3E,0x3E,0x5D};
 int D[]={0x00,0x3E,0x3E,0x3E,0x41};
 int E[]={0x00,0xB6,0xB6,0xB6,0xBE};
 int arti[]={0x77,0x77,0x41,0x77,0x77};
 int cift_ok[]={0x6B,0x5D,0x00,0x5D,0x6B};

//******* Sütun Seçme Fonksiyonu ************
int sutunsec (int s)
{
 switch (s)
 {
 case 0: return(0x10);break; // 1. Sütun aktif, diğer sütunlar pasif
 case 1: return(0x08);break; // 2. Sütun aktif, diğer sütunlar pasif
 case 2: return(0x04);break; // 3. Sütun aktif, diğer sütunlar pasif
 case 3: return(0x02);break; // 4. Sütun aktif, diğer sütunlar pasif
 case 4: return(0x01);break; // 5. Sütun aktif, diğer sütunlar pasif
 }
}

//******* Matrise Veri Gönderme Fonksiyonu *******
void matris_karakter_gonder(char harf[], int tekrar)
{
 int i,j; // Değişkenler tanımlanıyor

 for (i=1;i<tekrar;i++) // Karakterin Matris LED'de görünmesi için tekrar döngüsü
 {
 for(j=0;j<5;j++) // // Bu döngüde tarama işlemi yapılıyor
 {
 output_c(sutunsec(j)); // Sütun seç ve C portuna sütun değerini gönder
 output_b(~harf[j]); // Gösterilecek harfin satır bilgisini B portuna gönder
 delay_ms(10); // Gecikme veriliyor
 }
 }
}

/********* 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_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
 set_tris_c(0x00); // C portu tümüyle çıkış olarak yönlendiriliyor

 while(1)
 {
 matris_karakter_gonder(A,25);// A karakterini matriste göster
 matris_karakter_gonder(B,25);// B karakterini matriste göster
 matris_karakter_gonder(C,25);// C karakterini matriste göster
 matris_karakter_gonder(D,25);// D karakterini matriste göster
 matris_karakter_gonder(E,25);// E karakterini matriste göster
 matris_karakter_gonder(arti,25);//+ karakterini matriste göster
 matris_karakter_gonder(cift_ok,25);// Çift yönlü ok karakterini matriste göster

 }
}

Matris LED Display Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ile LM35 Uygulaması

pr_01_37_max

 

National şirması taraşından üretilen LM35 sıcaklık sensörü, analog tipte olup santigrad derece başlına 10 milivolt gerilim üretir. Yani, sıcaklığın her 1°C artışına karşlılık, çıkış gerilimi 10mV artar. Örneğin, 20°C için çıkış gerilimi 200mV iken, 100°C için çıkış gerilimi 1V’dur. LM35 sıcaklık sensörünün pek çok tipi vardır. Her bir modelin sıcaklık ölçüm aralığı ve doğruluğu farklıdır. Örneğin, LM35DZ adlı sensör, 0°C ile 100°C arasındaki sıcaklıkları ölçer ve son derece doğrusal bir karakteristiğe sahiptir.

/******************************************************
 PIC16F877 ile LM35 Sıcaklık Sensörü Uygulaması
PIC PROG/DEKA : Port B jumper'ı LCD konumunda olmalı
*******************************************************/
#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(a) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // lcd.c dosyası tanıtılıyor

unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj,sicaklik; // ondalıklı tipte değişkenler 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_a(0x01); // RA0 Giriş olarak yönlendiriliyor

 setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
 setup_adc_ports(AN0); //RA0/AN0 girişi analog

 lcd_init(); // LCD hazır hale getiriliyor

 set_adc_channel(0); // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak
 delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir

 printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor
 while(1) // sonsuz döngü
 {
 bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor

 voltaj=(0.0048828125*bilgi)*1000; // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor
 sicaklik=(voltaj/10)+2; // Her 10mV'ta 1 derece artma

 lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda
 printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor
 // Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak.
 // Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f
 // komutu ile bu işlemler yaptırılmıştır.
 delay_ms(100); // 100 msn gecikme
 }
}


LM35 Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ile Kızıl Ötesi İletişim Uygulaması

pr_01_37_max

Alıcı:

/***********************************************
 PIC16F877 ile Kızıl Ötesi Alıcı Uygulaması
************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

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

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

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // lcd.c dosyası programa ekleniyor

#use rs232 (baud=2400,rcv=pin_C1,stop=1,parity=n) // RS232 ayarları yapılıyor

char data[16]; // dizi tanımlanı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_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ışı

 lcd_init(); // LCD hazır hale getiriliyor

 delay_ms(2000); // İletişime başlamadan 2 saniye bekleniyor

 while(1) // Sonsuz döngü
 {
 if (input(pin_c1)==0) // RC1 ucu sıfır ise (Kızıl ötesi alıcı, veri aldıysa)
 {
 gets(data); // RX ucuna gelen veriyi al
 printf(lcd_putc,"\f%s",data); // LCD'ye alınan string ifadeyi gönder
 delay_ms(1000); // 1 saniye bekleniyor
 printf(lcd_putc,"\f"); // LCD temizleniyor
 delay_ms(500); // 0.5 saniye bekleniyor
 }
 }
}

Verici:

/***********************************************
 PIC16F877 ile Kızıl Ötesi Verici Uygulaması
************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

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

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

#use rs232(baud=2400, xmit=PIN_C6, stop=1, parity=n) // RS232 iletişim ayarları yapı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_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

 setup_timer_2(T2_DIV_BY_1,25,1); // Timer2 ayarları yapılıyor, PWM sinyali frekansı=~38Khz olacak şekilde
 set_pwm1_duty(12); // PWM sinyalinin görev saykıl oranı belirleniyor
 setup_CCP1(CCP_PWM); // CCP modülü PWM çıkışı için ayarlanıyor 

 while(1) // Sonsuz döngü
 {
 printf("CCS C\r"); // Seri port çıkışından (TX) bilgi gönderiliyor
 delay_ms(500); // 0.5 saniye gecikme veriliyor
 }
}

Kızıl Ötesi İletişim Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ile Karşılaştırıcı ve Voltaj Referans Modülü Uygulaması

pr_01_37_max

 

/******************************************************
 PIC16F877A ile Karşılaştırıcı Modülü Uygulaması
PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı
*******************************************************/

#include <16f877A.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(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B 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_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_a(0x0B); // RA0,RA1,RA3 pini giriş,RA2 çıkış
 set_tris_b(0x00); // B portu komple çıkış

 output_b(0x00); // İlk anda B portu çıkışını sıfırla

 setup_comparator(A0_A3_A1_A3); // Karşılaştırıcı modülü ayarları yapılıyor
 setup_vref (VREF_A2|VREF_HIGH |15); // Voltaj referans modülü ayarları yapılıyor

 while (1) // Sonsuz döngü
 {
 if (C1OUT==1) // Karşılaştırıcı-1 çıkışı "1" ise
 output_high(pin_b0); // RB0 çıkışı lojik-1
 else
 output_low(pin_b0); // RB0 çıkışı lojik-0

 if (C2OUT==1) // Karşılaştırıcı-2 çıkışı "1" ise
 output_high(pin_b1); // RB1 çıkışı lojik-1
 else
 output_low(pin_b1); // RB1 çıkışı lojik-0
 }
}

Karşılaştırıcı ve Voltaj Referans Modülü Uygulaması

CCS C Örnekleri kategorisine gönderildi | , , ile etiketlendi | Yorum yapın

CCS C ile Grafik LCD Uygulaması

pr_01_37_max

 

/*******************************************************
 PIC16F877 ile Grafik LCD Uygulaması
*******************************************************/

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

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

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

#include <HDM64GS12.c> // HDM64GS12.c dosyası programa ekleniyor
#include <graphics.c> // graphics.c dosyası programa ekleniyor

char yazi1[]="GAZI"; // Karakter dizisi tanımlanıyor
char yazi2[]="UNIVERSITY"; // Karakter dizisi tanımlanıyor
int i,x1,y1,x2,y2;

/********* 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ışı

 glcd_init(ON); // Grafik LCD hazırlanıyor ve ekran siliniyor

 while(1)
 {
 glcd_init(ON); // Ekran siliniyor
 glcd_text57(39, 5, yazi1, 2, ON); // GLCD'de yazı yazdırılıyor
 glcd_text57(5, 30, yazi2, 2, ON); // GLCD'de yazı yazdırılıyor
 delay_ms(2000);

 glcd_init(ON); // Ekran siliniyor
 x1=5;
 y1=5;
 x2=100;
 y2=5;
 for(i=0;i<6;i++)
 {
 glcd_line(x1, y1, x2, y2, ON); // GLCD'de Çizgi çizdiriliyor
 y2=y1+=10; // y2=y1=y2+10; anlamında
 x2-=10; // x2=x2-10; anlamında
 delay_ms(1000);
 }

 glcd_init(ON); // Ekran siliniyor
 x1=y1=10;
 for (i=0;i<120;i++)
 {
 glcd_pixel(x1,y1,ON); // Ekranda istenen pikseller aktif yapılıyor
 y1=x1++; // y1=x1+1; anlamında
 delay_ms(50);
 }

 glcd_init(ON); // Ekran siliniyor
 y2=60;
 x1=5;
 for (i=0;i<8;i++)
 {
 glcd_bar(x1, 0, x1, y2, 10, ON); // GLCD'de çubuk çizdiriliyor
 delay_ms(1000);
 x1+=15; // x1=x1+15; anlamında
 y2-=5; // y2=y2-5; anlamında
 }

 glcd_init(ON); // Ekran siliniyor
 for(i=0;i<=30;i=i+5)
 {
 glcd_circle(60, 30, i, NO, ON); // GLCD'de Daire çizdiriliyor
 delay_ms(1000);
 }

 glcd_init(ON); // Ekran siliniyor
 x1=5;
 y1=5;
 x2=120;
 y2=63;
 for(i=0;i<6;i++)
 {
 glcd_rect(x1, y1, x2, y2, NO, ON); // GLCD'de dikdötrgen çizdiriliyor
 y1=x1+=5; // y1=x1+5; anlamında
 x2-=5; // x2=x2-5; anlamında
 y2-=5; // y2=y2-5; anlamında
 delay_ms(500);
 }


 }
}

Grafik LCD Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ve DS1990A İle 1-Wire (Tek Hat) İletişim Uygulaması

pr_01_37_max

1-wire tek hat Dallas firması tarafından geliştrilmiş tek sinyal hattı üzerinden çeşitli cihazların sinyal iletimi ve beslenmesini sağlayan iletişim sistemidir. Daha ayrıntılı bilgilere kitaptan ulaşabilirsiniz. Örnek kodlar ve proteus simülasyonu aşağıdadır.

/******************************************************
 PIC16F877 ile 1-Wire (Tek Hat) İletişim Uygulaması (DS1990A İle)
PIC PROG/DEKA : Port B jumper'ı LCD 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.

#include <1_wire.c> // 1-Wire iletişim fonksiyonlarının kaydedildiği dosya programa ekleniyor

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // lcd.c dosyası tanıtılıyor

int1 sonuc; // 1 bitlik değişken tanımlanıyor
int8 seri_no1=0,seri_no2=0,seri_no3=0,seri_no4=0,seri_no5=0,seri_no6=0,seri_no7=0,seri_no8=0; // 8 bitlik değişkenler tanımlanıyor
int32 seri_no=0; // 32 bitlik değişken tanımlanı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_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ışı

 lcd_init(); // LCD hazırlanıyor

 ow_hiz(1); // 1-Wire iletişim hızı standart seçildi

 while(1) // Sonsuz döngü
 {
 sonuc=ow_reset(); // 1-Wire cihazına reset sinyalini gönder

 if (sonuc==0) // Eğer data hattında 1-wire cihazı var ve sağlam ise
 {
 printf(lcd_putc,"\fCihaz calisiyor"); // LCD'ye veri gönderiliyor.
 delay_ms(1500); // 1.5 sn gecikme veriliyor

 ow_yaz_byte(0x33); //ROM numarası okuma komutu cihaza gönderiliyor

 seri_no1=ow_oku_byte(); // ROM numarasının ilk byte değeri aile (family) kodu'dur.
 seri_no2=ow_oku_byte(); // ROM numarasının 2. byte ile 7.byte değerleri
 seri_no3=ow_oku_byte(); // cihazın 48 bitlik seri nosunu oluşturur
 seri_no4=ow_oku_byte();
 seri_no5=ow_oku_byte();
 seri_no6=ow_oku_byte();
 seri_no7=ow_oku_byte();
 seri_no8=ow_oku_byte(); // ROM numarasının 8. byte değeri cihazın CRC değeridir

 seri_no=make32(seri_no2,seri_no3,seri_no4,seri_no5); // 8 bitlik değerleri birleştirerek 32 bitlik değer oluşturur

 printf(lcd_putc,"\fCihaz Aile Kodu"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X",seri_no1); // Cihaz aile kodu LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor
 printf(lcd_putc,"\fCihaz Seri No"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X%X%X%X%X%X",seri_no2,seri_no3,seri_no4,seri_no5,seri_no6,seri_no7); // Cihaz seri no LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor
 printf(lcd_putc,"\fCihaz CRC Degeri"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X",seri_no8); // Cihazın CRC değeri LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor

 if (seri_no==0x2CC5B800) // Eğer doğru cihaz sistemdeyse
 output_high(pin_c1); // RC1 pinine bağlı role çeker
 }
 else // Eğer data hattında 1-wire cihazı yok veya sağlam değilse
 printf(lcd_putc,"\fCihaz calismiyor");
 delay_ms(1500); // 1.5 sn gecikme veriliyor
 }
}

1-Wire (Tek Hat) İletişim Uygulaması (DS1990A İle)

CCS C Örnekleri kategorisine gönderildi | , , , , ile etiketlendi | Yorum yapın

CCS C ile Flash Program Hafızası Uygulaması

pr_01_37_max

/******************************************************
 PIC16F877 ile Flash Program Hafızası Uygulaması
PIC PROG/DEKA : Port B jumper'ı LCD 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(a) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // LCD.c dosyası programa ekleniyor

int16 adres=0,deger=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_a(0x01); // RA1 pini giriş

 lcd_init(); // LCD kurulumu yapılıyor

 printf(lcd_putc,"\fProgram Kodlari"); // LCD'ye yazı yazdırılıyor
 delay_ms(1000);
 printf(lcd_putc,"\fAdres Kod"); // LCD'ye yazı yazdırılıyor

 while (!(adres==0x3FFF)) // Program kodu 0x3FFF değerine eşit oluncaya kadar döngüyü işle
 // 0x3FFF Boş olan program bellek kodudur.
 {
 deger=read_program_eeprom(adres); // Program kod hafızasında belirtilen adresteki kodu oku
 lcd_gotoxy(1,2); // İmleç 1.sütun 2.satırda
 printf(lcd_putc,"\n%lx %lx",adres,deger); // LCD'ye program kod hafızası adresini ve içindeki kodu yaz
 delay_ms(500);
 adres++; // adres değişkeni içeriğini 1 arttır

 if (input(pin_a0)) // Eğer RA0 girişindeki butona basılırsa
 {
 delay_ms(20); // Buton arkını önlemek için
 write_program_eeprom(adres, 0x0000); // Belirtilen program kod hafızası adresine 0 bilgi yaz
 }
 }
 printf(lcd_putc,"\fProgram Bitti..."); // Programın sonuna geldiğini bildirir
}

Flash Program Hafızası Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ile DS1868 Dijital Potansiyometre Uygulaması

pr_01_37_max

 

/******************************************************************
 PIC16F877 ile DS1868 Dijital Potansiyometre Uygulaması
*******************************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık // dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

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

#include <DS1868.c> // DS1868.c dosyası programa ekleniyor

// Butonlar ve Anahtar Tanımlamaları Yapılıyor
#define pot_reset pin_a0
#define pot_sec pin_a1
#define arttir pin_a2
#define azalt pin_a3

int i=0,j=0; // Tam sayı tipinde değişkenler tanımlanıyor

//******************* ANA PROGRAM FONKSİYONU *******************
void main ()
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_spi(SPI_SS_DISABLED); // SPI 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ışı

 init_pots(); // 2 potansiyometre değeri ilk anda sıfırlanıyor

 while(1) // Sonsuz döngü
 {
 if (input(pot_reset)) // Eğer Pot reset butonuna basıldı ise
 {
 init_pots(); // 2 potansiyometreyi de sıfırla
 i=0; j=0; // i ve j değerleri de sıfırla
 }

 if (input(pot_sec)) // 0. Potansiyometre seçilmiş ise
 {
 if (input(arttir)) // Arttir butonuna basılmış ise
 {
 i++; // i değerini bir arttır
 set_pot(0,i); // 0. potansiyometreyi i değerine ayarla
 while(input(arttir)); // Butondan el çekile kadar bekle
 }

 if (input(azalt) && (i!=0)) // Azalt butonuna basılmış ise ve
 { // i değeri 0 değil ise
 i--; // i değerini bir azalt
 set_pot(0,i); // 0. potansiyometreyi i değerine ayarla
 while(input(azalt)); // Butondan el çekile kadar bekle
 }
 }
 else // 1. potansiyometre seçilmiş ise
 {
 if (input(arttir)) // Arttir butonuna basılmış ise
 {
 j++; // j değerini bir arttır
 set_pot(1,j); // 1. potansiyometreyi j değerine ayarla
 while(input(arttir)); // Butondan el çekile kadar bekle
 }

 if (input(azalt) && (j!=0)) // Azalt butonuna basılmış ise ve
 { // j değeri 0 değil ise
 j--; // j değerini bir azalt
 set_pot(1,j); // 1. potansiyometreyi j değerine ayarla
 while(input(azalt)); // Butondan el çekile kadar bekle
 }
 }
 }
}

DS1868 Dijital Potansiyometre Uygulaması

CCS C Örnekleri kategorisine gönderildi | , ile etiketlendi | Yorum yapın

CCS C ile DS1621 Sıcaklık ve Termostat Entegresi Uygulaması

pr_01_37_max

 

/******************************************************************
 PIC16F877 ile DS1621 Sıcaklık ve Termostat Entegresi Uygulaması
*******************************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık // dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

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

#define use_portb_lcd TRUE // LCD B portuna bağlı
#include <lcd.c> // lcd.c dosyası programa ekleniyor

#use i2c(master,sda=pin_c1, scl=pin_c0, slow=100000) // I2C Fonksiyonu,SDA ve SCL pinleri ve iletişim hızı belirleniyor

//***************** DS1621 SICAKLIK OKUMA FONKSİYONU **************************

float ds1621_oku (void)
{
 signed int8 th,tl;
 float sicaklik;

 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // R/W biti yazma yapılacağı için "0"
 i2c_write(0x22); // sıcaklık dönüşümünü durdur komutu gönderiliyor
 i2c_stop(); // i2c iletişimini durdur

 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // yazma yapılacağından burada R/W biti "0"
 i2c_write(0xee); // Sıcaklık dönüşümüne başla komutu gönderiliyor
 i2c_stop(); // i2c iletişimini durdur

 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 i2c_write(0xaa); // Sıcaklığı oku komutu gönderiliyor
 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x91); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // okuma yapılacağından burada R/W biti "1"
 th=i2c_read(0); // sıcaklık değerinin yüksek 8 bitlik değerini oku ve "th" değişkenine kaydet
 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x91); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 tl=i2c_read(0); // sıcaklık değerinin düşük 8 bitlik değerini oku ve "tl" değişkenine kaydet
 i2c_stop(); // i2c iletişimini durdur

 if (tl==0x80) // Eğer sıcaklık değeri buçuklu ise sıcaklığa 0.5 ekle
 sicaklik=th+0.5;
 else
 sicaklik=th; // Eğer sıcaklık değeri buçuklu değilse aynen değişkene kaydet

 delay_ms(11);
 return(sicaklik); // Fonksiyon "sicaklik" değeri ile geri döner
}

//*************** DS1621 TH ve TL'ye VERİ YAZMA FONKSİYONU ****************************

void yaz_ds1621_th_tl (signed int th_h, signed int th_l, signed int tl_h, signed int tl_l)
{
 if (th_l==0x05) // Eğer th_l sıcaklık değeri buçuklu ise
 th_l=0x80; // TH'ın düşük değerlikli 8.bitinde bu belirtiliyor

 if (tl_l==0x05) // Eğer tl_l sıcaklık değeri buçuklu ise
 tl_l=0x80; // TL'nın düşük değerlikli 8.bitinde bu belirtiliyor

 i2c_start(); // i2c iletişimi başlangıç ayarları
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // yazma yapılacağından burada R/W biti "0"
 i2c_write(0xa1); // TH'a erişme komutu gönderiliyor
 i2c_write(th_h); // TH değerinin yüksek değerlikli byte'ı gönderiliyor
 i2c_write(th_l); // TH değerinin düşük değerlikli byte'ı gönderiliyor
 i2c_stop(); // i2c iletişimi sonlandırılıyor
 delay_ms(11); // Belli bir süre bekleniyor

 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 i2c_write(0xa2); // TL'ye erişme komutu gönderiliyor
 i2c_write(tl_h); // TL değerinin yüksek değerlikli byte'ı gönderiliyor
 i2c_write(tl_l); // TL değerinin düşük değerlikli byte'ı gönderiliyor
 i2c_stop(); // i2c iletişimini durdur
 delay_ms(11);
}

//******** DS1621 KONFİGÜRASYON KAYDEDİCİSİNE VERİ YAZMA FONKSİYONU ************

void yaz_ds1621_ayar (byte deger)
{
 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 i2c_write(0xac); // Konfigürasyon kaydedicisine erişme komutu gönderiliyor
 i2c_write(deger); // Konfigürasyon ayar bilgisi gönderiliyor
 i2c_stop(); // i2c iletişimini durdur
 delay_ms(11);
}

//************ DS1621 KONFİGÜRASYON KAYDEDİCİSİNİ OKUMA FONKSİYONU *************

byte oku_ds1621_ayar ()
{
 byte con;

 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x90); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // yazma yapılacağından burada R/W biti "0"
 i2c_write(0xac); // Konfigürasyon kaydedicisine erişme komutu gönderiliyor
 i2c_start(); // i2c iletişimini başlat
 i2c_write(0x91); // DS1621 entegresine adres ve R/W bit bilgisi gönderiliyor
 // okuma yapılacağından burada R/W biti "1"
 con=i2c_read(0); // Konfigürasyon kaydedicisi içeriği okunuyor
 i2c_stop(); // i2c iletişimini durdur
 return(con); // Fonksiyon "con" değişkeni değeri ile geri döner
}

char sonuc[17]; // Karakter tipinde dizi tanımlanıyor
byte ayar; // byte olarak değişken tanımlanıyor

//******************* ANA PROGRAM FONKSİYONU *******************
void main ()
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_spi(SPI_SS_DISABLED); // SPI 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ışı

 lcd_init(); // LCD başlangıç ayarları yapılıyor
 delay_ms(5);

 ayar=oku_ds1621_ayar(); // DS1621 konfigürasyon kaydedicisi içeriği okunuyor
 bit_set(ayar,1); // Konfigürasyon kaydedicisinde POL biti "1" yapılıyor
 // bu bit alarm anında çıkışın lojik-1 olması için
 // "1" yapılıyor
 bit_clear(ayar,0); // Konfigürasyon kaydedicisinde 1SHOT biti "0" yapılıyor
 // sürekli sıcaklık okuması yapılsın diye
 yaz_ds1621_ayar(ayar); // Yapılan değişiklikler konfigürasyon kaydedicisine aktarılıyor

 yaz_ds1621_th_tl(24,5,21,0); // TH ve TL değerleri belirleniyor

 while(1) // Sonsuz döngü
 {
 sprintf(sonuc,"\fSicaklik=%0.1fC",ds1621_oku());
 printf(lcd_putc,"%s",sonuc);
 delay_ms(500);
 }
}

DS1621 Sıcaklık ve Termostat Entegresi Uygulaması

CCS C Örnekleri kategorisine gönderildi | , , ile etiketlendi | Yorum yapın

CCS C ile DS1302 RTC Uygulaması

pr_01_37_max

 

DS1302 entegresi gerçek-zaman saati (RTC) olarak çalışır. Saniyeyi, dakikayı, saati, günü, ayı, yılı, haftanın gününü sayar. 2100 yılına kadarki tarih bilgileri entegrenin içinde kayıtlıdır. Her ayın sonunda otomatik olarak ay ve gün bilgisini ayarlar. Örneğin 29 Şubat 2008 tarihinden sonra 1 Mart 2008 tarihine geçer. 2 V ile 5 V arasındaki gerilimlerde çalışan entegrede, 31 baytlık RAM bölgesi vardır. 2 V besleme geriliminde çalışırken 300 nA’den daha az akım çeker.

Entegrenin çalışması için X1 ve X2 adlı bacaklara 32.768 kHz’lik bir kristal bağlanması gerekir. Kristalin niteliği ve duyarlılığı, saatin doğruluğunu etkiler. Piyasada kolayca bulunan kristallerden kullanılması durumunda ayda birkaç dakikalık hata ortaya çıkması normaldir. Daha doğru bir saat yapmak istenirse, DS32kHz adlı özel kristal entegresi kullanılmalıdır. Bu kristalle saatin hatası yılda bir dakikaya kadar düşürülebilir.

DS1302 entegresi mikrodenetleyiciyle haberleşmek için CE, I/O ve SCLK uçlarını kullanır. Entegrenin iki besleme ucu bulunur. Vcc2 adlı ana besleme ucuna 5 V’luk gerilim kaynağı bağlanır. Vcc1 adlı besleme ucuna da pil ya da yüksek kapasiteli bir kondansatör bağlanır. Böylece enerji kesintisi olduğu durumda güncel saati ve tarihi saymayı sürdürür. Örneğin yedek besleme kaynağı olarak 1 F’lık kondansatör kullanılırsa, yaklaşık bir aylık bir enerji kesintisinden bile etkilenmeden çalışmasını sürdürür. 50 mAh’lik lityum batarya kullanıldığındaysa bu süre 10 yıla kadar çıkar.

/******************************************************************
 PIC16F877 ile DS1621 Sıcaklık ve Termostat Entegresi Uygulaması
*******************************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık // dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

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

#define use_portb_lcd TRUE // LCD B portuna bağlı
#include <lcd.c> // LCD.c dosyası programa ekleniyor
#include <DS1302.c> // DS1302.c dosyası programa ekleniyor

byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu; // byte türünde değişkenler tanımlanı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_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ışı

 lcd_init(); // LCD başlangıç ayarları yapılıyor
 rtc_init(); // DS1302 başlangıç ayarları yapılıyor

 rtc_set_datetime(20,07,07,6,22,52); // Tarih ve Saat ayarları yapılıyor

 while(1)
 {
 rtc_get_time(saat,dakika,saniye); // DS1302'den saat,dakika,saniye bilgileri alınıyor
 rtc_get_date(gun,ay,yil,haftanin_gunu); // DS1302'den gün,ay,yil ve günün isim bilgisi alınıyor
 printf(lcd_putc,"\fT:%02d/%02d/20%02d ",gun,ay,yil); //LCD'ye gün,ay,yıl bilgileri yazdırılıyor

 switch(haftanin_gunu) // DS1302'den sayısal olarak alınan haftanın günü bilgisine
 { // metin olarak karşılık atanıyor
 case 1: printf(lcd_putc,"PAZ"); break; // Eğer "1" ise LCD'ye PAZ yaz
 case 2: printf(lcd_putc,"PZT"); break; // Eğer "2" ise LCD'ye PZT yaz
 case 3: printf(lcd_putc,"SAL"); break; // Eğer "3" ise LCD'ye SAL yaz
 case 4: printf(lcd_putc,"CRS"); break; // Eğer "4" ise LCD'ye CRS yaz
 case 5: printf(lcd_putc,"PER"); break; // Eğer "5" ise LCD'ye PER yaz
 case 6: printf(lcd_putc,"CUM"); break; // Eğer "6" ise LCD'ye CUM yaz
 case 7: printf(lcd_putc,"CTS"); break; // Eğer "7" ise LCD'ye CTS yaz
 }
 printf(lcd_putc,"\nSaat:%02d:%02d:%02d",saat,dakika,saniye); // LCD'ye saat,dakika ve saniye değerlerini yaz
 delay_ms(1000); // 1 sn gecikme veriliyor
 }
}

DS1302 RTC Uygulaması

CCS C Örnekleri kategorisine gönderildi | , , ile etiketlendi | Yorum yapın