manve Mesaj tarihi: Mart 26, 2011 Paylaş Mesaj tarihi: Mart 26, 2011 Selamlar, Simdi ben gecenlerde bir konu acmistim PIC16f877 ile ilgili falan. Neyse o konuda olayin sonuna geldim artik ama soyle bir sey var. Simdi benim board bilgisayara seri port ile bagli olacak. Yalniz PC tarafindaki programi Visual Studio ile baska bi cocuk yaziyor. Lavuk attigim maile 4 gun sonra cevap verdiginden buradan sorayim, hem daha iyi cevap alirim dedim. Simdi benim board 3 sensorden bilgi aliyor. Bunlardan 2si zamanlama icin birisi de aci degeri icin. Bunlarla ilgili grafik cikacak sonuc olarak ortaya. Yalniz benim sensorlerden birisindeki degisken `float` olarak tanimli 4 bytelik deger tutuyor. Sonuc olarak da seri porttan gondermek sikinti oldu benim icin. Hadi dedim 16bitlik integer olarak tuttuktan sonra bilgisayar tarafinda 10a bolerek gosteririz ama 2 byte gondermek icin de gene seri islemleri falan giriyor. Aci degerini gonderen sensorun frekansi yuksek oldugundan ve de surekli olarak olcmek zorunda oldugumdan seri bi sekilde gondermem gerekiyor. Soyle bir sey yapsam; ben bu degeri printf ile text olarak gondersem bunu VS ile sayiya cevirebiliyor muyuz? Eger boyle oluyorsa tek byte da "204" gonndermek mumkun mu? Yoksa bunu da gidip "2", "0", "4" olarak 3 byte olarak mi gonderir? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Leath Mesaj tarihi: Mart 26, 2011 Paylaş Mesaj tarihi: Mart 26, 2011 manve said: Selamlar, Soyle bir sey yapsam; ben bu degeri printf ile text olarak gondersem bunu VS ile sayiya cevirebiliyor muyuz? Eger boyle oluyorsa tek byte da "204" gonndermek mumkun mu? Yoksa bunu da gidip "2", "0", "4" olarak 3 byte olarak mi gonderir? Selamlar, VS altinda C++ kullaniyorsan cevirebilirsin, atoi, atof fonksiyonlari bu isi goruyor. strol gibi baska fonksiyonlar da var. Serial port ile haberlesmenin RS232 uzerinden UART ile oldugunu varsayiyorum. Bu durumda 1 byte ile ifade edilen "204"(geek : 11001100) degerini tek bir frame uzerinden gonderebilirsin. float'a ait diger 3 degeri de bunu izleyen diger 3 frame icinde gonderebilirsin. Tavsiye istersen printf'le ascii'ya cevirip gondermene gerek yok, direkt float'i oldugu gibi gonderebilirsin serial uzerinden. En fazla bit order'i flip etmen gerekebilir karsi tarafa ulastiginda(endinanness) Soruna uygun sekilde cevap vermisimdir umarim :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
manve Mesaj tarihi: Mart 26, 2011 Konuyu açan Paylaş Mesaj tarihi: Mart 26, 2011 Hmm yazarken dikkat etmemisim de mesela o deger 600 de olabilir. Yani benim 600 dedigim 60.0 degerine karsilik gelecek. 0.1 hassasiyetle aci okutmam lazim. Su an demek istedigini tam anlayamadim, uyumam yarin bi daha okumam lazim falan =) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Leath Mesaj tarihi: Mart 26, 2011 Paylaş Mesaj tarihi: Mart 26, 2011 sinav oncesi cevap yazmamak lazimmis buraya, onu farkettim. float'i direkt gonderebilirsin serial uzerinden, bit order flip etmen gerekebilir bir ihtimal gonderici veya alicida. ascii string'e cevirip gonderirsen byte byte gidecek iste her basamak, karsi tarafta char dizisi olarak alip atof fonksiyonunu kullanarak float degisken haline getirebilirsin. ascii string olarak gonderdiginde byte basina bit order flip etmen gerekli gene. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
manve Mesaj tarihi: Mart 27, 2011 Konuyu açan Paylaş Mesaj tarihi: Mart 27, 2011 evet ayildim =) icmeye baslamadan cevap yazayim sonra karisiyor isler :P Evet rs-232 uzerinden UART ile gonderiyorum onu unutmusum. Zaten floati gondermem de sorun yok, benim istedigim en hizli sekilde gonderebilmek. Mesela diyelim o an ki aci degerimiz 32,1. Bunu float olarak gonderirsem 4byte olarak gondermem gerekiyor bildigim kadariyla, yok eger 321 olarak gonderirsem 2 byte gonderiyor, peki ascii ye cevirsem nasil gondericek? "3", "2", "1" olarak 3 byte gondericek demi simdi. Eger boyle oluyorsa en hizlisi 2byte olarak 321 seklinde gonderirim, bilgisayarda da gosterirken 10a boluverir artik. Benim normalde float icin yazdigim degiskenler sunlar mesela : union { float angle; int b[4]; } send; int n; for(n=0;n<4;n++) putc(send.b[n]); Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Leath Mesaj tarihi: Mart 27, 2011 Paylaş Mesaj tarihi: Mart 27, 2011 int 1 byte mi ? float 4 byte mi ? sayet int 1 byte degilse yanlis hafiza adreslerini de okumus oluyorsun belirttigin kod orneginde yanlis anlamadiysam. ASCII'ya cevirip gonderirken bir de her byte icin bit order flip etmen gerektigini, bir de ASCII'ya cevirme esnasinda da cycle harcayacagini hesaba katiyorsun, degil mi ? Endinanness icin ise float olarak gonderirsen yanlizca butun float'in byteleri uzerinde tek bir islemle bit order flip etmen gerekecek. Obur turlu ise 4 kere yapmak zorundasin. Ha bir de gelen bytelerin yerlerini reverse etmen gerekli memory uzerinde karsi tarafta :p Direkt float olarak gonder diye tavsiyede bulunayim. Mach 3'de ucan roket icin sensor verisi okumuyorsan(1 khz control cycle rate) cok onemi olmamali su asamada. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
manve Mesaj tarihi: Mart 29, 2011 Konuyu açan Paylaş Mesaj tarihi: Mart 29, 2011 evet int1 byte float da 4 byte. Ondan sorun cikmaz sanirim. Bakalim ascii ye cevirmicem sanirsam. Direk gondermeyi deneyecegim. Yarin siparis vereyim de malzemeler gelince artik deneyerek gorurum sonuclari =) Boyle simulasyonla yapmak zor oluyor cidden. Benim sensore gelen sinyal 2khz olmasi lazim.Geleni direk gondermem gerekiyor iste. Bakalim ne kadarini gondercek =) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar