Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: axanc - 14 Haziran 2004, 16:42:39

Başlık: 18f452 ve LCD komedisi?
Gönderen: axanc - 14 Haziran 2004, 16:42:39
CCS ile basit bir lcd programı yazıyorum ama nedendir bilmiyorum, LCD'nin ikinci karakteri (ekranı temizleme komutu kullanmaz isem birinci karakteri) simulasyonda cıkmıyor...
böyle bir sorunla karşılaşan oldu mu hiç? proteus'u (6.2 sp5) tekrar yükledim, elimdeki CCS'i (ccs 3.190) tekrar yükledim, sorun çözülmedi, pic18 kütüphanesini de yeniledim...  :?:

#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#endif

#include <lcd.c>


void main() {

  lcd_init();
  lcd_putc("\fmerhaba");

}
Başlık: 18f452 ve LCD komedisi?
Gönderen: ise - 14 Haziran 2004, 17:08:22
rw ayağı bağlı değilse mesgul gecikmesi tam olmadığından zaman yetmediği için ilk harfi almıyordur ama sonraki harfleri yazar
Başlık: 18f452 ve LCD komedisi?
Gönderen: ahmetu - 14 Haziran 2004, 17:14:56
adamlar kodu 4 mhz için dizayn etmişler aşağıdaki fonksiyonları değiştirirsen sorunun biter, bu fonksiyonlar 20 mhz'de bile çalışıyor.


void lcd_send_nibble(BYTE n) {
     lcd.data = n;
     delay_us(150);
     lcd.enable = 1;
     delay_us(5);
     lcd.enable = 0;
}

void lcd_send_byte(BYTE address, BYTE n) {
     lcd.rs = 0;
     delay_us(200);
     lcd.rs = address;
     delay_us(150);
     lcd.enable = 0;
     lcd_send_nibble(n >> 4);
     lcd_send_nibble(n & 0xf);
}

void lcd_init() {
   BYTE i;
   set_tris_lcd(LCD_WRITE);
   lcd.rs = 0;
   delay_cycles(1);
   lcd.enable = 0;
   delay_ms(15);
   for(i=1;i<=3;++i)
     {
      lcd_send_nibble(3);
      delay_ms(5);
     }
   lcd_send_nibble(2);
   for(i=0;i<=3;++i)
      lcd_send_byte(0,LCD_INIT_STRING[i]);
}


Başlık: 18f452 ve LCD komedisi?
Gönderen: axanc - 14 Haziran 2004, 17:27:02
tamamdır ahmetu, teşekkürler...

yanlız "lcd_init" fonksiyonunu değiştirince sorun oluştu, lcd'de yazı hiç çımadı; o yüzden sadece bu değişiklikleri yaptım...
void lcd_send_nibble(BYTE n) {
     lcd.data = n;
     delay_us(150);
     lcd.enable = 1;
     delay_us(5);
     lcd.enable = 0;
}

void lcd_send_byte(BYTE address, BYTE n) {
     lcd.rs = 0;
     delay_us(200);
     lcd.rs = address;
     delay_us(150);
     lcd.enable = 0;
     lcd_send_nibble(n >> 4);
     lcd_send_nibble(n & 0xf);
}


kullanacak arkadaşlara duyrulur...
Başlık: 18f452 ve LCD komedisi?
Gönderen: ahmetu - 14 Haziran 2004, 21:09:29
hıms onun sebebide orjinal library rw bacağını kullanıyordu ben lcd'i okuma gereği duymadığım için bu bacağı gnd ile birleştirdim dolayısıyla koddan çıkarmışım (bayadır karakter lcd kullanmadım uyarmayı unutmuşum kusura bakma) bir bit bir bittir :lol:  kolay gelsin.
Başlık: 18f452 ve LCD komedisi?
Gönderen: axanc - 14 Haziran 2004, 21:25:28
walla iyi yapmışsın, biz de biras gelişince GraphicLCD'e geçeriz artık.. :)
Başlık: 18f452 ve LCD komedisi?
Gönderen: aydin - 16 Temmuz 2004, 11:06:38
arkadaslar ccs c ile yaptigim bir uygulamada 4x20 lcd kullaniyorum. Bunu proteusta simule etmeye calistigimda sadece 1. satir gorunuyor diger satirlar gorunmuyor. Standart lcd surucu kutuphaneyi kullaniyorum. bu acaba koddaki bir eksikliktenmi yoksa proteustaki bir problemdenmidir. tesekkırler.proteus 6.2 sp5
Başlık: 18f452 ve LCD komedisi?
Gönderen: axanc - 14 Ağustos 2004, 16:18:39
"include" ettiğin dosyaların içinde birinci, ikinci, üçüncü ve dördüncü satırın felan nerede başlayıp bittiğinin yazılı olduğu bir yer olması gerekli.. işte bu verilerin proteus'taki 4 satırlık lcd'nin özellikleri bölümünde yazan bilgilerle uyuşması gerekir... bu şekilde proteus'takini değiştirirsen olur gibime geliyor.. ama gerçek değerlerin, yani almış olacağın lcd'nin değerleri ile aynı olmalıdır, onu da o lcd'nin "data sheet"inden öğrenebilirsin... biraz karışık oldu umarım anlatabilmişimdir...
Başlık: 18f452 ve LCD komedisi?
Gönderen: rr - 30 Ağustos 2004, 23:46:01
CCS den 2 gun Uğraştım 16f84 den A harfi bile alamadım. Gerçi c de bilmiyorum. Denedeim Örnek aşağıda nerede hata yapıyorum. Lcd 16 karekter kullanıyorum. Proteus sim.kullanıyorum. Lcd Port B ye bağlı
B7 D7, B6 D6,  B5 D5,  B4 D4,     B2 Rw,  B1 Rs, B0 REn

