Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: abdullahmk - 29 Şubat 2012, 15:35:56

Başlık: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: abdullahmk - 29 Şubat 2012, 15:35:56
Selamunaleykum arkadaşlar.
LM35 ile çalışan çok basit bir sıcaklık ölçüm programı yazdım. Merak ettiğim şu ki her printf komutu işlendiğinde ekrandaki görüntü anlık olarak gidip geliyor. Dolayısıyla görüntüde süreklilik oluşmuyor ve hoş görünmüyor. Bunun sebebi nedir sizce?

#include <18F2520.h>
#device ADC=10
#fuses XT
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>

float32 bilgi,voltaj,sicaklik;

void main()
{
   setup_adc(adc_clock_div_32);
   setup_adc_ports(AN0);
   set_adc_channel(0);
   delay_us(30);
   lcd_init();
   
   while(1)
   {
      bilgi=read_adc();
      voltaj=0.00488125*bilgi*1000;
      sicaklik=(voltaj/10);
      printf(lcd_putc,"\fVOLTAJ  =%3.0f mV\nSICAKLIK=%3.0f'C",voltaj,sicaklik);
      delay_ms(1000);
   }
}


(http://img215.imageshack.us/img215/2900/lm35.jpg)
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: AsHeS - 29 Şubat 2012, 15:49:10
Aleykümselam,
%100 emin olarak yazmıyorum ama durmadan lcd de ki görüntüyü yenilemeniz sıkıntı yapıyor olabilir ya ne yapacağım diye soracak olursanız eski değer ile yeni değeri karşılaştırın eğer eski değer ile yeni değer arasında meselea +-0.3 lük bir fark varsa ekranı yenilesin.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: abdullahmk - 29 Şubat 2012, 15:58:49
Alıntı yapılan: AsHeS35 - 29 Şubat 2012, 15:49:10
%100 emin olarak yazmıyorum ama durmadan lcd de ki görüntüyü yenilemeniz sıkıntı yapıyor olabilir ya ne yapacağım diye soracak olursanız eski değer ile yeni değeri karşılaştırın eğer eski değer ile yeni değer arasında meselea +-0.3 lük bir fark varsa ekranı yenilesin.

Cevap için teşekkürler. Fakat öyle bile olsa yine de yenileneceği zaman ekran gidip gelecek. Benim merak ettiğim yenileme sırasında git gel yapmamasını sağlayacak herhangi bir şey yapılabilir mi?
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: AsHeS - 29 Şubat 2012, 16:01:45
bu ekranın yenilenmesini c dilinde nasıl yapıyor arkada bilmiyorum fakat asm de kendi yazdığım kod da harfler ekrana tek tek basılıyor ve bu basım sırasında hızlıca olduğu için proteus da topluca bekleme süresi oluyordu eğer ccs c de farklı bir yöntem keşfedilmemişse senin yazdığın kodlar mutlaka sekecektir.Çünkü lcd o kadar çok karakteri anında ekrana basamaz çünkü arada kontrol yapıları var.Ayrıca durmadan yenileme yapmak istiyorsanız 2-3 lü toplu sürülebilen 7 segment yapılarından alın onunla biraz daha hızlanacağını düşünüyorum.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: mozkan87 - 29 Şubat 2012, 16:24:08
Bunun nedeni yüksek ihtimalle lcd'ye her veri göndermeden önce lcd'nin ekranın silinmesidir. lcd.c dosyasının içini bir kontrol edin. Tüm lcd ye veri gönderileceği zaman ekranın silinmesi gereksiz oluyor. Doğrudan veriyi göndermek daha mantıklı. Ayrıca devreyi sadece proteusta açlıştırdıysanız yani gerçekte kurmadıysanız, proteusta böyle gözükmesi normal olabilr. Gerçekte bu silinmeyi fark edemezsiniz.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: AsHeS - 29 Şubat 2012, 16:26:28
Alıntı yapılan: mozkan87 - 29 Şubat 2012, 16:24:08
Bunun nedeni yüksek ihtimalle lcd'ye her veri göndermeden önce lcd'nin ekranın silinmesidir. lcd.c dosyasının içini bir kontrol edin. Tüm lcd ye veri gönderileceği zaman ekranın silinmesi gereksiz oluyor. Doğrudan veriyi göndermek daha mantıklı. Ayrıca devreyi sadece proteusta açlıştırdıysanız yani gerçekte kurmadıysanız, proteusta böyle gözükmesi normal olabilr. Gerçekte bu silinmeyi fark edemezsiniz.
Gerçekte olursa da zaten programın ana mantığı oynanmıyor yani pin giriş çıkışları sabit olacak şekilde algoritmayı kurcalar arkadaş böylece en hızlı çalışanını bulur.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: abdullahmk - 29 Şubat 2012, 16:36:58
Gerçek ve simulasyonun farklılıklar gösterebileceğini bildiğim için devreyi gerçekte hazırlayıp denedim fakat sonuç tam olarak Proteus'daki ile aynı. Her yenilemede ekran \f ile veya lcd_send_byte(1) ile zaten silinmek zorunda yoksa ekran saçmalar.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: AsHeS - 29 Şubat 2012, 16:50:08
Alıntı yapılan: abdullahmk - 29 Şubat 2012, 16:36:58
Gerçek ve simulasyonun farklılıklar gösterebileceğini bildiğim için devreyi gerçekte hazırlayıp denedim fakat sonuç tam olarak Proteus'daki ile aynı. Her yenilemede ekran \f ile veya lcd_send_byte(1) ile zaten silinmek zorunda yoksa ekran saçmalar.
o zaman pek hoşlanmasanızda :) benim önerdiğim çözümü deneyin eğer yine atlama yapıyorsa sizin kod da bambaşka bir yerde arıza var demektir.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: Klein - 29 Şubat 2012, 18:22:09
Alıntı yapılan: abdullahmk - 29 Şubat 2012, 16:36:58
Gerçek ve simulasyonun farklılıklar gösterebileceğini bildiğim için devreyi gerçekte hazırlayıp denedim fakat sonuç tam olarak Proteus'daki ile aynı. Her yenilemede ekran \f ile veya lcd_send_byte(1) ile zaten silinmek zorunda yoksa ekran saçmalar.
LCD silinmediği zaman neden saçmalıyor?
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: kaypic38 - 29 Şubat 2012, 19:12:18
Hocam senin yaptığın ölçüm anlık ama sen süreyi 1 sn olarak vermişsin renk algılayıcı yaptığımda aynı sorun bende de olmuştu anlık olabilmesi için sürenin çok kısa olması lazım tabi ki sıcaklık değişimi sürekli olursa bu durumda da değerler durmadan değişir süreyle oynayarak ayarlayabilirsin ben öyle yapmıştım RGB değerleri titreterek veya değişimlerde ekran siliniyor sonra yeni değer ekrana basılıyordu programın yapısını hiç değiştirmeden süreleri değiştirerek gidermiştim belkide aynı sorun ile karşı karşıyasın dır.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: mcan - 29 Şubat 2012, 21:47:40
Programındaki
printf(lcd_putc,"\fVOLTAJ  =%3.0f mV\nSICAKLIK=%3.0f'C",voltaj,sicaklik);
\f kullanmışsın bu ekranı komple siler. Komple silipde son karakteri basana kadarki sürede senin göze kötü görünüyor. Bunun yerine ekranın 2x16 olduğunu varsayarsak mesela ilk satıra her zaman 16 haneli bir şey yaz.Ve imleci ekranın başına silerek değil de direk komutla atlat.Ya da imleci direk değiştireceğin kısma taşıyıp sadece orayı değiştir.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: cemilkendir - 29 Şubat 2012, 22:52:30

