lpc1769 uart problem for integer data send

Başlatan armsistem, 11 Mart 2012, 11:54:50

armsistem

Arkadaşlar merhaba , uygulama kitinden butona basıldığında x değerini birer birer arttıran bir program yaptım (butona basıldımı x=x+1) bu değeri lcd ye basabiliyorum fakat uartta problem yaşıyorum. Bu işin mantığı nedir.Int bir değer uarta veri gönderirken nasıl bir yol izlenir. Uarta string ifade veri gönderirken problem yok.

fatihinanc

UART üzerinden her seferinde bir basamak göndermeniz gerekiyor.
Sayı göndermeye çalıştığızda olmaz çünkü bu değeri ASCII olarak ekranda görüntüleyemezsiniz.

Mesela 123 diye bir sayıyı UART üzerinden göndermek istiyorsunuz;
Önce bu sayının basamaklarını bulmalısınız;

sayi = 123;
birler = (sayi % 10) +48;
onlar = (sayi /10) %10) + 48;
yuzler = (sayi /100) +48;


sonra da uart_send gibi bir fonksiyon ile bunları ASCII karakter olarak UART üzerinden göndereceksiniz.
Bir diziye atıp for döngüsü ile de gönderebilirsiniz.

uart_send(yuzler);
uart_send(onlar);
uart_send(birler);


Kolay Gelsin.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

mcan

Printf kullan. printf("integer sayi = %u",degisken), gibi kullanabilirsin. Kullandığın derleyicide retarget  olayını kullanman gerekebilir.
Örnek retarget şu şekilde kullanıyorum bendeki mcu cm3 derleyici keil,
int fputc(int ch, FILE *f) 
{	while ( !(USART1->SR & USART_SR_TXE) );
	USART1->DR = (uint16_t)(ch & 0x01FF);
	while ( !(USART1->SR & USART_FLAG_TC) );
	return (ch);
}

int fgetc(FILE *f) 
{
	while (!(USART1->SR & USART_FLAG_RXNE));
    return ((uint16_t)(USART1->DR & (uint16_t)0x01FF));
}

armsistem

yanıtlar için teşekkürler peki int i =356 i yi string char="356" şekline çevirezmiyiz.

mcan


armsistem

mcan arkadaşım ben den hızlı davramışın sprint ile çevirdim çözüme ulaştım ,int to string yapıyorum ,istediğim oldu lakin kulağı tersten tutmak değil dimi bu iş ?

yamak

Alıntı yapılan: armsistem - 11 Mart 2012, 15:58:07
mcan arkadaşım ben den hızlı davramışın sprint ile çevirdim çözüme ulaştım ,int to string yapıyorum ,istediğim oldu lakin kulağı tersten tutmak değil dimi bu iş ?
Neden ki?Bence bu en kolay yol.

armsistem

Sağol yamak hocam , bu programlama işini mbed tarzı hazır kütüphane vs. şeklinde de yapabilirdim ben biraz daha temele inmek istiyorum daha farklı mcu programlarken zorluk çekmemek için.

matador


yamak


matador

hocam bunu yaptım ama stringi inte dönüştüremedim fonksiyonu denediğim zaman uart bağlantısı kesiliyor

hosiminh

bir "debug log" un varsa örneğin elindeki görmek istediğin rakam 74 diyelim veya klavyeden giriş yapacaksın bu durumda aşağıdaki gibi kullanabilirsin

x= atoi("değişken");
dbglog("x: %d",x);

burada klavyeden x e ne girdiysen dbglog mekanizmanda onu görürsün.

matador

benim amacım şu ben uart kullanan rf modülden string bilgiyi göndereceğim alıcı bu string bilgiyi integer yapacak. atoi fonksiyonuna keilin internet sitesinden baktım denedim yanlış oldu isis te deneme yaparken virtual terminal kullandım atoi fonksiyonunu denediğimde haberleşme olmadı programdan kaldırınca düzeldi.

yamak

Aldığın karakterlerden 48 çıkar ve bir int değişkene yükle integer a dönüştürmüş olursun. Örnek:
#include <stdio.h>
int main(void)
{
	
	int i;
	char a;
	a=getchar();
	i=a-48;
	printf("%d",i);
}