Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

HEX alma ve gönderme

Başlatan Yeniüye1234, 06 Eylül 2022, 17:25:39

Yeniüye1234

Arkadaşlar herkese selam. CCS C üzerinden hex bir ifadeyi bir PIC' ten diğer PIC' e nasıl gönderirim? PIC' e gelen bu hex ifadeyi nasıl alırım?

hex göndermede örnek olarak putc(0x65); yazıyorum. Bu gönderme işleminden sonra karşı PIC' te bunu 01 olarak görüyorum.

yardımcı olursanız sevinirim.

sadogan

0x65 101d yapar , baştaki 1 kaybetmiş gibisiniz.

Yeniüye1234

Hocam ben bir PIC ten 0x65 göndermek istiyorum. Alıcı PIC te yine 0x65 görmek istiyorum.

sadogan

0x65 ascii karşılığıda 'e' dir.
Siz bunu nerde görüyorsunuz hangi formata bakıyorsunuz, bunlari bilmemiz imkansız.
Bu sayfayı incelemende yarar var.
http://www.picproje.org/index.php/topic,57135.0.html
 

erpay

Hangi protokol üzerinden yolluyorsunuz ?

Yeniüye1234

#5
.

Yeniüye1234

#6
Alıntı yapılan: sadogan - 06 Eylül 2022, 21:47:030x65 ascii karşılığıda 'e' dir.
Siz bunu nerde görüyorsunuz hangi formata bakıyorsunuz, bunlari bilmemiz imkansız.
Bu sayfayı incelemende yarar var.
http://www.picproje.org/index.php/topic,57135.0.html
 


Konunun en başında ccs c programında iki pıc arasında hex gönderme işlemi diye belirttim. Bunu putc komutuyla yaptığımı da söyledim. Rs232 de Putc ile gönderdiğim hex ifadeyi karşı pıc te nasıl göreceğimi soruyorum zaten. Yani yazdıklarım gayet açık. Ben 0x65 in ascıı karşılığını sormuyorum. 0x65 şart değil 0x30 olsun. Bunu gönderip, karşı pıc te de bu hex ifade geldiğinde bir pin çıkış versin. Bunu nasıl yapabilirim. Sorum bu. Buna verilecek cevap: şu komutla gönder, karşı pıc te de şu şu komutları yaz. İstediğim bu.  Gereksiz ileti göndermeyin.

Erol YILMAZ

Debug yapman gerekiyor.

Mcu dan 0x65 gönderip diğer mcu dan, farklı birşey okumanın birçok sebebi olabilir.

Mesela 2 tarafta da baudrateler eşit olmayabilir.
Osilatörleri aynı olmayabilir.
Şaseler ortak olmayabilir.
Birisi sinyali tersliyor olabilir.
Stop bit sayısı etkili olabilir mi emin değilim.
Ccs olduğu için diyorum bunu, alıcı taraf SOFT çalışıyorsa kaçırıyor olabilir.

Sabah ilk aklıma gelenler bunlar,
Devreyi şöyle üstten bir foto çekip koyabilir misin ayrıca?

Yeniüye1234

Alıntı yapılan: Erol YILMAZ - 07 Eylül 2022, 08:24:09Debug yapman gerekiyor.

Mcu dan 0x65 gönderip diğer mcu dan, farklı birşey okumanın birçok sebebi olabilir.

Mesela 2 tarafta da baudrateler eşit olmayabilir.
Osilatörleri aynı olmayabilir.
Şaseler ortak olmayabilir.
Birisi sinyali tersliyor olabilir.
Stop bit sayısı etkili olabilir mi emin değilim.
Ccs olduğu için diyorum bunu, alıcı taraf SOFT çalışıyorsa kaçırıyor olabilir.

Sabah ilk aklıma gelenler bunlar,
Devreyi şöyle üstten bir foto çekip koyabilir misin ayrıca?


Hocam bütün değerler herşey aynı. Benim sorduğum şey bir pıc ten hex nasıl göndereceğiz, diğer pıc te de bunu alacağız. Sadece kod soruyorum. Hex gönderme kodu ve hex alma kodu. Ben sadece bunu soruyorum.

sadogan

Alıntı yapılan: Yeniüye1234 - 07 Eylül 2022, 05:39:33Konunun en başında ccs c programında iki pıc arasında hex gönderme işlemi diye belirttim. Bunu putc komutuyla yaptığımı da söyledim. Rs232 de Putc ile gönderdiğim hex ifadeyi karşı pıc te nasıl göreceğimi soruyorum zaten. Yani yazdıklarım gayet açık. Ben 0x65 in ascıı karşılığını sormuyorum. 0x65 şart değil 0x30 olsun. Bunu gönderip, karşı pıc te de bu hex ifade geldiğinde bir pin çıkış versin. Bunu nasıl yapabilirim. Sorum bu. Buna verilecek cevap: şu komutla gönder, karşı pıc te de şu şu komutları yaz. İstediğim bu.  Gereksiz ileti göndermeyin.
Gereksiz iletiler için  özür.

Mr.Thinking

Bu kodlar PBP de herhangibir protokol gerektirmeyen verici pic ile alıcı picin seçilen birer pininin birleştirilmesi ile yapılır.
verici
SEROUT2 belirlenen verme pini,396,[byte büyüklüğünde bir şifre, Gönderilecek hex bilgisi]

