Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Yeniüye1234 - 06 Eylül 2022, 17:25:39

Başlık: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 06 Eylül 2022, 17:25:39
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: sadogan - 06 Eylül 2022, 20:17:06
0x65 101d yapar , baştaki 1 kaybetmiş gibisiniz.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 06 Eylül 2022, 20:29:14
Hocam ben bir PIC ten 0x65 göndermek istiyorum. Alıcı PIC te yine 0x65 görmek istiyorum.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: sadogan - 06 Eylül 2022, 21:47:03
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
 
Başlık: Ynt: HEX alma ve gönderme
Gönderen: erpay - 06 Eylül 2022, 22:46:31
Hangi protokol üzerinden yolluyorsunuz ?
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 05:33:40
.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 05:39:33
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Erol YILMAZ - 07 Eylül 2022, 08:24:09
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?
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 08:32:47
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: sadogan - 07 Eylül 2022, 09:37:07
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Mr.Thinking - 07 Eylül 2022, 10:28:12
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 10:36:24
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.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Mr.Thinking - 07 Eylül 2022, 10:40:14
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
Başlık: Ynt: HEX alma ve gönderme
Gönderen: tunayk - 07 Eylül 2022, 11:00:22
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ış.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 12:12:28
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? 
Başlık: Ynt: HEX alma ve gönderme
Gönderen: fahri- - 07 Eylül 2022, 12:34:15
putc(0x65); komutu ile göndereceksin
data=getc(); komutu ile alacaksın

Ama önce bu komutların işlenebilmesi için UART ayarlarını yapmalısın.
Aldığın datayı nerede göreceksin? LCD ekranda göreceksen printf komutuyla %x formatıyla görebilirsin.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 12:43:02
Alıntı yapılan: fahri- - 07 Eylül 2022, 12:34:15putc(0x65); komutu ile göndereceksin
data=getc(); komutu ile alacaksın

Ama önce bu komutların işlenebilmesi için UART ayarlarını yapmalısın.
Aldığın datayı nerede göreceksin? LCD ekranda göreceksen printf komutuyla %x formatıyla görebilirsin.

Dediğiniz şekilde çok denedim ama olmuyor. data değişkeninin türü ne olacak? char mı?, int mi?

if ile karşılaştırma yapmak istesek nasıl yapacağız?
Başlık: Ynt: HEX alma ve gönderme
Gönderen: tunayk - 07 Eylül 2022, 12:52:37
Olmaması için bir sebep yok normalde. Data tipi konusunu yazmıştım.  Char veya Byte tipinde alabilirsin.  Bir byte veri okunur her seferinde.

Bence ilk başta iki pici boşverin.  Tek pic te Tx ve Rx pinlerini birleştirin. Putc ile 1 byte yazın. Bir kaç ms sonra getc ile okuyun.

İçine okunacak Değişkeninizi byte olarak tanımlayın.
if(okunan==0x65).. diye kıyas yaparsın.

Eğer iş tamam ise ikinci pice geçersin. Değilse config konusunda bir sorun vardır.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: fahri- - 07 Eylül 2022, 12:57:04
Aldığın datayı görüntüleyebilmen lazım ki hata nedir anlayabilesin. Önce pic den gönderdiğin datayı usb-rs232 çeviricilerle bilgisayarda görmeyi dene. Önce data doğru gidiyor mu onu tespit et.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: Yeniüye1234 - 07 Eylül 2022, 13:05:35
Alıntı yapılan: tunayk - 07 Eylül 2022, 12:52:37Olmaması için bir sebep yok normalde. Data tipi konusunu yazmıştım.  Char veya Byte tipinde alabilirsin.  Bir byte veri okunur her seferinde.

Bence ilk başta iki pici boşverin.  Tek pic te Tx ve Rx pinlerini birleştirin. Putc ile 1 byte yazın. Bir kaç ms sonra getc ile okuyun.

İçine okunacak Değişkeninizi byte olarak tanımlayın.
if(okunan==0x65).. diye kıyas yaparsın.

Eğer iş tamam ise ikinci pice geçersin. Değilse config konusunda bir sorun vardır.

putc(0x30); ve putc('4'); gönderiyorum. alıcıda char veri; tanımladım, veri=getc(); yapıyorum 4' e göe işlem yapıyor ama 0x30 a göre işlem yapmıyor.
Başlık: Ynt: HEX alma ve gönderme
Gönderen: tunayk - 07 Eylül 2022, 13:11:25
Alıntı yapılan: Yeniüye1234 - 07 Eylül 2022, 13:05:35putc(0x30); ve putc('4'); gönderiyorum. alıcıda char veri; tanımladım, veri=getc(); yapıyorum 4' e göe işlem yapıyor ama 0x30 a göre işlem yapmıyor.

O zaman sorun kalmamış zaten. Değişken char ise karşılaştırma char ile yapılır. Byte ise 0x30 gibi sayısal olarak  yapılır. Yada charı byte a çevirerek sayısal karşılaştırırsın.