LPC2148 RTC ile Saat

Başlatan pegassus, 03 Ekim 2010, 18:24:25

pegassus

Merhabalar,

LPC 2148'in dahili RTC'sini kullanarak saat yapmaya çalışıyorum. Amacım tarih ve saati lcd'de göstermek. Daha sonra belki öğrenmek amaçlı alarm fonksiyonunu dahil ederim.  Dahili clock ile 32.768 khz'i elde ediyorum. Programı keil'de yazıyorum.

İlk olarak sadece SEC register'ındaki değeri 4 bit veri yolu kullanarak lcd ye yazdırmaya çalıştım. Ancak C'ye de yeni başladığımdan dolayı elimde fonksiyonel bir LCD kütüphanesi yok. Ayrıca herhangi bir registardaki değeri decimal olarak ekrana basmak için nasıl bir fonksiyon,kod kullanacağımı veya çevrim yapacağımı da bilemiyorum. Demek istediğim örneğin saniye değeri 40 ise ekrana 4 ve 0 olarak basmak.

Bu konuda ki örnek uygulama veya örnek kütüphaler işime çok yaracak. Bazı örnekler buldum ancak sizinde önerilerinizi ve çözüm yollarınızı görmek isterim.

Saygılar..

MC_Skywalker


pegassus

Evet döküman faydalı ancak veriler seri haberleşmeyle bilgisayara gönderilmiş. LCD'ye basılan bir uygulama tam aradığım şey. Teşekkürler.

sdonmez

Merhaba,

Aşağıdaki adresten LPC2104 için, diğer arkadaşlarında yardımı ile hazırladığım çalışmanın tüm dosyalarına ulaşabilirsiniz.

http://www.2shared.com/file/bTitMgLP/RTC_with_4x20_LCD.html

Şadan


pegassus

Alıntı yapılan: FxDev - 03 Ekim 2010, 20:14:55
Burada da bir şeyler bulman mümkün..
Evet buradaki bilgiler kısmen yardımcı oldu. Teşekkür ederim.

Peki burada kullandığın lcd.h kütüphanesini ve kullanılan diğer kütüphaneleri verebilir misin?

X-Fi

Fxdevin sitesinde olacaktı dosyalar standart lcd kütüpanelerini arm ye uyarlamak pekde zor değil portları 32  bit e göre düzenlerseniz diğer kodlar ancii c olduktan sonra direk çalışacaktır.

kolay gelsin.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

pegassus

FXDev'in sitesinde lcd ile ilgili kütüphane kısmı yok. Sadece ana programın kodları var.
sdonmez 'in verdiği linkteki dosyaları indirdim. Pin ayarlarını kendi uygulamamdaki uygun pin ayarlarına getirdim ancak çalıştıramadım. Elimdeki LCD piyasadaki standart 2x16 LCD'lerden. Bu konuda tercrübesi olan varmı? Ya da farklı kütüphaneye sahip olan?

X-Fi

sdonmez hocamınkinden pek farklı sayılmaz ama birde bunları deneyin arm için yazdığım kütüpane çalışmamasında başka bir sorun vardır mantık birbiriyle aynı sonuçda kendi kütüpanenizi yazmanız daha doğru olacaktır sanırım.

#include <LPC213X.H>
#include "lcd.h"


 unsigned char i,s,adres=64;
 unsigned char karakter_[8][8]=
{
{ 0,14,16,16,17,14, 4, 0},//ç
{14, 0,15,17,15, 1,14, 0},//ğ
{ 0, 0,12, 4, 4, 4,14, 0},//i
{10, 0,14,17,17,17,14, 0},//ö
{ 0,15,16,14, 1,30, 4, 0},//ş
{10, 0,17,17,17,17,14, 0},//ü
{ 0, 0, 0, 0, 0, 0, 0, 0},//boş
{ 0, 0, 0, 0, 0, 0, 0, 0} //boş
};

/***********************************************************************************/
void Bekle(int t)
{	
 	while(t--);
}
/***********************************************************************************/
void komut_yolla(unsigned char db)
{

   LCD = (db & 0xF0) | E;
   LCD = db & 0xF0;
   Bekle(100);
   LCD = (db << 4) | E;
   LCD = db << 4;
}
/***********************************************************************************/
void lcd_clear()
{
	komut_yolla(0x01);
	Bekle(1000);

}
/***********************************************************************************/
void lcd_init()
{

	komut_yolla(0x33);
    komut_yolla(0x32);
    komut_yolla(0x28);
    komut_yolla(0x0C);



for(i=0;i<=7;i++){  // tr karakter tanıtılıyor
	komut_yolla(adres);
	for(s=0;s<=7;s++){
		veri_yolla(karakter_[i][s]);
					 }				  
		adres=adres+8;	 
				 }
     lcd_clear();
}
/***********************************************************************************/
void lcd_yaz(unsigned char db [])
{
	for (; *db!='\0';db++)
      veri_yolla(*db);
}
/***********************************************************************************/
void lcd_gotoxy(unsigned char x, unsigned char y)
{
	if(x==1)
		komut_yolla(0x80+((y-1)%16));
	else
		komut_yolla(0xC0+((y-1)%16));
}
/***********************************************************************************/
void veri_yolla(unsigned char byte)
{
switch (byte) {

case 'Ç' : byte=0x00; break;
case 'Ğ' : byte=0x01; break;
case 'İ' : byte=0x02; break;
case 'Ö' : byte=0x03; break;
case 'Ş' : byte=0x04; break;
case 'Ü' : byte=0x05; break;
case 'ç' : byte=0x00; break;
case 'ğ' : byte=0x01; break;
case 'ı' : byte=0x02; break;
case 'ö' : byte=0x03; break;
case 'ş' : byte=0x04; break;
case 'ü' : byte=0x05; break;
default : break;
}

   LCD = (byte & 0xF0) | E | RS;
   LCD = (byte & 0xF0) | RS;
     Bekle(100);
   LCD = (byte << 4) | E | RS;
   LCD = (byte << 4) | RS;
 
}
/***********************************************************************************/


#include <LPC213X.H>

#define RS 0x01
#define E  0x02
#define LCD IOPIN0

extern void komut_yolla(unsigned char db);
extern void lcd_clear(void);
extern void lcd_yaz(unsigned char db []);
extern void ldc_init(void);
extern void lcd_gotoxy(unsigned char x, unsigned char y);
extern void veri_yolla(unsigned char byte);


http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

pegassus

Mikroelektronika'nın EasyArm geliştirme kitiyle çalışıyorum. Bu sebeple herhangi bir şekilde fiziksel bir sorun olduğunu düşünmüyorum. Kit ile birlikte gelen örnek LCD programıyla programlıyorum ve bu şekilde çalışıyor. Ancak birlikte gelen lcd kütüphanesi bana biraz eksik gelmişti, o sebeple yeni ve fonksiyonel bir kütüphane denemek istemiştim. Ancak eğer yeni bir kütüphane çalıştıramazsam daha sonra tekrar denemek üzere yeni kütüphane denemelerimi bırakacağım. Aslında verilen kodlar açık ve çalışmaması da anlamsız.
Yardım eden üyelere teşekkür ederim.

Saygılar...