Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

LCD sorunsalı

Başlatan ankakusu, 14 Haziran 2007, 11:09:58

ankakusu

Merhaba,
Ben LCD'de bir karakter bastırmaya çalışıyordum ama neden olduğunu anlamadığım bir hata çıktı.

PIC16F877 kullanıyorum. lcd.c diye bir kaynak kodu var ccs'in examples klasöründe şöyle ki:

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;

#byte lcd = 0x06                        // This puts the entire structure
                                     // on to port B (at address 6)

#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40    // LCD RAM address for the second line


byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                             // These bytes need to be sent to the LCD
                             // to start it up.


                             // The following are used for setting
                             // the I/O port direction register.

STRUCT lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
STRUCT lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in

byte lcd_read_byte() {
      byte low,high;

      set_tris_b(LCD_READ);
      lcd.rw = 1;
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_b(LCD_WRITE);
      return( (high<<4) | low);
}


void lcd_send_nibble( byte n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}


void lcd_send_byte( byte address, byte n ) {

      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      lcd.rw = 0;
      delay_cycles(1); 
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}


void lcd_init() {
    byte i;

    set_tris_b(LCD_WRITE);
    lcd.rs = 0;
    lcd.rw = 0;
    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]);
}


void lcd_gotoxy( byte x, byte y) {
   byte address;

   if(y!=1)
     address=lcd_line_two;
   else
     address=0;
   address+=x-1;
   lcd_send_byte(0,0x80|address);
}

void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_send_byte(0,1);
                   delay_ms(2);
                                           break;
     case '\n'   : lcd_gotoxy(1,2);        break;
     case '\b'   : lcd_send_byte(0,0x10);  break;
     default     : lcd_send_byte(1,c);     break;
   }
}

char lcd_getc( byte x, byte y) {
   char value;

    lcd_gotoxy(x,y);
    lcd.rs=1;
    value = lcd_read_byte();
    lcd.rs=0;
    return(value);
}


benim lcd'de bastırmak için kullandığım kod da aşağıdaki gibi:

#include "16f877.h"
#include "lcd.c"

#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP,NOWRT
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7 ,parity=n,bits=8,errors)



