Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

uart sorunu

Başlatan canbulut, 16 Mayıs 2015, 15:58:22

canbulut

hocam yazdığınız koddan bir şey anlayamadım maalesef. Verdiklerinize istinaden bir şey çıkardım fonksiyon dışında TxArray=75; tarzı tanımlarımı tanımsız olarak algıladı ve bana da biraz karmaşık geldi. ama istediğim şu şekilde tabi C yapısına uygun olmalı ve ben bunu yapamıyorum.

int Değişken=75;
xmit ("Veri:",Değişken,"Sayısını gönderdiniz.");//sonuçta istenilen bu.

Tagli

Belki sprintf ile degiskenleri yaziya cevirip ondan sonra yollayabilirsin. Ancak bu fonksiyon nedense cok yer istiyor program hafizasinda. Zamaninda yanlis hatirlamiyorsam PIC16F1826'da hafiza yetmedigi icin kullanamamistim ama yine de bir sansini dene bence.
Gökçe Tağlıoğlu

canbulut

#17
printf ile göndermek istediğimi nasıl birleştirebilirim?

mesaj birleştirme:: 24 Mayıs 2015, 19:30:04

örneksel sadece
printf("Veri : %d",LowPeryot);
kod ekledim %6dan %22ye çıktı. (harcanan)

Tagli

Tamam işte yukarıdaki mesajımda bahsettiğim sprintf aynı mantıkla o dediğin işi yapıyor.

Önce yeterli boyutta bir buffer tanımlıyorsun. Mesela char buffer[20];

Sonra sprintf(buffer, "Veri : %d", LowPeryot); çalıştırılınca yazı buffer dizisinin içine gitmiş oluyor. Sonunda da '\0' oluyor.

Bundan sonra normal şekilde yazı gönderdiğin gibi gönderebilirsin.
Gökçe Tağlıoğlu

canbulut

az yer kaplayan nasıl yapacağız? Gökhan hocanın yazdığını tam olarak anlayamadım. anladığım gönderme fonksiyonu içinden yapacağımız.ama araya yazılar falan yazamıyorum galiba.sonuçta anlamadım :)

Tagli

Gökhan'ın bahsettiği başka, ham veri basmak için. Anladığım kadarıyla senin alıcı taraf zaten sadece yazı okuyacak şekilde. Bu durumda ham veri basmak senin işine yaramaz. Ham veri basmanın anlamlı olması için kendin bir kural (bir diğer deyişle protokol) belirlemeli ve hem alıcı hem verici tarafında işlemleri buna göre yapmalısın, bu bu çoğu durumda alıcı tarafında da kodu senin yazmanı gerektirir. Yazı göndermeye göre daha zor ama daha esnek ve daha hızlıdır.
Gökçe Tağlıoğlu

canbulut

Alıntı yapılan: Tagli - 23 Mayıs 2015, 19:58:30
Gökhan'ın bahsettiği başka, ham veri basmak için. Anladığım kadarıyla senin alıcı taraf zaten sadece yazı okuyacak şekilde. Bu durumda ham veri basmak senin işine yaramaz. Ham veri basmanın anlamlı olması için kendin bir kural (bir diğer deyişle protokol) belirlemeli ve hem alıcı hem verici tarafında işlemleri buna göre yapmalısın, bu bu çoğu durumda alıcı tarafında da kodu senin yazmanı gerektirir. Yazı göndermeye göre daha zor ama daha esnek ve daha hızlıdır.
ben bu işlemleri basicte şu şekilde yapıyordum Hserout["Veri:",Dec Veri,"sayısı gitmiştir.",13] şeklindeydi. şimdi bu yüzden C zorluyor.

Tagli

XC8'de bir sanki bir sekilde printf kullanmak da mumkundu ama seri iletisim icin senin ismi belli olan bir fonksiyonu doldurman gerekiyordu. Fonksiyon putc gibi bir seydi. Derleyici dokumaninda bunun nasil yapildigi anlatiliyordu.
Gökçe Tağlıoğlu

canbulut

şöyle bir şey buldum
/*****************************
Dependencies:   xc.h, stdio.h
Processor:      PIC16F1824
Complier:       XC8 v1.00 or higher 
Result: Prints to the UART1 Window of the IDE
Debugger: Simulator
*****************************/
void putch(unsigned char byte)
{
    TXSTA=0x26;
    RCSTAbits.SPEN=1;
    TXREG=byte;
    while(!TXIF)continue;
    TXIF=0;
}

