Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

STM32 LCD DENEMEM

Başlatan NaMcHo, 17 Nisan 2011, 18:20:28

NaMcHo

https://www.picproje.org/index.php/topic,32983.0.html  Burada bahsettiğim sorunu LCD yi beslemek icin bagladıgım güç kaynağımın ve stm32kitimin topraklarını birleştirerek çözdüm.

main.c
#include <stm32f10x.h>
#include "LCD.h"

void rcc_init(void);
void delay(unsigned long gecikme);

int main(void)
{
	rcc_init();

	GPIOA->ODR=0;
	GPIOC->CRL &= 0x00000000;
	GPIOC->CRL = 0x00000003;
	GPIOC->CRH &= 0x00000000;				//PORTC 8,9 bits are Output mode 
	GPIOC->CRH = 0x00000033;
	GPIOA->CRL &= 0x00000000;
	GPIOA->CRL = 0x33333333;
	GPIOC->ODR = 0x00000001;
	delay(0x00004FFF);
	lcd_hazirla();
//	lcd_temizle();
	imlec(1,3);
	lcd_karakter('P');
	lcd_karakter('A');
	lcd_karakter('U');

	imlec(2,1); 
	lcd_yaz("NAZIM YILDIZ");
	delay(0x00FFFFFF);
	for(;;)
	{
		GPIOC->ODR |= 0x00000300;
		delay(0x000Fffff);
		GPIOC->BRR = 0x00000300;
		delay(0x000Fffff);
	}
}
void rcc_init(void)
{
	RCC->CR |= 0x00030000;					//HSEON=1
	while(!(RCC->CR & 0x00020000));	  		//Wait to HSE be stabilized
	RCC->CIR |= 0x00080000;					//HSERDYC: HSE ready interrupt cleared
	RCC->CR |= 0x00080000; 					//Clock security system Enabled.
	RCC->CIR |= 0x00800000;					//CSSC: Clock security system interrupt cleared.
	RCC->CR |= 0x00040000;					//HSE bypassed.

//	RCC->APB2RSTR |= 0x000000FC;		   	//PORT A,B,C,D,E Resetlendi.
	RCC->CFGR |= 0x00000005; 				//SW[1:0]=01: HSE selected as system clock  
											//SWS[3:2]=01: HSE oscillator used as system clock
	RCC->CFGR |= 0x00000080;				//AHB configuration -> 1000: SYSCLK divided by 2
	RCC->CFGR |= 0x00002000; 				//APB2 configuration -> 100: HCLK divided by 2
	RCC->APB2ENR |= 0x00000014;	 			// PORT C,A Clock Enabled.
//	RCC->APB2ENR |= (u32)0x7D;

}

void delay(unsigned long gecikme)
{
	while(gecikme--);
}


LCD.c
#include <stm32f10x.h>
#include "LCD.h"