void main ()
{
    SET_TRIS_B (0b00000000);  //00001100 rs and enable bits are //configured as output

    lcd_init();
    while(1)
     {
    display("\fy");
    delay_ms(2000);
    
     }


böyle bir kodu compile ettiğim zaman şöyle bir hata veriyor:

undefined identifier
lcd.c line 78


ve lcd'nin 78. satırı da  şu oluyor

delay_us(1);

teknikadam

lcd.c dosyasını
#use delay(clock=8000000)
satırından sonra koduna include et sorun buyuk ıhtımalle cozulecektır.

MURSEL

#include<16f877.h>
#use delay(clock=4000000)
#include<lcd.c>             // unutma LCD 16f877 nin pord d sine baglıyacaksın eger degişiklik varsa örn port b ye baglıyacaksın#define use_portb_lcd TRUE  yazıcaksın bi alt satıra

main();
{
int x;
x=5;
lcd_init();
while(1)
{                     //lcd ne yazıcak      ( picprojeye hoş geldin=5)
printf(lcd_putc,"picproje hoş geldin=%03u",x); // burdaki lcd tanımlaması x in degişken olarak tanımlamasını saglar  yani sürekli degişebilen bi deger olabilir ama 8 bitlik int türünden
delay_ms(20);
}
}

biraz daha ugraş tekrar sorun olursa söyle bakalım benimde  birkaç problemim oluyordu bu şekilde yazarsan olur sanırım


bir örnek daha bundada lcd nin satır sutunlarını kullanma ile ilgili örnek umarım zor gelmeez
#include<16f628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include<lcd.c>
char x=16,y=45;
int micro();
main()
{
lcd_init();
while(1)
{
x--;                       //sola dogru kaydırmak için x bilirsin yatay düzlemdeki degeri kardeş
lcd_gotoxy(x,1);
lcd_putc("\WWW.Microcell.tr.cx \n");// wep adresim yok artık :lol:
delay_ms(200);
if(x==-20)   // yaklaşık yazım 20 karakter old için -20 oldugunda yazımın saga döbmesi için koşul
{
x=16;
micro();
}
}
}
int micro()
{
while(1)
{
y++;
lcd_gotoxy(y,1);
lcd_putc("\ WWW.Microcell.tr.cx \n");
delay_ms(200);
if(y==80)     //
{
y=45;
return;
}
}
}
*******************************************
bi örnek daha öncelikle  ne yaptıgını söleyim ra1 deki butona basınca sayı artıp lcd gözüküyor
ra2 butonunda basınca azalıyor ve lcd gözüküyor
#include<16f628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include<lcd420.c>
int x,m,n,k;
main()
{
lcd_init();
while(1)
{
while(input(pin_a1))   // butona basıldımı
{
++x;                // evet sayıyı bir artır
delay_ms(45);
}
while(input(pin_a2))  //butona basıldımı
{
--x;                            //evet sayıyı azalt
delay_ms(45);
}

delay_us(1);

lcd_gotoxy(1,1);     // kordinatlara
printf(lcd_putc,"1..MENU=%03u",x);  // x degişkenin degerini yaz  mesala sende sayıcı yapmaya calış lcd ile  ;)

}
}
elimdeki giriş yazılımları bunlar kardeş umarım yardımcı olabilmişimdir selametle (a.e.o)

ankakusu

Alıntı Yap
unutma LCD 16f877 nin pord d sine baglıyacaksın eger degişiklik varsa örn port b ye baglıyacaksın#define use_portb_lcd TRUE yazıcaksın bi alt satıra  

bunun nereden biliyoruz? çünkü lcd.c 'de
#byte lcd 0x06


diye bir terim var. İşte bu terim lcd'nin portB'de tanımlandığını göstermez mi?

o adres sadece B portuna mı tahsis edilmiştir?

port b yada port d  olduğunu nasıl anlayabiliriz?

Alıntı Yap
ben verdiğin kodlarda "display" diye bir fonksiyon göremiyorum.

evet bir başka lcd.c kodunu da deniyordum da o yüzden öyle kalmış...

ankakusu

STRUCT lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
STRUCT lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in


bunlar ne anlama geliyor, böyle bir bilen var mı?

daha önce de lcd_pin_map diye bir şey tanımlamışız.

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;

#byte lcd = 0x06                        // This puts the entire structure
                                     // on to port B (at address 6)


ama sonradan neden ,aşağıda yeniden yazdığım gibi ,yine struct'lar oluşturduk anlamadım?

STRUCT lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
STRUCT lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in

teknikadam

bir yerde yapını oluşturuyorsun diger yerde ise yeni bir yapı değişkeni oluşturup bu değişkenin elemanlarına degerler atıyosun. yapılar c de önemli bir konudur. burada yazılan bir iki tavsiyenin otesinde bir kaynak bulup c de yapı (struct) konusuna çalışmanı oneririm.

MURSEL

birinci soruna cevab  ccs nin driver dosyasından lcd.c dosyasını ac
// As defined in the following structure the pin connection is as follows:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7


böyle bilgi mevcut eger lcd.c dosyasını programa dahil ettiysek pinleri belirttigi gibi baglamamız gerekiyor  eger port b ye baglıyacaksak lcd diriver dosyasının içinde
// Un-comment the following define to use port B
// #define use_portb_lcd TRUE
bu sekilde komudu  dahil etmemiz isteniyor

lcd olarakta protesusta 2*16 olan LM016L kullan senin komutların sanki farklı bir lcd için sanırım anlayamadım açıkcası
eger benim kullandıgım gibi lcd kullanıcaksan
komutlar belli
lcd_init();  lcd hazırlamak için
lcd_gotoxy(x,y); ilk başlangıç kordinatlarını belirlersin yazmak için
lcd_puc(  mod) ne tür yazı yazdıracaksan modlara göre (degişken mi karekter mi spreet  ondalık lımı v.b ) yaz komududur

ankakusu

ama benimkinde B portunun kullanıldığı yazıyor. yukarıdaki lcd.c ' nin başındaki yazıları size veriyorum:

////////////////////////////////////////////////////////////////////////////
////                             LCD.C                                  ////
////                 Driver for common LCD modules                      ////
////                                                                    ////
////  lcd_init()   Must be called before any other function.            ////
////                                                                    ////
////  lcd_putc(c)  Will display c on the next position of the LCD.      ////
////                     The following have special meaning:            ////
////                      \f  Clear display                             ////
////                      \n  Go to start of second line                ////
////                      \b  Move back one position                    ////
////                                                                    ////
////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)     ////
////                                                                    ////
////  lcd_getc(x,y)   Returns character at position x,y on LCD          ////
////                                                                    ////
////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

// As defined in the following structure the pin connection is as follows:
//     B0  enable
//     B1  rs
//     B2  rw
//     B4  D4
//     B5  D5
//     B6  D6
//     B7  D7
//
//   LCD pins D0-D3 are not used and PIC B3 is not used.

Merak ediyorum bir LCD nasıl çalışır? Çünkü burada çok basit bir kod denedim ve bunu uygulamaya çalıştım:

Şu benim lcd.h  aynen yukardaki kod. Bi  de alltaki kodu biraz modifiye ederek koydum. bir bilginiz var mı neden çalışmadığı hakkında?

Şöyle ki:

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP,NOWRT
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7 ,parity=n,bits=8,errors)
#use FAST_IO(B)
#use FAST_IO(C)