Alıcı
SerIn2 belirlenen giriş pini,396,5,ATLA,[WAIT ("gelen şifre"),gelen hex bilgisi]

bu kodlar ise iki pic arasında RX ve TX pinlerinin mecburen kullanıldığı usart protokolü ile bilgi alış verişi içindir.
verici
Baudrate ayarları(9600b-8N1)
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 129  ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

gonder:
'HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
Hserout ["E","T","E",BILGI,$45,$4E,$44,$0D,$0A]
return

Alıcı
HSERIN 5,ATLA, [WAIT("ETE"),BILGI]
ATLA:
    TEMP=RCREG 
    GIE=1
CIK:
    Resume
    enable

Bunları anlaman için PBP de usart iletişim örneklerini gözden geçirmen gerekli.
ego=1/Knowledge

Yeniüye1234

Alıntı yapılan: Mr.Thinking - 07 Eylül 2022, 10:28:12Bu kodlar PBP de herhangibir protokol gerektirmeyen verici pic ile alıcı picin seçilen birer pininin birleştirilmesi ile yapılır.
verici
SEROUT2 belirlenen verme pini,396,[byte büyüklüğünde bir şifre, Gönderilecek hex bilgisi]

Alıcı
SerIn2 belirlenen giriş pini,396,5,ATLA,[WAIT ("gelen şifre"),gelen hex bilgisi]

bu kodlar ise iki pic arasında RX ve TX pinlerinin mecburen kullanıldığı usart protokolü ile bilgi alış verişi içindir.
verici
Baudrate ayarları(9600b-8N1)
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 129  ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

gonder:
'HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
Hserout ["E","T","E",BILGI,$45,$4E,$44,$0D,$0A]
return

Alıcı
HSERIN 5,ATLA, [WAIT("ETE"),BILGI]
ATLA:
    TEMP=RCREG 
    GIE=1
CIK:
    Resume
    enable

Bunları anlaman için PBP de usart iletişim örneklerini gözden geçirmen gerekli.

Hocam teşekkür ederim ama ben CCS C komutları için sordum.

Mr.Thinking

#12
Alıntı yapılan: Yeniüye1234 - 07 Eylül 2022, 10:36:24Hocam teşekkür ederim ama ben CCS C komutları için sordum.
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                  // parity bitinin olmadığını, stop bitinin 1 bit olacağı belirtiliyor

char   klavye[80];  // klavye isminde 80 üyeli bir dizi tanımlanıyor

#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   output_high(pin_c5);  // RC5 çıkışı lojik-1
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("\n\rYazdiginiz Metin>  %s\n",klavye); // Satır atla, yeni satır,RS232 üzerinden klavye string ifadesini gönder,satır atla
   printf(lcd_putc,"\f%s",klavye);  //LCD'yi temizle ve klavye string ifadesini LCD'de göster
   output_low(pin_c5); // RC5 çıkışı lojik-0
   printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   output_low(pin_c5); // RC5 çıkışı ilk anda sıfırlanıyor
   lcd_init();   // LCD'yi hazırla

   printf("\r**************** Merhaba *********************"); // Yeni satır, RS232 üzerinden belirtilen metni gönder ve satır atla.
   printf("\n\rKlavyeden girdiginiz bilgiler LCD'de gorunecektir\n\n"); // Satır atla, yeni satır, RS232 üzerinden belirtilen metni gönder
   printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder

   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver

   while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
   }
}
Belki faydası olur
ego=1/Knowledge

tunayk

Aslında soruda bir karmaşa var o yüzden de gelen cevaplar farklı noktalara değiniyor.

normalde sorunun cevabı ;

char value = getc();

dir. putc(x) ile ne gönderdiyseniz karşı taraftan o alınır.  Gönderilen veya alınan datanın kendisi Hex veya Dec değildir. Binary formda gider gelir.  Sizin atadığınız değişken hafızada binary formda tutar herşeyi.  Ta ki siz işlerken onu Hex veya Dec olarak kullanırsınız.
0x65 ie 'A' aynı şekilde hafızada durur. Siz hangi formatta işlerseniz o na dönüşür.

Teknik gereksinimler zaten yukarıda tanımlanmış.

Yeniüye1234

Alıntı yapılan: tunayk - 07 Eylül 2022, 11:00:22Aslında soruda bir karmaşa var o yüzden de gelen cevaplar farklı noktalara değiniyor.

normalde sorunun cevabı ;

char value = getc();

dir. putc(x) ile ne gönderdiyseniz karşı taraftan o alınır.  Gönderilen veya alınan datanın kendisi Hex veya Dec değildir. Binary formda gider gelir.  Sizin atadığınız değişken hafızada binary formda tutar herşeyi.  Ta ki siz işlerken onu Hex veya Dec olarak kullanırsınız.
0x65 ie 'A' aynı şekilde hafızada durur. Siz hangi formatta işlerseniz o na dönüşür.

Teknik gereksinimler zaten yukarıda tanımlanmış.

Hocam benim sorduğum soru şu: 0x.. şeklinde bir hex ifadeyi bir pıcten göndereceğim, başka bir pıcten alacağım.

Bunun için göndereceğim pıcten putc ile mi? puts ile mi? printf ile mi? göndereceğim?

Alacağım pıc te de değişken türünü nasıl tanımlayacağım ve hangi komut ile alacağım?