void lcd_hazirla(void)
{
	lcd_komut(0x00000002);
	lcd_komut(0x00000028);
	lcd_komut(0x00000006);
	lcd_komut(0x00000008);
	lcd_komut(0x0000000C);
	lcd_komut(0x00000001);
	gecikme(0x0000ffff);					//3ms gecikme.	
}
void lcd_yaz(const unsigned char string[])
{
	unsigned char x=0;
	while(string[x]!='\0')
	{
		gecikme(0x0000ffff);
		lcd_karakter(string[x]);
		x++;
	} 
}
void imlec(unsigned char satir,unsigned char sutun)
{
	if(satir==1)
	{
		lcd_komut(0x00000080 +(sutun-1));
	}
	else
	{
		lcd_komut(0x000000C0 + (sutun-1));
	}
}
void lcd_karakter(unsigned char veri)
{
	GPIOA->ODR=0x00000003;						//RS,E = High
	gecikme(0x00000FFF);
	GPIOA->ODR |= (veri & 0x000000F0);					//Yuksek degerlikli 4 bit gonderiliyor.
	gecikme(0x00000500);
	GPIOA->BRR=0x00000002;						//E = Low
	gecikme(0x0000ffff);
	GPIOA->BRR=0x000000F0;
	gecikme(0x00000FFF);

	GPIOA->ODR |= 0x00000002;						//E = High
	gecikme(0x00000FFF);
	GPIOA->ODR |= ((veri & 0x0000000F)<<4); 				//Dusuk degerlikli 4 bit gönderiliyor.
	gecikme(0x00000500);
	GPIOA->BRR=0x00000002;						//E = Low
	gecikme(0x0000ffff);
	GPIOA->BRR=0x000000F0;
}
void lcd_komut(unsigned char komut)
{
	GPIOA->BRR = 0x00000001;
	GPIOA->ODR = 0x00000002;						//RS = 0, E=1	Yani komut gönderilecek lcdye.
	gecikme(0x00000FFF);
	GPIOA->ODR |= (komut & 0x000000F0);
	gecikme(0x00000500);
	GPIOA->BRR=0x00000002;						//E=0
	gecikme(0x0000ffff);
	GPIOA->BRR=0x000000F0;
	gecikme(0x00000FFF);
	
	GPIOA->ODR=0x00000002;						//E=1
	gecikme(0x00000FFF);
	GPIOA->ODR |= ((komut & 0x0000000F)<<4);
	gecikme(0x00000500);
	GPIOA->BRR=0x00000002;						//E=0
	gecikme(0x0000ffff);
	GPIOA->BRR=0x000000F0;						
}
void lcd_temizle(void)
{
	lcd_komut(0x00000001);
	gecikme(0x0000ffff);
}

void gecikme(unsigned long x)
{

	while(x--);
}


LCD.h
/*------ACIKLAMA-------
--RS=GPIOA.bit0
--RW=At the stm32's ground.
--E=GPIOA.bit1
--D4,D5,D6,D7 = GPIOA.bit4,5,6,7
*/

extern void lcd_hazirla(void);
extern void lcd_yaz(const unsigned char string[]);
extern void imlec(unsigned char satir,unsigned char sutun);
extern void lcd_karakter(unsigned char veri);
extern void lcd_komut(unsigned char komut);
extern void lcd_temizle(void);
extern void gecikme(unsigned long gecikme);

Buda Video : http://hotfile.com/dl/114791226/1badc8b/Video0015.3gp.html

X-Fi

Temel elektorniği öğrenmeden mikroişlemcilerde çok zayıf kalırsınız hocam kite de arıza verebilirsiniz bu konu üzerine gidin sonra elektroniği kodlarla birleştirin bu tür hatalara sebebiyet vermemiş olursunuz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

NaMcHo

Temel elektronikten kastınız nedir?
V=IR? Ic=B*Ib? Moslar icin saturasyondaysa eger ID=(1/2)*Mn*cox*(w/l)*((VGS-Vt)^2)*(1+&*VDS) burdaki & lamnda olarak kullandım  veya en sade haliyle
ID=IDSS*(1-(VGS/Vt))   E-MOS icin ID=K*(VGS-Vt)^2  gibi bilgilerimi kastettiniz?


X-Fi

Alıntı yapılan: NaMcHo - 17 Nisan 2011, 19:47:54
Temel elektronikten kastınız nedir?
V=IR? Ic=B*Ib? Moslar icin saturasyondaysa eger ID=(1/2)*Mn*cox*(w/l)*((VGS-Vt)^2)*(1+&*VDS) burdaki & lamnda olarak kullandım  veya en sade haliyle
ID=IDSS*(1-(VGS/Vt))   E-MOS icin ID=K*(VGS-Vt)^2  gibi bilgilerimi kastettiniz?

Elektrik akımının eksiden artıya doğru aktığını kastetmiştim bu temel bilgi sizi kurtarabilirdi ama tecrübe oldu iyide olmuş böyle bir cevap yazmanız bu tür tecrübelere daha çok ihtiyacınız olduğu anlamına geliyor.

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

NaMcHo

#4
Bazı şeyleri yazmadan önce bence biraz düşün çok anlık hareket etmişsin, ne gerek var böle yorumlar yapmana anlamış değilim.
Ayrıca akım (+) (-) doğru aktığı kabul edilmiş,eğer istersen (-) (+) doğru akıyomuş gibide düşünülebilirsin.


İyi akşamlar.