CCS C ile LCD.c yi eklemeden direk lcd sürmek

Başlatan tekniker_murat, 30 Aralık 2008, 13:52:20

tekniker_murat

Arkadaşlar selamun aleyküm ben ccs c yi okulda bir müddet gördükten sonra hoşuma gitmediği gerekçesi ile bırakıp proton basic ve pic basic ile ilgilenmeye başlamış onları güzel projeler yapacak kadar çözebilmiştim ama artık ismini verdiğim diğer programlarda pek kesmez oldu ve bu ccs c ye başladım biraz uygulamalar yaptım falan ama lcd konusunda takıldım örneğin proton basicde lcd yi editöre
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.1
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
şeklinde tanıtıp 500ms bekleme yaptıktan sonra Print at 1,1,"tekniker_murat" şeklinde yazı yazmaya başlıyabiliyorduk oysa ccsc de lcd driverini eklemek gerekiyor ama bu driverde 16f877a entegresinde sadece sanırım D portunda lcd yi çalıştırıyor formu inceledim baktım arkadaşlar o driverleri değiştirip çeşitli şekillerde yapmış portları değiştirebilmişler ama benim sormak istediğim soru şu
1:Ccs c de de
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.1
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
gibi komutlar ile editöre lcd yi tanımlayıp gerekli beklemeyi yaptıktan sonra direk yazı yazmayı sağlayabilirmiyiz ve bunun için gerekli komutlar nelerdir nasıl yazılır
2:Bu programı daha önceden yaptıysanız bir veya birkaç örnek gönderebilirmisiniz ben bu işi nasıl yapmalıyım örneğin benim lcd ekranım pic e devremde
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
şeklinde bağlı ve bu ekranımı ccs c ile editöre yazacak şeklikde programlamak istiyorum ama driver dosyalarında vs yerlerde değişiklik yapmadan ve direk olarak editörde tanımlayıp yazmam mümkünmü ?

Bu konu hakkında arkadaşlar acil yardımınız ve örnek dosyalarınıza açıklamaları ile birlikte ihtiyacım var
[email]murat.yagci.1984@gmail.com[/email]

cemilkendir

#define LCD_ENABLE_PIN PIN_B3
#define LCD_RS_PIN PIN_B2
#define LCD_RW_PIN PIN_B1
#define LCD_DATA_PORT 06//data için kullanacağın portun adresini yazacaksın
#define LCD_TYPE 2
#include <lcd.c>

ipek

@cemilkendir

#include <lcd.c>
lcd.c'yi cağırdın çağırmadan oluyormu arkadaşın sorusu.

tekniker_murat

Sn ustam ipek :D ben denedim o komutlar makina tarafından derleniyor ama daha gerçek olarak denemedim nasip olursa deneyince burya sonuçları yazarım ama bence olacak gibi
Sn cemilkendir ustama teşekkür ediyorum...
[email]murat.yagci.1984@gmail.com[/email]

cemilkendir

Alıntı yapılan: "ipek"@cemilkendir

#include <lcd.c>
lcd.c'yi cağırdın çağırmadan oluyormu arkadaşın sorusu.

#include <lcd.c> cağırmadan nasıl yapılacak ki pic kendi kendine mi üretecek kodu

asadam

LCD nin hazırlanması için öncelikle belli hex komutların gönderilmesi gerekir. Daha önce kullandığınız dillerin asm çıktısını inclerseniz sizin tek satırlık kodunuza karşı onlarca satır kod ürettiğini görürsünüz. lcd.c yi çağırmadan bütün hex komutları kendi programınız içinde göndermeniz gerekir ki pek zahmetli bir iş :)

CCS kütüphanesindeki lcd.c dosyasını açıp baktığınızda hazır fonksiyonlarda (örneğin lcd_putc) sizin yerinize ön işlemleri yaptığını görürsünüz.

Tavsiyem önce pic assembly öğrenmeniz ve sonrasında ANSI-C ile devam ettikten sonra CCS ile çalışmalarınızı sürüdürmeniz.

tekniker_murat

Sn asadam tavsiyeniz için teşekkür ederim...Tavsiyeniz ve söylediklerinizin hepsi doğru katılıyorum hatta onaylıyorum ama soruyu bi dikkatli incelerseniz ve okursanız aslında sizin bu söylediklerinizi sormak istemediğimi sorduğum soru ile sizin cevabınızın alakası olmadığını göreceksiniz
Ama yine de ilgi ve alakanızdan ötürü sonsuz teşekkürlerimi sunuyorum...
[email]murat.yagci.1984@gmail.com[/email]

asadam

Evet bayağı bir yanlış anlaşılma olmuş kusura bakmayın.

Şimdi soruya dönersek

Alıntı Yapama bu driverde 16f877a entegresinde sadece sanırım D portunda lcd yi çalıştırıyor formu inceledim baktım arkadaşlar o driverleri değiştirip çeşitli şekillerde yapmış portları değiştirebilmişler ama benim sormak istediğim soru şu
1:Ccs c de de
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.1
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
gibi komutlar ile editöre lcd yi tanımlayıp gerekli beklemeyi yaptıktan sonra direk yazı yazmayı sağlayabilirmiyiz ve bunun için gerekli komutlar nelerdir nasıl yazılır

Öncelikle: http://picproje.org/index.php/topic,18544&highlight=

Kodları incelersek

// #define use_portb_lcd TRUE      ////     Hangi port kullanilmak isteniyorsa burada // isareti
// #define use_portc_lcd true      ////     cümlenin basindan kaldirilmali 
// #define use_portd_lcd true      ////     örn c portu icin 2. satirin basindaki // kaldirilmali


Burada define komutu ile ilgili port true ya da false durumuna ayarlanıyor. Hemen aşağısında da makro lar ile kontrol edilerek gerekli adres tanımlamaları yapılıyor.

Pin ayarları nasıl oluyor diye soracak olursanız üstteki veri yapısına bakalım.

struct lcd_pin_map {                 // This structure is overlayed
           BOOLEAN enable;           // on to an I/O port to gain
           BOOLEAN rs;               // access to the LCD pins.
           BOOLEAN rw;               // The bits are allocated from
           BOOLEAN unused;           // low order up.  ENABLE will
           int     data : 4;         // be pin B0.
        } lcd;


Emin olmamakla birlikte C de veri yapılarındaki değişkenlere 0 dan başlayarak tam sayılar atanıyordu! (Hatam varsa diğer arkadaşlar düzeltir.)

Yani buradaki BOOLEAN rs; tanımlamasında enable=0 olmakta!

Kullanılmak istenen port driver dosyasında değişiklik yapmadan da belirlenebilir. tek yapmanız gereken #define ön işlemcisini driver yerine ana programınızda vermeniz.

örneğin:

[code]
#include "lcd.c"
#define use_portc_lcd true
[code]

dediğinizde artık lcd nizi port b den kullanmaya başlayabilirsiniz.
Hatta aynı driverdaki makroları genişleterek(Gerekli port adreslerini girerek) 18F serisine bile uyarlayabilirsiniz.

Gelelim ver pinlerini driver dışında değiştirmeye. Driverdan lcd_pin_map yapısını siler ve lcd.c yi çağırmadan önce kendiniz için bir lcd_pin_map oluşturarak bunuda elbette gerçekleştirebilirsiniz. Ancak biraz zahmetli olur. Yani enable yi ikinci sıraya yazarak port b 0 yerine port b 1 in lcd de enable bacağına bağlanmasını sağlayabilirsiniz.

Gördüğünüz gibi sadece C dilinin temel taşları üzerine kurulu bi şekilde ilerledik. İşte bu nedenle sizden ricam CCS den önce ANSI-C öğrenmeniz. ANSI-C ve pic yapısını bildiğiniz taktirde CCS deki hazır driverları istediğiniz gibi kurcalayabilir hatta kendinize özgü driverlar yazabilirsiniz.

İnşallah bu seferde soruyu yanlış anlamamışımdır :)

koordinat

bence soru gereksiz olmuş çünkü diğer dillerde düşündüğün gibi düşünüyorsun galiba ve lcd.c dosyasını çağırmak garibine gidiyor galiba ama unutma ki  her lcd ye komut göndermende önce lcd.c okunuyor sonra gerekli kod derlenip senin sonucuna gidiliyor.ha ben çağırmam dersen tek çalıştırma yolun galiba lcd.c içindekileri copy paste yapman da bundan sonra artık programcımı olursun yeni bi çığır mı açmış olursun bilemem...