PIC24F-RTC

PIC24F – RTC Modülü Kullanımı :
PIC24F serisinin bir çok modülünün kullanımını buraya ekliyeceğim, birazda farklı sırada olabilecek yani RTC’den sonra port kullanımı veya adc vs. gibi. Program içinde modülün kullanımını bilmeyenler öğrenebilecektir.
/*
====================== Aykut ULUSAN ====================
====================== Elektronik Mühendisi ====================
====================== IZMIR ====================
====================== www.uicroarm.com ====================
Board: EX16L-A (PIC24/dsPIC33 development board)
www.expkits.com 'dan temin edebilirsiniz
Board ayarları :
SWDIP6 'da 32768 ve Xtal uçları ON diğerleri OFF
*/
#include <p24Fxxxx.h>
_CONFIG1(0x3F20) // JTAG, WDF, flash memory'ye yazma kullanılmayacak
_CONFIG2(0x7BAE) // 10mhz xtal (HS), HSPLL enable,
#define LCD_RS LATBbits.LATB8 // lcd için register select pin
//#define LCD_RS LATBbits.LATB8 // lcd için register select pin
#define LCD_E LATBbits.LATB5 // lcd enable pin
#define LCD_PORT LATB
#define LCD_TRIS TRISB
#define d 1 // lcd'ye data/karakter yazılacak
#define c 0 // lcd'ye komut yazılacak
#define D d // lcd'ye data/karakter yazılacak
#define C c // lcd'ye komut yazılacak
typedef unsigned char u8;
#define NOP() {__asm__ volatile ("nop");}
#define CLRWDT() {__asm__ volatile ("clrwdt");}
#define SLEEP() {__asm__ volatile ("pwrsav #0");}
#define IDLE() {__asm__ volatile ("pwrsav #1");}
#define LINE_1 0x80
#define LINE_2 0xC0
#define LINE_3 0x94
#define LINE_4 0xD4
/*
LCD PIC24
D4 PORTBbits.RB0
D5 PORTBbits.RB1
D6 PORTBbits.RB2
D7 PORTBbits.RB3
*/
// hex olarak yazılır
// haftanın günleri pazartesi 1, salı 2 ....... pazar 7
// 18.08.2009 , salı , 23:13:00
// yıl ay.gün hgün.saat dak_san
union zaman_uni {
volatile unsigned int time16bit[4];
volatile unsigned char time8bit[8];
} RTCregs;
//volatile unsigned int zaman[]={0x2009, 0x0717, 0x0223, 0x1300};
#define yil_sbt 0x2009
#define ay_ve_gun_sbt 0x0717
#define hgunu_ve_saat 0x0223
#define dak_ve_san_sbt 0x1300
volatile unsigned char sonuc[]={4,7,6,2,3,0};
void DLY_10US(unsigned int us);
void DLY_MS(unsigned int ms);
void LCD_ENABLE(void);
void LCD_WRITE(unsigned char da_ta, unsigned char D_C);
void LCD_SETUP(void);
void LCD_STRING(/*const*/ char *str);
void LCD_GOTO(unsigned char satir,unsigned char adres);
volatile unsigned char g;
int
main(void){
while(OSCCONbits.COSC!=3);
while(!OSCCONbits.LOCK); // PLL kitleninceye kadar bekle
AD1PCFG=0xFFFF; // portlar dijital
PMCON=0;
LATB=0;
PORTB=0; // latch'leri temizle
TRISB=0; asm("NOP"); // B portu çıkış
LCD_SETUP();
LCD_GOTO(LINE_1,0);
LCD_STRING("SAAT:");
LCD_GOTO(LINE_2,0);
LCD_STRING("TARIH:");
RTCregs.time16bit[0]=yil_sbt; // zamanı yükle
RTCregs.time16bit[1]=ay_ve_gun_sbt;
RTCregs.time16bit[2]=hgunu_ve_saat;
RTCregs.time16bit[3]=dak_ve_san_sbt;
__builtin_write_OSCCONL(0x02); // RTC osc enable
// RTCWREN 'e yazma unlock
asm("MOV #0x55,W0"); // flash'a yazmak için unlock yapılmalı
asm("MOV W0,NVMKEY"); // flash key'i yükle
asm("MOV #0xAA,W1");
asm("MOV W1,NVMKEY"); //
RCFGCALbits.RTCWREN=1; // RTC'ye yazma enbale
RCFGCALbits.RTCEN=0; // RTC disable
PADCFG1bits.RTSECSEL=1; // saniye çıkışı
RCFGCALbits.RTCOE=1; // RB15 üzerinde saniye pulsi alacağız
RCFGCALbits.RTCPTR = 3; // yıldan itibaren zamanı yükle
for(g=0;g<4;g++) // zamanı yükle
RTCVAL=RTCregs.time16bit[g];
RCFGCALbits.CAL=0; // kalibrasyon yapılmayacak
RCFGCALbits.RTCEN=1; // rtc enable
RCFGCALbits.RTCWREN=0; // RTC yazmayı kilitle
while(1) {
while(RCFGCALbits.RTCSYNC); // RTCSYNC=1 iken bekle
RCFGCALbits.RTCPTR=3;
for(g=0;g<4;g++)
RTCregs.time16bit[g]=RTCVAL;
LCD_GOTO(LINE_1,5);
for(g=0;g<3;g++) {
LCD_WRITE((RTCregs.time8bit[sonuc[g]]>>4)+0x30,d);
LCD_WRITE((RTCregs.time8bit[sonuc[g]]&0xF)+0x30,d);
if(g!=2) LCD_STRING(":");
}
LCD_GOTO(LINE_2,6);
for(g=3;g<6;g++) {
LCD_WRITE((RTCregs.time8bit[sonuc[g]]>>4)+0x30,d);
LCD_WRITE((RTCregs.time8bit[sonuc[g]]&0xF)+0x30,d);
if(g!=5) LCD_STRING(".");
}
DLY_MS(250);
}
}
// X*10US
void
DLY_10US(unsigned int us){
while(us--) {
__asm__ volatile ("repeat #165");
__asm__ volatile ("nop");
}
}
// 65536ms'ye kadar
void
DLY_MS(unsigned int ms){
while(ms--){
DLY_10US(100);
}
}
void
LCD_ENABLE(void){
LCD_E=1;asm("nop");asm("nop");asm("nop");asm("nop");LCD_E=0;
}
void
LCD_WRITE(unsigned char da_ta, unsigned char D_C){
if(D_C) LCD_RS=1; // data modu
else LCD_RS=0; // komut modu
LCD_PORT&=0x3F0;
LCD_PORT|=da_ta>>4; // lcd'ye gönder, RS ve E bozulmamalı
LCD_ENABLE(); // enable
LCD_PORT&=0x3F0;
LCD_PORT|=da_ta&0x0F; // lcd'ye gönder
LCD_ENABLE(); // enable
DLY_10US(50); // 50us delay
LCD_RS=0;
}
void
LCD_SETUP(void){
DLY_MS(100); // lcd'nin kendini hazırlaması için 100ms
LCD_PORT=0x3;
LCD_ENABLE();
DLY_MS(10);
LCD_ENABLE();
DLY_MS(10);
LCD_ENABLE();
DLY_MS(10);
LCD_PORT=0x2;
LCD_ENABLE();
DLY_MS(10);
LCD_WRITE(0x28,c); // disp on, cursor off
LCD_WRITE(0x0c,c); //
LCD_WRITE(0x06,c); //
LCD_WRITE(0x01,c); // clear display
LCD_WRITE(0x02,c); //
DLY_MS(2);
}
void
LCD_STRING(char *str){
while(*str)
LCD_WRITE(*str++,d);
}
void
LCD_GOTO(unsigned char satir,unsigned char adres){
LCD_WRITE(satir+adres,c);
}