lcd_gotoxy(1,1);
printf(lcd_putc,"VOLTAJ  =%3.0f mV",voltaj);
lcd_gotoxy(2,1);
printf(lcd_putc,"SICAKLIK=%3.0f'C",sicaklik);


ekranı her defasında önce silip sonra tekrar yazıyorsun ondan kıpraşıyor ekran bu verdiğim şekilde ise yeni karakterleri üzerine yazıyor
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: CLR - 29 Şubat 2012, 23:57:42
Ekranı, sadece değişkenlerin değiştiği zaman silip (veya sadece değişen kısımlarını) yazmalısın, her döngüde yazarsa lcdnin zamanla digitleri bozulur.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: cemilkendir - 01 Mart 2012, 01:07:28
Alıntı yapılan: uicroarm - 29 Şubat 2012, 23:57:42
Ekranı, sadece değişkenlerin değiştiği zaman silip (veya sadece değişen kısımlarını) yazmalısın, her döngüde yazarsa lcdnin zamanla digitleri bozulur.
böyle bir bilgiyi nerden aldınız kaynağı nedir. ben projelerimde böyle bir şeye dikkat etmiyorum hiç
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: CLR - 01 Mart 2012, 10:41:06
Alıntı yapılan: cemilkendir - 01 Mart 2012, 01:07:28
böyle bir bilgiyi nerden aldınız kaynağı nedir. ben projelerimde böyle bir şeye dikkat etmiyorum hiç

Aşağıda ki yazdıklarım şahsi görüşümdür.

1) Hayatta bu iki şey herşeyi(insan, madde vs) bozar, etkiler, bunlar stres(voltaj) ve frekans(tekrarlılık). Mesela bir kondansatörü 50hz'de 100000 saat kullanıyorsan, 100khz'de 5000 saat gibi ömrü olur. LCD segmentleri ise çok daha hassastır. Her loop arası en iyi ihtimalle 1ms olsa, 1khz'de bir lcd'ye yazıyor olursun.Yani saniyede 1000kez lcd'ye yazarsın, oysa ben o 1000 kez yazmayı projeye göre 1ayda, 1haftada,1 günde bazen 1saatte yazabilirim.

2) Sürekli üzerine yazarsanız, programınız büyüdükçe kırpışma artar. Hele ekranı silip yazarsanız, kırpışma daha çok artar. Silmeden üzerine yazarsanız eski görüntüler ile yeni görüntüler birbirine karışır.

3) Ekran verilerinin kararsız durumlararında ekranınız sürekli değişecektir.

İşte bunlardan dolayı, yukarıdaki 3 durumda bana göre hem elektroniçlilik bağlamında hemde programcılık olarak yanlıştır. Sadece değişim olduğunda lcd ekranın tazelenmesi sade, mantıklı ve tasarrufludur.

Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: abdullahmk - 01 Mart 2012, 10:58:11
uicroarm arkadaşımızın görüşlerine katılıyorum. Ben bu işe yeni girmiş biriyim ve söyledikleri gayet mantıklı. Cevaplar için teşekkürler.
Başlık: Ynt: LCD ekran görüntüsü yenileme ile ilgili
Gönderen: cemilkendir - 01 Mart 2012, 11:06:45
bana pek teknik bir yaklaşım gibi gelmedi
ama önerin için sağol