Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: gtokmak91 - 18 Ekim 2012, 22:35:06

Başlık: printf ondalıklı sayı gösterme sorunu
Gönderen: gtokmak91 - 18 Ekim 2012, 22:35:06
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);

}
}
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: 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.
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: diot - 19 Ekim 2012, 09:01:31
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.
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: JKramer - 19 Ekim 2012, 09:15:30
printf fonksiyonunda öyle bir özellik yok diye biliyorum, "digit grouping" şeklinde bir arama yapınca bazı örnekler çıkıyor.
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: AsHeS - 19 Ekim 2012, 12:27:13
Yanlış biliyor olabilirim ama printf fonksiyonu seri porta veri basmak için kullanılıyor MCU için olan derleyecilerde(genelde).
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: gtokmak91 - 19 Ekim 2012, 14:09:49
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
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: 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.
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: gtokmak91 - 19 Ekim 2012, 20:16:47
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  :)
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: Klein - 20 Ekim 2012, 14:22:20
nette şöyle birşey buldum. belki işine yarar.
printf support:
( ) Standard
(*) Float
( ) Minimal

scanf support:
(*) Standard
( ) Float
( ) Minimal
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: gtokmak91 - 20 Ekim 2012, 16:28:45
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)
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: M_B - 20 Ekim 2012, 17:10:21
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.


Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: gtokmak91 - 20 Ekim 2012, 18:54:08
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 :)
Başlık: Ynt: printf ondalıklı sayı gösterme sorunu
Gönderen: karacan451 - 07 Nisan 2015, 07:14:15
(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.....