20/02/2010 12:15
Sağolun hocam yine güzel bir çalışmaya imza atmışssınız 16/32 bit dentleyici konusunda güzel uygulamalarınız mevcut uzun süredir sitede bir hareket göremeyince bıraktınız sandım. Neyseki tekrar başladınız. Bu arada kullandığınız pic24,dspic v.s dentleyicileri İstanbul civarında elden alışveriş ile temin edebilieceğimiz bir yer varmı bildiğiniz
21/02/2010 12:08
Merhaba Erhan,
İnternetten online’da dsPIC alabilirsin. Karaköyde araştırırsan kolaylıkla bulursun.Aşağıdaki adreste dsPIC var.
http://www.direnc.net/main/products.asp?cat_ID=288
21/02/2010 13:07
Sağolun hocam o siteyi biliyorum o siteninin satış politakası biraz yanlış siede 3-4 çeşit dspic vardı. Almak için gittim fakat ellerinde sadece bir çeşit dspic kalmış onunda fiyatı iki katına yükselmiş bu durum hakkında posta attım ürün bulunmuyo v.s gibi cevaplar verdiler O gün bu gündür hala tek pic var ellerinde olmadı karköyde araştıracağım sağolun tekrardan
6/04/2010 16:53
Don’t have a lot of money to buy a building? You not have to worry, because it is possible to receive the business loans to solve all the problems. Hence take a small business loan to buy all you need.