MikroC Öğreniyorum / Sorular

Başlatan TA7R, 24 Nisan 2015, 00:32:24

TA7R

Merhaba ,
Uzun bir aradan sonra MikroC öğrenmek için yeniden emeklemeye başladık , malum kaynaklar sınırlı ve yüzeysel (yeni başlayanlar  açısından) her soru için bir başlık açmaktansa bu genel başlık altında darda kaldıkça ustalarımdan yardım isteyeceğim eğer uygunsa , teşekkürü baştan edeyim.
- KS108 tabanlı Glcd lerle bir şeyler yapmak istiyorum . Netten bulabildiğim komut örnekleriyle "Glcd_Set_Font" ile 8x7 büyüklüğe kadar karakterleri yazdırabildim , font creator kullanmadan yazdırabileceğim en büyük karakter 8x7 midir ?
- "Glcd_Rectangle" ile 128x64 glcd de istediğim kordinata dörtgen çizdirebiliyorum , bu dörtgenlerin içine yazı yazdırabilirmiyim? nasıl ?

Firzen

Hocam kolay gelsin madem başlık açıldı bende sorumu buraya yazayım elimde bulunan GLCDyi stm32 ile bağlayıp yazı falan yazdırmaya çalışıyorum. Fakat hiçbir tepki yok.

Başlangıçta yanlışlıkla -VEE ucunu direk negatife ekran kontrast potansiyometre ucunun birini + ya diğerini - ye vermiştim bundan dolayı falan bozulmuş olabilir mi acaba?
Kararsız...

erpay

@TA7R
Evet tanımlı olanlarda en büyük dediğiniz.
Evet yazdırabilirsin Glcd_Write_Text Glcd_Write_Text_Adv komutlarından senin için uygun olan ile dörtgenin içinde kalan koordinatlatını kullanman yeterli biraz deneme yanılma ile hemen anlaşılır.

@Firzen
Yanmış olabilir  en azından kontrast ayarlayan kısmı. Easypic gibi deneyebileceğin bir şey var mı elinde ?

Firzen

Alıntı yapılan: erpay - 24 Nisan 2015, 09:34:10
@TA7R
Evet tanımlı olanlarda en büyük dediğiniz.
Evet yazdırabilirsin Glcd_Write_Text Glcd_Write_Text_Adv komutlarından senin için uygun olan ile dörtgenin içinde kalan koordinatlatını kullanman yeterli biraz deneme yanılma ile hemen anlaşılır.

@Firzen
Yanmış olabilir  en azından kontrast ayarlayan kısmı. Easypic gibi deneyebileceğin bir şey var mı elinde ?

Kontrast potunu oynattığım zaman ekran kararıyor ama. Dediniz gibi birde okuldaki kartta deneme yapar ondan sonra size son durumu söylerim.
Kararsız...

TA7R

#4
Mikroc ve pic18f4550 kitapta  , rotary encoderdeki değeri okutup lcd ye yazdırma ile ilgili bir uygulama var . Ben bu uygulamayı GLCD de çalıştırmak istiyorum .LCD de
Sayaç: (değer) yazıyor. Ben sayac: kısmını hallediyorum ancak  GLCD kütüphanesindeki bütün yazdırma komutlarını deneiğim halde (değer)  i yazdıramadım .Orijinal kod şöyle ;

