Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: matador - 28 Ağustos 2013, 14:45:26

Başlık: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: matador - 28 Ağustos 2013, 14:45:26
Denetleyicinin kısaca teknik özelliklerinden bahsedecek olursak:
128Kbyte Flash Hafıza
4Kbyte SRAM
1Kbyte Eeprom
53 I/O Portu
16 Kanal 12bit A/D çevirici
7CCP/3ECCP Modül
2 SPI,2 I2C ve 2 adet UART
6 x 8bit / 5 x 16 bit Timer
mTouch
RTCC

Şimdi sıra geldi RTCC donanımını tanımaya:

Teknik Özellikleri:
Zaman : Saat, Dakika, Saniye
Tarih: Haftanın Günü, Gün, Ay, Yıl
Ayarlanabilir Alarm
Yıl Aralığı: 2000 ~ 2099
BCD formatında çıktı
Düşük güç için optimize
Otomatik kalibrasyon
Ayda 2.64 saniye hata
Alarm pulse yada yarım saniye çıkış verebilme ( pin )

(http://1.bp.blogspot.com/-_87zncJ9sW4/Uh3RR9P77uI/AAAAAAAAAKw/MXN6p7t2D7A/s640/rtc+blok+.jpg)

Programı CCS C'de yazdım başlangıç ayarlarını yaptıktan sonra program kolaylıkla yazılmakta. Harici RTC entegrelerle uğraşmak istemeyenler için birebir.

CCS C başlangıç ayarları: ( Ayarlamaların sadece RTC ile ilgili olan kısımlarını açıklayacağım diğer ayarlamaları size bırakıyorum. )


(http://2.bp.blogspot.com/-xdJULTCi-aE/Uh3cGuFUvzI/AAAAAAAAALI/gC0ZNVnXAgQ/s640/ayar1.png)

(http://1.bp.blogspot.com/-9yvC2mp_edc/Uh3dLaW4T-I/AAAAAAAAALU/GqnK2svJdUk/s640/ayar2.png)

Programı kısmı:

#include <ssat.h>
   //RTCC
   rtc_time_t wizardTempTime; // Bu değişkeni ccs kendisi otomatik olarak oluşturuyor.
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <4x20.c>    // 4*20 lcd için kütüphane dosyası


void main()
{
   setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4);
   setup_adc(ADC_CLOCK_DIV_32|ADC_TAD_MUL_2);
   //RTCC
   setup_rtc(RTC_ENABLE , 0);   
   wizardTempTime.tm_year = 13;   // Yıl ayarı
   wizardTempTime.tm_mon = 8;   
   wizardTempTime.tm_mday = 28;
   wizardTempTime.tm_wday = 3;
   wizardTempTime.tm_hour = 14;
   wizardTempTime.tm_min = 8;
   wizardTempTime.tm_sec = 0;
   rtc_write(&wizardTempTime);

   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   setup_timer_4(T4_DISABLED,0,1);
   setup_timer_5(T5_DISABLED | T5_DIV_BY_1);
   setup_timer_6(T6_DISABLED,0,1);
   setup_timer_7(T7_DISABLED | T7_DIV_BY_1);
   setup_timer_8(T8_DISABLED,0,1);
   setup_timer_10(T10_DISABLED,0,1);
   setup_timer_12(T12_DISABLED,0,1);

   setup_comparator(NC_NC_NC_NC);

   LCD_init();

   while(TRUE)
   {
      char gun[10];
   
      rtc_read(&wizardTempTime);  // RTC okuma satırı
     
       printf("%02u/%02u/%02u  %u   %02u:%02u:%02u",wizardTempTime.tm_mday,wizardTempTime.tm_mon,wizardTempTime.tm_year,wizardTempTime.tm_wday,wizardTempTime.tm_hour,wizardTempTime.tm_min,wizardTempTime.tm_sec);
       printf("\r\n");   
       
        //UART'ı örnek olması için kullandım.
       
       switch(wizardTempTime.tm_wday)   // Datasheet'de haftanın günleri için bir tablo var yazının sonunda paylaşacağım.
       {
         case 0:gun="Pazar";break;
         case 1:gun="Pazartesi";break;
         case 2:gun="Sali";break;
         case 3:gun="Carsamba";break;
         case 4:gun="Persembe";break;
         case 5:gun="Cuma";break;
         case 6:gun="Cumartesi";break;
       }
       
       lcd_gotoxy(1,1);
       printf(lcd_putc,"%02u",wizardTempTime.tm_mday);
       lcd_putc("/");
       printf(lcd_putc,"%02u",wizardTempTime.tm_mon);
       lcd_putc("/");
       printf(lcd_putc,"%02u",wizardTempTime.tm_year);
       printf(lcd_putc,"  ");
       lcd_puts(gun);
       LCD_gotoxy(6,3);
       printf(lcd_putc,"%02u",wizardTempTime.tm_hour);
       lcd_putc(":");
       printf(lcd_putc,"%02u",wizardTempTime.tm_min);
       lcd_putc(":");
       printf(lcd_putc,"%02u",wizardTempTime.tm_sec);
   }

}


Haftanın günleri için sayısal karşılıklarının olduğu tablo.

(http://2.bp.blogspot.com/-7JtjIzKrUQQ/Uh3e6C37KVI/AAAAAAAAALg/DqKSwhC9Lnc/s400/hafta.png)

Devremiz ve çalışması:

(http://1.bp.blogspot.com/-stIgYsRy4KA/Uh3fXBwZR2I/AAAAAAAAALo/bCVkPLO2K24/s640/devre.png)

Proje Dosyaları: ( Proteus version 7.10 SP0, CCS C v 4.130)

http://www.4shared.com/rar/1sL1XfcJ/Dahili_RTC4x20LcdRs232.html (http://www.4shared.com/rar/1sL1XfcJ/Dahili_RTC4x20LcdRs232.html)
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: vedo35 - 28 Ağustos 2013, 16:19:16
Cok guzel uygulama & paylasim. Tesekkurler.
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: PROTECH_ - 29 Ağustos 2013, 00:20:52
87k22 nin timerlarını kullanmayı denedinmi hiç  ;)
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: matador - 29 Ağustos 2013, 00:23:44
Denemedim hocam. Neden sordunuz?
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: Gökhan BEKEN - 29 Ağustos 2013, 01:14:53
Güzel çalışma, Türkiyede bulunması ve bahsettiğiniz özellikleri barındırması bakımından 18f87k22 de güzel bir tercih olabilir. Fiyatı 13 liraydı 14.58 olmuş.
http://www.dorukanstore.com/PIC18F87K22-IPT-RoHS,PR-17040.html (http://www.dorukanstore.com/PIC18F87K22-IPT-RoHS,PR-17040.html)
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: matador - 29 Ağustos 2013, 14:17:36
87k22'nin pin sayısı fazla olduğu için seçtim bunu. Pin sayısı dışında donanım özellikleri aynı neredeyse. Doların yükselmesi ilk elektroniği vuruyor :)
Başlık: Ynt: PIC18F67K22 Dahili RTC Kullanımı
Gönderen: istinaf duvarı - 19 Şubat 2024, 13:13:25
Alıntı yapılan: matador - 29 Ağustos 2013, 14:17:3687k22'nin pin sayısı fazla olduğu için seçtim bunu. Pin sayısı dışında donanım özellikleri aynı neredeyse. Doların yükselmesi ilk elektroniği vuruyor :)
Merhaba. Hala duruyorsa kaynak kodları tekrar paylaşabilir misiniz?