Arkadaşlar uzun zamandır uğraşıyorum malesef lcd ekranda ondalıklı sayıyı gösteremedim.Ne türlü sorun var anlamış değilim.
dosyaları yükledim bakmak isterseniz.
http://s3.dosya.tc/server4/q0otTm/Atmega8_Lcd.rar.html (http://s3.dosya.tc/server4/q0otTm/Atmega8_Lcd.rar.html)
/*
* Atmega8_Lcd.c
*
* Created: 18.10.2012 17:11:39
* Author: Gökhan
*/
#include <avr/io.h>
#include "lcd.h"
#include <util/delay.h>
#include <stdio.h>
FILE lcd_str = FDEV_SETUP_STREAM(lcd_data, NULL,_FDEV_SETUP_WRITE);
int main(void)
{
float sayi=15.5;
unsigned long x=0 , z=0;
stdout = stdin = &lcd_str; // giriþ cikiþin aktarilmasi
lcd_hazirla(); // LCd on hazirlik
lcd_satirsutun( 0, 1 );
lcd_yaz(" ATMAGA8 LCD");
lcd_satirsutun( 1, 2 );
lcd_yaz("DENEMESI");
_delay_ms(1000);
lcd_sil();
while(1)
{
lcd_satirsutun( 0, 1 ); // Lcd nin 1. satir 0 sutununa git
lcd_yaz("ONDALIKLI SAYI"); // printf kullanimi.
lcd_satirsutun( 0, 2 ); // Lcd nin 2. satir 0 sutununa git
printf("=%3f",sayi); // printf kullanimi.
_delay_ms(500);
}
}
%x.yf
x: Toplam genişlik
y: Noktadan sonraki basamak sayısı
15.5 gösterimi için, %4.1f şeklinde kullanırsanız olması gerekiyor.
Peki decimal gruplar arsına nokta koyarak ayırma işlemi nasıl oluyor. mesela 1000000 u 1.000.000 şeklinde göstermeyi nasıl yapacaz.
printf fonksiyonunda öyle bir özellik yok diye biliyorum, "digit grouping" şeklinde bir arama yapınca bazı örnekler çıkıyor.
Yanlış biliyor olabilirim ama printf fonksiyonu seri porta veri basmak için kullanılıyor MCU için olan derleyecilerde(genelde).
Alıntı yapılan: JKramer - 19 Ekim 2012, 08:48:45
%x.yf
x: Toplam genişlik
y: Noktadan sonraki basamak sayısı
15.5 gösterimi için, %4.1f şeklinde kullanırsanız olması gerekiyor.
Bu dediğiniz şekilde denedim olmuyor ? çıkıyor ekranda
printf("= %4.1f",sayi);
yaptığım halde aynı sorun ama printf("= %4d",sayi); decimal olarak yaptığımda ekranda sayıyı gösteriyor.
Acaba lcd kütüphanesinden kaynaklanan sorun olabilir mi?
dosyaları yüklemiştim bakmak isterseniz.
Avr studio 6 da derleme yaptım.
Isıs 7.1 sp 9
Derleyici ayarlarından olabilir. Bazı derleyicilerde printf ve scanf opsiyonları bulunuyor. Az miktarda program belleğine sahip işlemcilerde kodu kısaltmak için printf fonksiyonundan floating point işlemleri kaldırılıyor.
İar derleyicide "printf" ve "scanf" ; "small", "medium" ve "large" olarak seçilebiliyor. "large" seçilirse floating sayıları işleyebiliyor.
Hocam kafayı yiyeceğim valla artık canımı sıktı yaa 1 haftadır uğraşıyorum yapamadım :'( avr studio 6 kullanıyorum atmelden vazgeçecektim şu eaysAVR6 almasaydım :)
nette şöyle birşey buldum. belki işine yarar.
printf support:
( ) Standard
(*) Float
( ) Minimal
scanf support:
(*) Standard
( ) Float
( ) Minimal
OHHH beee sonunda oldu yabancı sitelerde forumlarda büyük uğraşlar sonunda buldum ve oldu sorun çözüldü resimli bir şekilde anlatmak istiyorum diğer arkadaşlara yardımcı olur.
proje dosyası üzerinde sağ tıklıyoruz (1)
properties tıklıyoruz (2)
açılan pencereden toolchain (3)
AVR/GNU C Linker altındaki libraries (4)
açılan pencerede sağdan add ıtem tıklıyoruz (5) açılan pencereye printf_flt,-u,vfprintf,-lm bunu yapıştırıyoruz ve ok
son olarak alttan eklediğimiz uzantı görünüyor (6) derlediğimiz zaman float kullanabiliriz artık :)
(http://img427.yukle.tc/images/251Adsiz.png)
Cozduğünüze sevindim.
Alıntı yapılan: Klein - 19 Ekim 2012, 19:55:32
Derleyici ayarlarından olabilir. Bazı derleyicilerde printf ve scanf opsiyonları bulunuyor. Az miktarda program belleğine sahip işlemcilerde kodu kısaltmak için printf fonksiyonundan floating point işlemleri kaldırılıyor.
İar derleyicide "printf" ve "scanf" ; "small", "medium" ve "large" olarak seçilebiliyor. "large" seçilirse floating sayıları işleyebiliyor.
Sonuca bakarsak Klein hoca derleyici ayarlarından olabilir demişti.
Resimli acıklamada güzel olmuş elinize sağlık.
evet Klein arkadaşımızın dediği gibi derleyici ayarlarında yoğunlaşınca zorda olsa sorunu çözdüm
Paylaşmak güzel yardımcı olanlara teşekkür ederim :)
(http://s21.postimg.cc/4rycpb21f/image.jpg) (http://postimg.cc/image/4rycpb21f/)
Arkadaşlar gtokmak91 bahsettiği menü bende yoktu galiba farklı sürümünden kaynaklanan bir şeydi (WinAVR-20100110). Ben sorunu resimdeki gibi hallettim.Resimdeki işlemi hallettikten sonra save as diyerek proje dosyanıza ekleyiniz. Eğer lcd ekranınızda fazla sıfır varsa printf("%2.f",i); sayıyı arttırın
( printf("%3.f",sicaklik); printf("%4.f",sicaklik); gibi )
Allah Size Kolaylık Versin.....