init();
     while(1)
     {
          oldEncoder = Encoder;     // yeni değer eski değere yükleniyor
          tmp = sayac;              // 2 byte'lık sayac desimale dönüştürülüyor
          WordToStr(tmp, txt);      // decimale dönüştürülün değer text'e çevriliyor
          Lcd_Out(2, 1, txt);       // sayac değeri LCD'de görüntüleniyor
          if (Encoder == oldEncoder) Encoder = RotaryEncoder & 0x03;

Lcd_Out(2, 1, txt);  yerine GLCD için hangi komutu kullanmam lazım

M_B

Hocam
Glcd_Write_Const_Text_Adv(txt, 0, 0);

denermisiniz.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

TA7R

#6
Hocam çok teşekkürler , hata veriyor .
Fakat bu komutu şöyle girdiğimde ;

Glcd_Write_Const_Text_Adv(sayac, 65, 13);

Sayac : e   yazıyor ancak royary encoder ile değişmiyor. normalde  sayac:1  ,sayac:2  ...... diye artıp eksilmesi lazımdı

erpay

@TA7R sayac'a hangi değeri atadın daha doğrusu ona bir string mi atadın  ya da bir sayı mı ?

TA7R

#8
#define RotaryEncoder portb   // Rotary Encoder ile PIC18F4550 bağlantısı

char Encoder, oldEncoder;      // global
unsigned sayac, tmp;           // değişkenler
char txt[5];                   // tanımlanıyor

// LCD module bağlantıları
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module bağlantıları

void init()
{
   ADCON1 |= 0x0F;             // AN pinleri dijital I/O yapılandırıldı
   CMCON  |= 7;                // Comparators (karşılaştırıcılar) pasif edildi
   LCD_Init();                 // LCD display yapılandırıldı
   LCD_Cmd(_LCD_CURSOR_OFF);   // imleci gizle
   RotaryEncoder = 0;          // Portun ilk durumu sıfırlanıyor.
   trisb = 0x03;               // Rotary Encoder portu giriş yapıldı
   Encoder = 0x03;             // Rotary encoder'in değerini tutan değişkene ilk değer veriliyor.
   sayac = 0;                  // sayac değeri sıfırlanıyor.
   Lcd_Out(1, 1, "Sayac:");
}

void main()
{
     init();
     while(1)
     {
          oldEncoder = Encoder;     // yeni değer eski değere yükleniyor
          tmp = sayac;              // 2 byte'lık sayac desimale dönüştürülüyor
          WordToStr(tmp, txt);      // decimale dönüştürülün değer text'e çevriliyor
          Lcd_Out(2, 1, txt);       // sayac değeri LCD'de görüntüleniyor
          if (Encoder == oldEncoder) Encoder = RotaryEncoder & 0x03;
          if (oldEncoder.F1 != Encoder.F0)
          {
              if (oldEncoder.F0 == Encoder.F1) if (sayac < 9999) sayac++;
          }
          if (oldEncoder.F0 != Encoder.F1)
          {
              if (oldEncoder.F1 == Encoder.F0 ) if (sayac > 0) sayac--;
          }
     }
}

mesaj birleştirme:: 01 Mayıs 2015, 00:11:48

Bu orijinal komut , lcd için , sayaçta rotary encoderin durum bilgisi var   00  , 01 ,11 , 10  .........   txt çevrilince 1 - 2 -3 ....... 7 gibi yazdırması lazım

erpay


serkan

 bu nedir  unsigned sayac, tmp;           // değişkenler


unsigned int 
unsigned char 

TA7R

#11
Neyseki biraz ilerleme var !  Yazılımın en başında   
char txt[5];                   // tanımlanıyor 
tanımını görünce ve ayrıca orijinal koddaki
Lcd_Out(2, 1, txt); 
komutunu help de inceleyince , bunu yadırmak için bir char yazdıran komut bulmam gerektiğini düşündüm . Karşıma iki komut çıktı Glcd librart de
Glcd_Write_Char     ve    Glcd_Write_Char_Adv   , Adv li olandan bir sonuç alamadım . Komutu textdeki tırnak işaretlerini kaldırarak şöyle yazmam gerekiyordu ( 2x16 lcd ye göre )  ,  Glcd_Write_Char(txt, 50, 2, 1);  ancak yine olmadı , yıldız karakteri yazdırdı . Sonra Glcd_Write_Char(sayac, 50, 2, 1);  komutunu kullandım , çok enteresan bu komutta sayaç içindeki değeri okudu ve yazdı ancak sayı olarak değil de harf olarak :-))
yani rotary encoderi çevirdikçe  sayaç:1 - Sayaç:2 ............... Sayaç:7 şeklinde artması veya eksilmesi gerekirken  , Sayaç: a - Sayaç:b - sayaç:c  ..... Sayaç:e şeklinde artıyor ve eksiliyor.
E bu acemiden bu kadar , sayın hocalarım da bunları nasıl rakama dönüştüreceğimi söyler artık inşallah.


mesaj birleştirme:: 01 Mayıs 2015, 18:27:16

:-)) Buldum ,yukarıdaki açıkamayı yazmak bana yol gösterdi !  txt yazmak için aslında sadece text yazdıran komuta ihtiyacım vardı , ama 50 kere denemiştim olmamıştı. Yukarıdaki denememde ise lanet tırnak işaretlerini kaldırmayı bulmuştum ,hepsi bu kadarmış , yani ;
Glcd_Write_Text("Hello world!", 10, 2, 1);  örnek kodundan (help de )

Glcd_Write_Text(txt, 10, 2, 1);     // sadece bu !!!

Ama bu kadar değil !!! Daha sırada pice bir de keypad bağlamak var , ondan sonrasını ise düşünmek bile istemiyorum ! Allah yardımcınız olsun :-))

TA7R

#12
Merhaba 2004 de yazılmış bir dds projesi buldum MikroC . include dosyaları şöyle ;

#include        <pic.h>
#include        "dds.h" 

dds.h dosyasını vermiş onda sorun yok fakat  <pic.h> dosyası yok , benli mikroc nin dosyasıdır diye , uses ve include klasörlerine baktım (MikroC program) fakat yok .
Derlerken burda hata veriyor.
Bu pic.h dosyası ne olabilir ?


mesaj birleştirme:: 01 Mayıs 2015, 23:57:58

Sorumu değiştiriyorum , yazılım mikroC değil , HitechC imiş ... Bunu mikroc de derleyebilmek için ne yapmak lazım.

erpay

O zamandan bu vakte mikroC epey değişmiş olabilir. Şimdi bu tarz bir ekleme özel hazırlanmış kütüphanelerde kullanılıyor, MikroC'nin kendi kütüphaneleri tikleme ile ekleniyor.

M_B

Alıntı yapılan: TA7R - 01 Mayıs 2015, 22:57:17
Merhaba 2004 de yazılmış bir dds projesi buldum MikroC . include dosyaları şöyle ;

#include        <pic.h>
#include        "dds.h" 

dds.h dosyasını vermiş onda sorun yok fakat  <pic.h> dosyası yok , benli mikroc nin dosyasıdır diye , uses ve include klasörlerine baktım (MikroC program) fakat yok .
Derlerken burda hata veriyor.
Bu pic.h dosyası ne olabilir ?


mesaj birleştirme:: 01 Mayıs 2015, 23:57:58

Sorumu değiştiriyorum , yazılım mikroC değil , HitechC imiş ... Bunu mikroc de derleyebilmek için ne yapmak lazım.

#include        <pic.h>
satırını iptal et.
#include        "dds.h"   ekle ve projenin bulunduğu klasore de dds.h koy.
tabi dds.h icerigi ne de bakmak lazım. Tanımlamalar falan nasıl yapılmış.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet