Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: TA7R - 24 Nisan 2015, 00:32:24

Başlık: MikroC Öğreniyorum / Sorular
Gönderen: TA7R - 24 Nisan 2015, 00:32:24
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 ?
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: Firzen - 24 Nisan 2015, 07:36:33
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?
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: 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 ?
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: Firzen - 24 Nisan 2015, 21:16:01
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.
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: TA7R - 30 Nisan 2015, 22:37:27
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
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: M_B - 30 Nisan 2015, 23:03:05
Hocam

Glcd_Write_Const_Text_Adv(txt, 0, 0);

denermisiniz.
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: TA7R - 30 Nisan 2015, 23:20:05
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ı
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: erpay - 01 Mayıs 2015, 00:07:27
@TA7R sayac'a hangi değeri atadın daha doğrusu ona bir string mi atadın  ya da bir sayı mı ?
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: TA7R - 01 Mayıs 2015, 00:09:44
#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
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: erpay - 01 Mayıs 2015, 00:47:14
GLCD kullanmamışsın hiç ?
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: serkan - 01 Mayıs 2015, 00:56:50
 bu nedir  unsigned sayac, tmp;           // değişkenler


unsigned int 
unsigned char 
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: TA7R - 01 Mayıs 2015, 02:17:34
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 :-))
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: 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.
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: erpay - 02 Mayıs 2015, 01:43:03
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.
Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: M_B - 02 Mayıs 2015, 13:53:06
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ış.

Başlık: Ynt: MikroC Öğreniyorum / Sorular
Gönderen: erpay - 03 Mayıs 2015, 16:05:08
Pic ile alakalı olan hazır fonksiyonları MikroC'nin kullandığı şekle çevirmen gerekli.