2.4" TFT ekran ile Atmega164 kullanımı

Başlatan hakansefau, 26 Kasım 2012, 09:46:45

hakansefau

Arkadaslar 2.4" tft ekranda birşeyler göstermek istiyorum amacım ekranın nasıl sürüldüğünü çözmek.

Daha önce pic ile uğraştım doğru düzgün atmegada derleme dahi yapamıyorum. Sizlerden birşeyler kapıp birleştirip öğrenmeye çalışıyorum.

Benim yardım istediğim konu acaba daha önce bu konu ile uğraşan oldu mu ? yada kolayca bir iki örnek verebilecek tecrübesi olan biri var mı ?

Ekran olarak http://imall.iteadstudio.com/im120419004.html

Bu linkteki ekranı kullanıyorum (ITDB02-2.4E) bununda download kısmındaki örnekleri de inceledim fakat pek bir faydası olmadı.

Şimdiden teşekkürler

muratdu

"...atmegada derleme dahi yapamıyorum..." kısmı için berik.net e bakabilirsin.

bocek

linkte demo kodları verilmiş ancak bunlar arduino kodları. arduino ise genellikle atmega 8 (veya 168 veya 328 ...) kullanan ve kendi özel kütüphanesi bulunan, c++ ile programlama yapılan bir platformdur. arduino kodlarını atmel studio (avr-gcc) ile derleyemezsin.
burda verilen örnek kodları kullanabilmen için ya avr-gcc'ye uyarlayıp atmel studio'da atmega164 için derleyeceksin, ya da bir arduino kiti edinip direkt kullanacaksın.
bir seçenek daha var; o da google'layıp elindeki ekranın sürücüsü olan S6D1121 çipi için avr-gcc kodlarını bulmak.
1 ya da 0. işte 'bit'ün mesele..

hakansefau

çok doğru bende aynı bu şekilde uğraşıyordum. Oradaki kodlar arduino için bana 164p için lazım. Baktım internette var birşeyler fakat gene zayıf kaldım. Winavr üzerinden birşeyler yapayım diyorum, sonra AVRstudio4 var bende onunla uğraşıyorum orada da derleme yaparken mesaj tarafında böyle bir hata veriyor.

gcc plug-in: No AVR Toolchain installation found. The AVR GCC plug-in can still be used if you set up your own build tools.


Custom Options bölümünden toolchain kısımında değişiklik yapıp WinAVR yi seçmem gerekiyor ama herhangi değişiklik yapamıyorum.

bocek

Alıntı yapılan: hakansefau - 26 Kasım 2012, 14:07:43
Custom Options bölümünden toolchain kısımında değişiklik yapıp WinAVR yi seçmem gerekiyor ama herhangi değişiklik yapamıyorum.
sorunuzu detaylı bir şekilde baştan yazsanız sonuca daha çabuk ulaşırsınız. "Herhangi bir değişiklik yapamıyorum" derken neyi kasdettiniz?

Custom Options'da "Use AVR Toolchain" kutucuğunu işaretlemeniz lazım. Burayı mı işaretleyemiyorsunuz?
Size tavsiyem atmel studio 6.0'ı kurun uğraşmayın.
http://www.atmel.com/tools/atmelstudio.aspx
1 ya da 0. işte 'bit'ün mesele..

hakansefau

#5
Öncelikle ilginiz için çok teşekkür ederim.

Şuan hala çalışmanın üzerinde uğraştığımdan bir seviyeye geldim. avr studio 5 kullanıyorum bu şekilde build edip derleme falan hex dosyasını oluşturdum. (bu arada 20 000 000) oscilator olacağını

#define F_CPU 20000000
şeklinde yaptım.

diğer bir konu arkadaşlar sorunum şu http://imall.iteadstudio.com/im120419004.html
Linkteki ekranı kullanarak ekranda birşeyler göstermek istiyorum. Yani bunu yapacak bir örnek kod olsa üzerinde geliştirmeler yapacağım. Mesela bu örnek kodda sırasıyla ana renkleri ekranda gösterebilir gibi.

Sorunum ekranı sürememek kısacası.

Bağlantımı bu şekilde yaptım. Bağlantıda falan bir hata yok zaten yazılımsal problemim olduğundan eminim.




mesaj birleştirme:: 26 Kasım 2012, 17:35:05

bağlantı şematik resmim çıkmamış sanırım tekrar göndereyim.

[IMG]http://img268.imageshack.us/img268/6286/54190991.png[/img]

Uploaded with ImageShack.us



Kusura bakmayın

bocek

#6
şurada
http://www.ebay.com/itm/2-4-2-4-inch-TFT-LCD-Module-Display-Touch-Panel-S6D1121-51-AVR-STM32-/180986665287
sizin ekranın aynısından var ve
sayfanın alt tarafındaki şu linkte de 51 serisi mcular için örnek kodlar verilmiş.
www.divshare.com/download/19703562-880

bu kodlardan da yararlanabilirsiniz. yazılım kısmında pin ayarlarını yaptıktan sonra örneğin:
#define CONTROLPORT PORTB
#define RS PB0
#define WR PB1
#define CS PB2
...
gibi tanımladıktan sonra örnekteki CS=1 gibi satırları değiştireceksiniz.
çünkü avr'de direkt pinlere atama yapılmaz. onun yerine bit kaydırma işlemleri kullanılır.
örneğin:
CS=1; için
CONTROLPORT |= _BV(CS);

CS=0 için de
CONTROLPORT &= ~_BV(CS);
kullanılır.
51 için verilen örnekte ilgili satırları yukarıda verdiğim örneğe değiştirirseniz avr'ye uyarlamış olursunuz. kolay gelsin.
Bu arada 20 MHz biraz yüksek bir hız değil mi? gerek var mı bu kadar hıza? avr'de, pic'teki gibi 4 cycle'da 1 işlem yapılmaz biliyorsunuz. 1 cycle/1 işlem
1 ya da 0. işte 'bit'ün mesele..

hakansefau

#7
ayen öyle main.h a zaten
#ifndef MAIN_H
#define MAIN_H

#define F_CPU 20000000
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdlib.h>
#include "ili9325_driver.h"
#include "ADS7843.h"

#define DDR_LCD_LOW_BYTE	DDRC
#define DDR_LCD_HIGH_BYTE	DDRA

#define DDR_LCD_CTRL1	DDRB	
#define	SD_CS			0
#define LCD_RESET		1
#define TOUCH_PENIRQ	2
#define LCD_BACKLIGHT	3
#define LCD_CS			4
#define MOSI			5
#define MISO			6
#define SCK				7

#define	DDR_LCD_CTRL2	DDRD
#define TOUCH_BUSY		2
#define TOUCH_CS		3
#define LCD_RD			4
#define PWM				5
#define	LCD_WR			6
#define LCD_RS			7


şeklindeki tanımlamaları yaptım.

Daha sonrada init falan lcd nin fonksiyonlarını yazdım. main.c de de bu fonk ları çağırıp sanki 2x16 LCD kullanır gibi lcd yi hazırlama falan basta yazdığımız kodları yazıyorum.

Yalnız işte ekrana farklı renklerde yada effect anlamında ya bilinçli bir şekilde herhangi hareket yaptıramıyorum :D

Kasti olarak yaptırdığım tek şey ekranda gördüğüm reset butonuna bastığımda ekrana reset olduğunu fark edebiliyorum o kadar :D

mesaj birleştirme:: 26 Kasım 2012, 22:30:31

bu arada bu resim eksikti daha hızlı çözüm bulabiliriz diye bağlantılarda bu şekilde 164p ye


[IMG]http://img6.imageshack.us/img6/5866/40010368.png[/img]

Uploaded with ImageShack.us

bocek

#8
- MOSI, MISO, SCK diye ayrıca tanımlamana gerek yok. bunlar programlama uçlarıdır ve aynı zamanda data pini olarak kullanılabilir. yani MOSI dediğin yere mesela CS ucunu bağlayabilirsin. aynı zamanda da programlama cihazının MOSI ucunu da buraya bağlarsın, herhangi bir sıkıntı olmaz.

#define DDR_LCD_LOW_BYTE DDRC
burada DDRC'nin anlamı Data Direction Register C'dir. yani portun giriş mi çıkış mı olacağının ayarlandığı register.

bunun yerine şöyle yapmalısın:
#define LCD_DATAL_PORT PORTC
#define LCD_DATAL_DDR  DDRC


data portundan okuma yaparken
LCD_DATAL_DDR  = 0xFF; // port çıkış olarak ayarlandı

yazma yaparken
LCD_DATAL_DDR  = 0x00; // port giriş olarak ayarlandı

diye ayarlamalısın.
bir de şart değil ama CS, RS, WR, RD, RST pinlerini aynı porta ayarla. mesela MOSI, MISO, SCK dediğin yerlere RD,RS,WR'yi koy.

kodlarını burda paylaşırsan daha iyi olur.

1 ya da 0. işte 'bit'ün mesele..

hakansefau

main.c de kaldığım nokta şurası

#include "main.h"


int main(void)
{
	_delay_ms(100);
	AVR_Init();
	LCD_Init();
	LCD_Fill(0xFFFF);

	clrLCD_BACKLIGHT;
	
    while(1)
    {
		// buraya ne yaptıracağımı bilemiyorum 
	}	
}
void AVR_Init()
{
	DDR_LCD_HIGH_BYTE = 0xFF;
	DDR_LCD_LOW_BYTE = 0xFF;
	
	DDR_LCD_CTRL1 |= (1<<SD_CS);
	DDR_LCD_CTRL1 |= (1<<LCD_RESET);
	DDR_LCD_CTRL1 |= (1<<LCD_BACKLIGHT);
	DDR_LCD_CTRL1 |= (1<<LCD_CS);
	DDR_LCD_CTRL1 |= (1<<MOSI);
	DDR_LCD_CTRL1 |= (1<<SCK);
	DDR_LCD_CTRL2 |= (1<<TOUCH_CS);
	DDR_LCD_CTRL2 |= (1<<LCD_RD);
	DDR_LCD_CTRL2 |= (1<<PWM);
	DDR_LCD_CTRL2 |= (1<<LCD_WR);
	DDR_LCD_CTRL2 |= (1<<LCD_RS);
	
	PORTB = 0xFF;
	PORTD = 0xFF;
	
	setLCD_CS;
	setLCD_WR;
	setLCD_RD;
	setLCD_RS;
	
}


burada sürücü olan ili9325 ve ads7843 içinde kodlar yazılıyor yani buna değil farklı örnekler de inceliyorum. Bunlara rastladım. Bendeki kodlar yalnız bu kadar.

bocek

bendeki ili9325 ekranda çalışan bir örneği yükledim (8 bit'e göre ayarlanmıştır).
ili9325.h dosyasındaki port ayarlarını kendine göre değiştir ve bir dene bakalım.
https://rapidshare.com/files/4019573488/atmega_ili9325.zip;
1 ya da 0. işte 'bit'ün mesele..