Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: hakansefau - 26 Kasım 2012, 09:46:45

Başlık: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: hakansefau - 26 Kasım 2012, 09:46:45
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 (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
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: muratdu - 26 Kasım 2012, 10:57:20
"...atmegada derleme dahi yapamıyorum..." kısmı için berik.net e bakabilirsin.
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: bocek - 26 Kasım 2012, 13:03:20
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.
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: hakansefau - 26 Kasım 2012, 14:07:43
ç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.
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: bocek - 26 Kasım 2012, 17:18:42
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 (http://www.atmel.com/tools/atmelstudio.aspx)
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: hakansefau - 26 Kasım 2012, 17:33:22
Ö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 (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.
(http://imageshack.us/photo/my-images/268/54190991.png/)



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] (http://imageshack.us/photo/my-images/268/54190991.png/)

Uploaded with ImageShack.us (http://imageshack.us)

(http://img268.imageshack.us/img268/6286/54190991.png)

Kusura bakmayın
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: bocek - 26 Kasım 2012, 18:27:53
şurada
http://www.ebay.com/itm/2-4-2-4-inch-TFT-LCD-Module-Display-Touch-Panel-S6D1121-51-AVR-STM32-/180986665287 (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 (http://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
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: hakansefau - 26 Kasım 2012, 22:23:14
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] (http://imageshack.us/photo/my-images/6/40010368.png/)

Uploaded with ImageShack.us (http://imageshack.us)
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: bocek - 26 Kasım 2012, 22:49:45
- 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.

Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: hakansefau - 27 Kasım 2012, 00:13:38
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.
Başlık: Ynt: 2.4" TFT ekran ile Atmega164 kullanımı
Gönderen: bocek - 27 Kasım 2012, 11:11:34
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;