Haberler:

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

Ana Menü

Pic - Rs232 okuma

Başlatan xugurx, 26 Nisan 2012, 23:59:03

xugurx

Haftalardır SHT11 den aldığı sıcaklık ve nem bilgisini 16F877 üzerinden RS232 seri portuna yollama işlemini CCS C dilinde yapmaya çalışıyorum bu konuda hiç bir bilgim yok ve bunu yapmak zorundayım. ticari bir amacım yok çok az bir vaktim kaldı yardımcı olursanız sevinirim.. Tüm devre şemasını bacak bağlantısını herşeyini ayarladım tek sıkıntı PİC'in içine atılacak kodda lütfen yardımcı olun forum sayfalarının da bir anlamı olsun teşekkürler.

skara1214

hocam ben sürekli aynı soruyu soruyorum size heralde bu açtığınız 3. yada 4. konu sht11 ile alakalı siz sht11 ile iletişim kurdunuz bilgileri okudunuz bilgisayaramı atamıyorsunuz?yoksa sht11 ile iletişim hiç kuramadınız ve sht 11 ile ilgili iletişim + bilgisayara yollama kodunu komplemi istiyorsunuz?
Herkes ölür ama herkes gerçekten yaşamaz

xugurx

skara1214 ben size özel mesajla ile cevap vermiştim fakat ulaşmadı sanırım, hiç bir değer göremiyorum hyper terminal de yada diğer seri port okuma için yazılan programlarda. Doğal olarak görememin nedeni de PİC'in içinde bir kodun yazılı olmayışı SHT'nin sht75.c diye piyasada olan driveri da PCde mevcut onu bir yere kurmama zaten gerek yok diye biliyorum umarım derdimi anlatabilmişimdir.. Donanım 1 yazılım 0 yani..

skara1214

Erhan yılmaz adlı arkadaşın yaptığı bir proje o lcd de göstermiş ben bilgisayara yollanacak şekilde eviriyorum bunu bir deneyin...
#include <16F877.h> 
#fuses HS,NOWDT
#use delay(clock=20000000) 
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
#include <sht75.c> 
void main() 
{ 
 float restemp, truehumid  ; 
 sht_init();
 while(1) 
 {   
           sht_rd (restemp, truehumid);
          delay_ms(1000);
          printf("IsI : %3.1f %cC   ", restemp, 223);
          printf("\nNem : %3.1f  %%   ", truehumid); 
        delay_ms(500); 
 } 
}   
Herkes ölür ama herkes gerçekten yaşamaz

xugurx

#4
CCS C 'de derlemeye çalışırken bu kısımda hata veriyor hocam
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)


böyle derliyorum
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

fakat bir sonuç vermiyor
Bazende böyle alakasız bir değer gösteriyor.

http://imageshack.us/photo/my-images/23/denemep.png

xugurx

İSİS'de denediğimde LCD'den okuyorum virtual terminalden saçma sapan karakterler görüyorum lütfen yardımcı olun

cemilkendir

vitural terminalin özelliklerinden parametrelerini doğru ayarla
baudrate stop start bitleri ve birde gelen datayı invert etme

xugurx



Baud ayarları felan hepsi normal 9600'de.. Acaba sorun şu mu yanlış mı söylüyorum yada Picden bilgisayara gelen veri HEX.. HyperTerminal'de de ASCII gösteriyo birbirine çakışmamı yaratıyor ama böyle olsa normal İSİS'in Virtual-Terminalinde neden çakışsın diyorum.

kudretuzuner

Merhaba
PIC C » CCS C »yazılımınız hakkında yorum yapamayacağım.Çünkü bilgim yok.Fakat şunu söyleyebilirim,PIC'ten PC'ye data yollanırken Örneğin PIC  klavye "1" biri Hex'31' olarak PC'ye yollar.PC de ise bunu DEC 49 olarak görürsünüz.PC'de yazacağınız bir ara yüz ile(VB.Net,C#........vs)gelen bu dec 49'u 1 olarak gösterbilirsiniz.
   Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
         Dim gelen As String = SerialPort1.ReadByte               '
        If gelen = 49 Then
           textbox1.text = "1"
        End If
    End Sub
http://www.table-ascii.com/
Amatör

xugurx

Serial port terminal tarzında programlar ile denedim HEX modunda 00 00 00 00  değeri veriyor arkadaşlar PİC'e attığım kod aşağıdaki gibidir.

#include <16F877a.h>
#use delay(clock=4000000)

#include<lcd.c>
#include <sht75.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
void main()
{
 float restemp, truehumid;
 int intRestemp, intTruehumid;
 lcd_init();
 sht_init();
output_high(PIN_B0);
 while(1)
 {
           sht_rd (restemp, truehumid);

             // float ISI'dan int isi'ya
  intRestemp = restemp;

  // float NEM'den int nem'e
  intTruehumid = truehumid;

  // putC ile once isiyi, sonra Nem'i gonderdik.
  // RF Modulu uzerinde ise Radio frenkasi ile
  // RS modulu uzerinde ise Com kablosu ile gonderir.
  putc(intRestemp);
  putc(intTruehumid);

  // LCD'nin ilk satir ilk sutununa git
  lcd_gotoxy(1,1);


          delay_ms(1000);
          printf(lcd_putc, "\f ISI : %3.1f %cC   ", restemp, 223);
         printf(lcd_putc, "\n NEM : %3.1f %%   ", truehumid);
        delay_ms(500);
          output_toggle(PIN_B0);
 }
}