Gökhan BEKEN

Ben başka bişeyden bahsetmiştim.
int Degisken=75;
xmit ("Veri:");
if(Degisken>=100){
   xmit ((Degisken/100)+48); //yuzler basamagi
   xmit (((Degisken%100)-(Degisken%10))+48); //onlar basamagi
   xmit ((Degisken%10)+48); // birler basamagi
}
else if(Degisken>=10 && Degisken<100){
   xmit ((Degisken-(Degisken%10))+48); //onlar basamagi
   xmit ((Degisken%10)+48); // birler basamagi
}else{
   xmit (5+48); // birler
}
xmit ("Sayısını gönderdiniz.");
Özel mesaj okumuyorum, lütfen göndermeyin.

canbulut

Alıntı yapılan: Gökhan BEKEN - 23 Mayıs 2015, 22:21:41
Ben başka bişeyden bahsetmiştim.
int Degisken=75;
xmit ("Veri:");
if(Degisken>=100){
   xmit ((Degisken/100)+48); //yuzler basamagi
   xmit (((Degisken%100)-(Degisken%10))+48); //onlar basamagi
   xmit ((Degisken%10)+48); // birler basamagi
}
else if(Degisken>=10 && Degisken<100){
   xmit ((Degisken-(Degisken%10))+48); //onlar basamagi
   xmit ((Degisken%10)+48); // birler basamagi
}else{
   xmit (5+48); // birler
}
xmit ("Sayısını gönderdiniz.");

nasıl bir işlem var burda Gökhan hocam.daha büyük sayılarıda içerir mi?

Gökhan BEKEN

3 basamaklı sayılar için yazdım, doğruluğunu test etmedim, kafadan yazdım.
İsterseniz basamak sayısını artırmak için yeni if'ler ekleyebilirsiniz.
Çeşitli yöntemlerle yapabilirsiniz.
http://www.ckodu.com/ornek/201-basamak-degeri-c.html

Yalnız benim yazdığım kodda can alıcı nokta 48 sayısıdır. 0 sayısını ascii olarak yazdırmak için 48 olarak göndermeniz gerekir.
1 sayısı için 49, 9 için 57...
Özel mesaj okumuyorum, lütfen göndermeyin.

canbulut

#27
bununla harcanan flash kapasitesi %25lere çıktı.programda gördüğüm veri şu
Veri:???????????????????????????????????????????????????????????Say?s?n? g?nderdiniz.
madem çevirmede bu kadar yer kaplayacaksa printf gibi bir fonksiyonla daha rahat hemde anlaşılır olacağını düşünüyorum. printf gibi bir fonksiyonla gönderme şeklini nasıl kullanabilirim.

mesaj birleştirme:: 24 Mayıs 2015, 00:01:07

printf ("Veri: %d",Degisken," sayısını gönderdiniz.");
bu kodu uart TX ile nasıl birleştirebilirim.

canbulut

arkadaslar xc8'de integer sayı uarttan nasıl gönderilir? mesela artan bir sayı olsun. i++; her artışta 250msde bir i artacak ve uarttan gönderecek.ta ki sayı 1000 olana kadar.

Gökhan BEKEN

öyle uzun uzun yazmasının sebebi, xmit fonksiyonun içeriğinde olan şeyler yüzünden.
Ben senin yazdığın koda göre yazdım.
xmit yerine 1 byte'lık veri gönderen bir fonksiyon ismi yazman gerkir.
mesela "putc" olabilir.


Alıntı yapılan: canbulut - 24 Mayıs 2015, 01:25:57
arkadaslar xc8'de integer sayı uarttan nasıl gönderilir? mesela artan bir sayı olsun. i++; her artışta 250msde bir i artacak ve uarttan gönderecek.ta ki sayı 1000 olana kadar.
xc8 veya dünyanın herhangi bir derleyicisi veya dili ile, usarttan tek seferde gönderebileceğin maksimum sayı 255'dir. Daha fazla gönderemezsin.

Sen amacını yaz, string olarak mı almak istiyorsun?
Özel mesaj okumuyorum, lütfen göndermeyin.