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 ?
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?
@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 ?
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.
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
Hocam
Glcd_Write_Const_Text_Adv(txt, 0, 0);
denermisiniz.
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ı
@TA7R sayac'a hangi değeri atadın daha doğrusu ona bir string mi atadın ya da bir sayı mı ?
#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
GLCD kullanmamışsın hiç ?
bu nedir unsigned sayac, tmp; // değişkenler
unsigned int
unsigned char
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 :-))
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.
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.
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ış.
Pic ile alakalı olan hazır fonksiyonları MikroC'nin kullandığı şekle çevirmen gerekli.