C Codları Aşağıda.
#include "E:\Belgelerim\Projeler\LcRF_Metre\CcS Calism\LCd16f84.h"
#include <LCD.C>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 

void main()
{

  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  lcd_init();
  lcd_putc("\merhaba");


}
Similasyonda hiç Yazı Çıkmıyor.
Başlık: Define ekleme...
Gönderen: DumrulBey - 31 Ağustos 2004, 07:43:40
Merhaba,

Başlarda bir yerde veya #include <LCD.C> satırından önce LCD'nin PORTB'de olduğunu derleyiciye haber vermen gerekir. Bunun için ise #define use_portb_lcd TRUE satırını dediğim yere koymalısın. Eğer 18F ailesi ile benzetim (simulation) yapacaksan bu sefer #fuses HS,WDT128,NOPROTECT,NOLVP satırını yerleştir. Burada önemli olan WDT'nin açılmış olması. Ben de denedim bu olmayınca hiç çalışmıyor. Ama dediklerimi yaparsan muhtemelen sorunları aşacaksın. Son söz: C güzeldir!

Başarılar...
Başlık: 18f452 ve LCD komedisi?
Gönderen: rr - 02 Eylül 2004, 23:22:49
Söylediklerini aynen yaptım. isis 6-2-5 de çalışmadı yeni sürümünde çalıştı.isis 6-5-sp5 de çalıştı lcd yazı geldi. Denemem pic628 üzerinde Değişkeni glabal olarak tanımladığımda yine lcd yazı kayboldu.

//#include "E:\Belgelerim\Projeler\LcRF_Metre\CcS Calism\Lcd16f628.h"
#include <16F628A.h>
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)
#fuses NOWDT,HS, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
#define use_portb_lcd TRUE
#include <LCD.C>
#include <Math.H>
#include <stdlib.h>
#int_RTCC

static int32 ff; //Bunu Yazdığım anda LCD hİÇBİRŞEY GELMİYOR.???

RTCC_isr()
{
ff=ff+1;

}

#int_TIMER1
TIMER1_isr()
{

}



void main()
{

  int32 xx;
  float a,b,c;
  //int8 x,y,z;

  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
  lcd_init();
  enable_interrupts(INT_RTCC);
  enable_interrupts(INT_TIMER1);
  enable_interrupts(GLOBAL);

  ff=111;
 //dg = MAKE8(ms,1); //Digit al
  //a=2344;
  //b=232;
  //c=a/b;
  //printf(lcd_putc,"%f",c); //%lu işaretsiz sayı için %ld işaretli sayı için Çalisti

  xx=343;
  printf(lcd_putc,"%lu",ff); //%lu işaretsiz sayı için %ld işaretli sayı için




}
Başlık: LCD Sorunları!!!
Gönderen: DumrulBey - 03 Eylül 2004, 01:05:46
Hmm...

Vallahi ben C'de mikrodenetleyiciler için program yazmaya yeni başladım. Benden daha çok tecrübeli arkadaşlar var. Belki bu duruma net bir cevap verebilirler. Ben veremiyorum çünkü benim için her şey şu an teorik. Henüz C'de bir program yazıp LCD'de denemedim bile.

Yahu nedir bu CCS'de LCD sorunları? Acaba gerçek deneylerde de aynı sonucumu elde ediyoruz? Yoksa bu ISIS'den kaynaklanan bir sorun mu? Belki kendi LCD kütüphanemizi yazmalıyız. Ben hala 7 bitlik orijinal kütüphaneyi kullanıyorum. Bakalım uygulamalarda ne olacak!

Sevgiler, saygılar...
Başlık: 18f452 ve LCD komedisi?
Gönderen: arif - 03 Eylül 2004, 10:42:47
Merhaba
Kodu denedim bu şekilde çalışıyor. Bir iki hata vardı incelersin.
Kolay gelsin.

#include <16F628a.h>
#use delay(clock=20000000)
#fuses xt, NOPUT,NOWDT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)

#include <LCD.C>
#include <Math.H>
#include <stdlib.h>


int32 ff; //Bunu Yazdığım anda LCD hİÇBİRŞEY GELMİYOR.???


#int_RTCC
RTCC_isr()
{
 
  ff=ff+1;
}

#int_TIMER1
TIMER1_isr()
{

}



void main()
{
  int32 xx;
  float a,b,c;
  //int8 x,y,z;

  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);
  lcd_init();
  enable_interrupts(INT_RTCC);
  enable_interrupts(INT_TIMER1);
  enable_interrupts(GLOBAL);

  ff=111;
  //dg = MAKE8(ms,1); //Digit al
  //a=2344;
  //b=232;
  //c=a/b;
  //printf(lcd_putc,"%f",c); //%lu işaretsiz sayı için %ld işaretli sayı için Çalisti

  xx=343;
  while(1)
  {
     
     

     printf(lcd_putc,"\fTest%lu",ff); //%lu işaretsiz sayı için %ld işaretli sayı için
     delay_ms(500);
  }


}
Başlık: Re: LCD Sorunları!!!
Gönderen: DumrulBey - 04 Eylül 2004, 01:53:09
Alıntı yapılan: "DumrulBey"Yahu nedir bu CCS'de LCD sorunları? Acaba gerçek deneylerde de aynı sonucumu elde ediyoruz? Yoksa bu ISIS'den kaynaklanan bir sorun mu? Belki kendi LCD kütüphanemizi yazmalıyız. Ben hala 7 bitlik orijinal kütüphaneyi kullanıyorum. Bakalım uygulamalarda ne olacak!
Dün, boş bir vaktimde, hiç üşenmedim, dahili osilator ile 16F628 kullanarak paralel LCD çalıştırmayı denedim. Sonuç ekranda kareler haricinde hiç bir şeydi...:)

Bir soketi, 4 bitlik (RB4-RB7) veri yolu denk gelecek şekilde LCD modüle lehimledim. Beşli dizi kablo ile diğer (E, RS, RW, VDD ve GND) bağlantıları da yaptım. PortB'nin boşta kalan 4. ucuna ise bir LED bağladım.

Önce LED'i bir saniye aralıklarla yanıp söndürdüm. Sonra LCD tanıtımı ve ekran basit bir yazı göndermeyi denedim. Ne LED yanıp sönüyordu ne de LCD'de bir hareket vardı.

VCC'yi üzerinde 561 (560 ohm) yazan bir SMD direnç ile GND'ye verdim. Nokta tonu gayet iyidi. Aynı bağlantının ISIS'de benzetimini (simulation) yapmayı ihmal etmedim. Sonuç mu? Aynıydı!

Acaba CCS PIC C'yi bırakmalı mıyım? Yoksa bir yerde hata yapıyor olabilir miyim?

Dip Not: Sadık yardımcımız saatli köpeğimizi (WDT: Watch Dog Timer) kurmayı denedim ama sonuç aynıydı! Halbuki 18F ailesinde işe yarıyordu.

Sevgiler, saygılar...
Başlık: 18f452 ve LCD komedisi?
Gönderen: arif - 04 Eylül 2004, 09:54:37
Merhabalar,
DumrulBey Hocam
Yazdığınız programı gönderebilirmisiniz? Hangi versiyonu kullanıyorsunuz onuda yazın lütfen...
Kolay gelsin
Başlık: Kod
Gönderen: DumrulBey - 04 Eylül 2004, 10:40:03
Merhaba,

Kod aşağıda bugün 16F877 ve 18F ailesi ile deneyeceğim. Bakalım ne olacak...:)

// CCS PIC C Compiler 3.207
#include <16F628.h>
#use delay(clock=4000000)
#fuses NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, LVP, NOCPD
#define use_portb_lcd TRUE
#include <LCD.C>

void main()
{
  lcd_init();
  while (1) {
    output_high (PIN_B3);  
    printf(lcd_putc, "\fMerhaba CCS...\n");
    delay_ms(500);
    output_low (PIN_B3);  
    printf(lcd_putc, "Bye Bye CCS...\n");
    delay_ms(500);
  }
}


Teşekkürler...
Başlık: 18f452 ve LCD komedisi?
Gönderen: arif - 04 Eylül 2004, 12:08:40
Merahaba
16F628 icin fuse leri seçerken NOLVP secmen lazım.
LVP sectiğinde RB4 pinin I/O olarak kullanamazsın. Tabi lcd de çalışmaz. Datasheet leri biraz daha ayrıntılı incelemek lazım sanırım hepimiz zaman zaman butip şeyleri unutuyoruz.
Programı denedim çalışıyor.
Kolay gelsin...

#include <16F628.h>
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,noMCLR,noLVP,NOCPD
#define use_portb_lcd TRUE
#include <LCD.C>


void main()
{
  lcd_init();
 
  while(1)
  {
     output_high (PIN_B3);    
     printf(lcd_putc,"\fMerhaba CCS...\n");
     delay_ms(500);
     output_low (PIN_B3);    
     printf(lcd_putc,"Bye Bye CCS...\n");
     delay_ms(500);
  }
}
Başlık: Wizard
Gönderen: DumrulBey - 05 Eylül 2004, 17:50:29
Ha evet, çok sağ ol. Dikkatimden kaçmış işte...:)

Bu arada wizard olayını denedim çok hoşuma gitti. Kullanmak istediklerinizi işaretliyorsunuz, o dikkatinizden kaçabilecek şeyler buhar oluyor. Galiba CCS'ye henüz bye bye demek için çok erken...

Sevgiler, saygılar...