#include "lcd.c"

#byte portb = 0x06
#byte portc = 0x07

#bit pc_0 = portc.0


void main ()
{

    PORTB = 0;
    PORTC = 0;
    SET_TRIS_B(0x00);
    SET_TRIS_C(0x00);
    PORT_B_PULLUPS(FALSE);
    DISABLE_INTERRUPTS(GLOBAL);
    SETUP_COUNTERS(RTCC_INTERNAL,WDT_18MS);
    SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_1);
    SETUP_TIMER_2(1,1,1);//T2_DISABLED,T2_DISABLED,T2_DISABLED);
    SETUP_ADC_PORTS(NO_ANALOGS);
    SETUP_ADC(ADC_OFF);
    SETUP_PSP(PSP_DISABLED);
    SETUP_SPI(SPI_SS_DISABLED);
    SETUP_CCP1(CCP_OFF);
    SETUP_CCP2(CCP_OFF);

    lcd_init();
    lcd_putc('y');
    while(1);


}


buraki asıl kod

lcd_init();
lcd_putc('y');
while(1);

diğerleri lcd çalışmadığı için konulmuş bazı şeyler...

harware de şu şekilde bağlandım:

LCD pin1 - toprak
LCD pin2 - 5V
LCD pin3 - 330ohm - 10K koyulmuş kontrastı ayarlamak için
LCD pin4 - rs pini (16F877'nin portB sinin 1. pini -- 34. bacak)
LCD pin5 - toprak
LCD pin6 - enable (16F877'nin portB'sinin 0. pini -- 33. bacak)
LCD pin7 - (data0)toprak
LCD pin8 - (data1)toprak
LCD pin9 - (data2)toprak
LCD pin10 -(data3)toprak
LCD pin11 -(data4)(16F877'nin  portB'sinin 4. pini -- 37. bacak)
LCD pin12 -(data5)(16F877'nin portB'sinin 5. pini -- 38. bacak)
LCD pin13 -(data6)(16F877'nin portB'sinin 6. pini --39. bacak)
LCD pin14 -(data7)(16F877'nin portB'sinin 7.pini --40. bacak)

ama halen çalışmıyor sorun nedir:?: bilen varsa yardım etsiin    :!:

controller

lcd nin 5. pinini yani R/W yi toprağa vermişsin ama lcd.c dosyasında incelersen lcd ye veri gönderirken lcd nin meşgul olup olmadığını (BUSY) kontrol ediyor. R/W ucunu pic e bağlamaslısın veya kontrol istemiyorsan lcd.c den kontrol kısmını iptal etmelisin.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

ankakusu

ama ben LCD'nin rw pinini b portunun hangi bitine bağlayacağımı nasıl bileceğim?

M_B

Pic C ile 2x16 Lcd Ekran (2*16 lcd)

Ekranlar, günlük yaşantımızda hayatımızı kolaylaştırmaya yarayan en güzel örneklerdendir.Kullanım alanları sınırsızdır, örneğin; hız, nem, sıcaklık, basınç v.b.  gibi değerleri ekranlar aracılığı ile rahatlıkla görebiliriz veya okuyabiliriz. Bu yazıda pic c ile 2*16 lcd ekran kullanmayı öğreneceğiz.Pic c dilini kullanmak bize bir takım avantajlar ve en önemlisi büyük kolaylık sağlıyor.Pic c'yi yeni öğreniyorsanız, daha önceden c programlama diline ait bir takım bilgilere sahipseniz hiç zorluk çekmeyeceğinizden eminim.Sayfalarca yazacağınız asm kodlarını, pic c'de çok daha az sayıda sayfa ile kod yazarak büyük yükten kurtulabilirsiniz.Tabi ki asm bilmek önemlidir. Bence sadece asm bilen bir elektronikçi asm'nin hamallığını çeker, asm ve pic c bilen elektronikçi basit bir şekilde büyük işleri halledebileceği gibi takıldığı yerde asm ile de müdahele edebilir, sadece pic c bilen bir elektronikçi ise işlerini yapar fakat takıldığı yerlerde arka plana müdahele edemeyebilir.Bu da asm'nin avantajıdır.Biraz pic c hakkında ön bilgi verdikten sonra artık lcd ekranı sürmeye geçelim.

Önemli not: Burdaki bilgiler CCS PCWH 4.018 derleyicisi kullanılarak hazırlanmıştır.
Aşağıda lcd ekran için kullanabileceğimiz fonksiyonlar ve açıklamaları.

lcd_init();
Lcd ekranımızı, gerekli uçlarına gerekli bilgiler göndererek hazır hale getirir.
lcd_putc(char a);
Lcd ekrana yazı yazmamızı sağlayan fonksiyondur.Sadece karakter tipi bilgi gönderir.Program akışından herhangi bir değişkeni gönderemeyiz.Bunun için printf(); fonksiyonunu kullanacağız.
Örnek0:Ekrana "sinan 1234 5" yazalım.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
#include <LCD.C>
void main()
{
  lcd_init(); //lcd ekranımızı kuruyoruz
  delay_ms(6);
  lcd_gotoxy(1,1);
  lcd_putc("sinan 1234 5");//Ekrana sinan 1234 5 yazar.
  bas:
  goto bas;
}
n f b ifadeleri
n : satır atlar.
Örnek1: Alt alta "Mekatronik" ve "Merkezi" yazalım.
lcd_putc("Mekatronik n Merkezi");
f : Ekranı Temizler


Örnek2: Alt alta "Mekatronik" ve "Merkezi" yazalım.Bir saniye sonra ekranı temizleyelim.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz.
#include <LCD.C>// lcd fonksiyonlarının bulunduğu dosyayı çağırıyoruz.
void main()
{
  lcd_init(); //lcd ekranı kurar.
  delay_ms(6);
  lcd_putc("Mekatronik n Merkezi");
  delay_ms(1000);
  lcd_putc("f");
  bas:
  goto bas;
}
b : Mevcut pozisyonu bir karakter geri alır.
Örnek3: Ekrana önce "Mekatronik" yazalım.İki saniye sonra "MekatroniMerkezi" yazalım.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
#include <LCD.C>
void main()
{
  lcd_init(); //lcd ekranımızı kuruyoruz
  delay_ms(6);
  lcd_putc("Mekatronik");
  delay_ms(2000);
  lcd_putc("b");
  lcd_putc("Merkezi");
  bas:
  goto bas;
}
printf();
Bu fonksiyonun c dilinde genel işleyişi
‘printf("karakterler – format belirteçleri – özel işaretler",değişkenler);' şeklindedir.
Format belirteçleri:
%c: karekter
%d: işaretli ondalıklı (decimal) değer
%f: floating point (desimal notasyon - dahil edilmeli)
%e: floating point (exponential or scientific notasyon)
%u: işaretsiz ondalıklı (decimal) değer
%x: işaretsiz onaltılık değer (küçük harf)
%X: işaretsiz onaltılık değer (büyük harf)
%s: dizi
Printf() fonksiyonu bizim kullanacağımız lcd_putc() fonksiyonuna yönlendirilebilir.



Örnek4: Ekrana alt alta "Degiskenimiz:" ve "15" yazalım.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
#include <LCD.C>
int tamsayi=15; // tamsayi adında tamsayı tipinde bir değişken tanımlıyoruz ve değerini 15 olarak başlangıçta veriyoruz.
void main()
{
  lcd_init(); //lcd ekranımızı kuruyoruz
  delay_ms(6);
  printf(lcd_putc,"Degiskenimiz:n%d",tamsayi); //Ekrana "Degiskenimiz:" yazar ve alt satıra giderek sonuc değişkenini yazar.
  bas:
  goto bas;
}
lcd_gotoxy(byte x,byte y);
Lcd ekranının y.satırının x.sütununa gider.
Örnek4: Ekranın 1.satırının 7. sütunundan başlayarak "mekatronik" yazalım.Mekatronik 10 harfli bir kelimedir.Bu yüzden ekranımız 16 sütunlu olduğu için sondaki "k" harfi 16. sütunda kalacaktır.Örneğin; "Mekatronikci" yazacak olursak sondaki "ci" harfleri gözükmeyecektir.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz.
#include <LCD.C>// lcd fonksiyonlarının bulunduğu dosyayı çağırıyoruz.
void main()
{
  lcd_init(); //lcd ekranı kurar.
  delay_ms(6);
  lcd_gotoxy(7,1); //ekranın 1.satırının 7. sütununa gider.
  lcd_putc("Mekatronik"); //ekrana "Mekatronik" yazar.
  bas:
  goto bas;
}
Örnek5: Ekrana alt alta "Mekatronik" ve "Merkezi" yazalım.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz.
#include<LCD.C>// lcd fonksiyonlarının bulunduğu dosyayı çağırıyoruz.
void main()
{
  lcd_init(); //lcd ekranı kurar.
  delay_ms(6);
  lcd_gotoxy(1,1); //ekranın 1.satırının 1. sütununa gider.
  lcd_putc("Mekatronik"); //ekrana "Mekatronik" yazar.
  lcd_gotoxy(1,2); //ekranın 2.satırının 1. sütununa gider.
  lcd_putc("Merkezi"); //ekrana "Merkezi" yazar.
  bas:
  goto bas;
}
lcd_getc(byte x,byte y);
Ekranda belirtilen x ve y pozisyonundan değer alınır.
Örnek6: Ekrana önce "sinan:" yazdıralım.Sonra ekranın 1.satırının 2.sütununda hangi karakter olduğunu 2.satırda görelim.
#if defined(__PCM__)
#include <16F628.h>
#use delay(clock=4000000)
#define use_portb_lcd TRUE //lcd bilgisi için port b'yi kullanıyoruz
#include<LCD.C>
char sonuc;
void main()
{
  lcd_init(); //lcd ekranımızı kuruyoruz
  printf(lcd_putc,"fsinan:"); //Ekranı temizle ve sinan yazar.
  delay_ms(1000); //1 saniye bekler.
  sonuc=lcd_getc(1,1); //Ekranın 1.satırının 2.sütunundaki karakteri sonuc değişkenine atar.
  printf(lcd_putc,"n%c",sonuc);//satır atlayarak sonuc değişkenini 2.satıra yazar.
  bas:
  goto bas;
}


Not: Makele alıntıdır.
Umarım ısıne yarar.
Kolay gelsın
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

ankakusu

tamam yahu anladım. saçma bir soru sormuşum. portb'nin 2. pini orada yazıyor zaten...  :lol:

ankakusu

MErhaba,

neden global interruptlar enable edildikten sonra LCD çalışmaz bir bilgisi olan var mı?

Çünkü ben seri iletişim yapmaya çalışıyorum ve bu seri iletişimden aldığı veriyi de lcd'de bastırmak istiyorum ama global_interrupts(enable) komutu yazıldıktan sonra lcd'de hiç bir yazı basılmıyor.

Neden olduğu hakkında bir bilgisi olan var mı?

erdinch

Alıntı yapılan: "ankakusu"MErhaba,

neden global interruptlar enable edildikten sonra LCD çalışmaz bir bilgisi olan var mı?

Çünkü ben seri iletişim yapmaya çalışıyorum ve bu seri iletişimden aldığı veriyi de lcd'de bastırmak istiyorum ama global_interrupts(enable) komutu yazıldıktan sonra lcd'de hiç bir yazı basılmıyor.

Neden olduğu hakkında bir bilgisi olan var mı?


3.30 versiyonunda bu sorunla karşılaşılmıyor fakat hem kesme hem lcd hem de eeproma yazma işlemi gerçekleştirilemiyor.

4.032  versiyonunda ise dahili eeprom yazma/okuma işlemi gerçekleştiriliyor fakat kesmeler aktif olduğu zamanda lcd kullanılamıyor.derleyici 216 nolu hatayı veriyor.

ben de bir türlü çıkamamıştım işin içinden.umarım bu problemi daha önce yaşamış ve çözmüş arkadaşlarımız vardır.

iyi çalışmalar..