Arkadaşlar merhaba ;
DS1990a iBUTTON Uygulaması yapmaya çalışıyorum ,yalnız sayı sistemlerine tam hakim olmadığımdan sıkıntı yaşıyorum.
Okuyacağım ;
- 8 bit (1 byte) aile kodu
- 48 bit (6 byte) serial number
- 8 bit (1 byte) CRC
Aşağıdaki şekilde veri çekiliyor.(For döngüsü ve dizi olarakta çekebilirim.)
char Data1 = ReadByte();
char Data2 = ReadByte();
char Data3 = ReadByte();
char Data4 = ReadByte();
char Data5 = ReadByte();
char Data6 = ReadByte();
char Data7 = ReadByte();
char Data8 = ReadByte();
ilk veri Data1 - > aile kodu sabit 0x01 if (Data1 == 0x01){FIO2SET |= 0x01 <<9;} yaptığımda çalışıyor
fakat bu değeri stringe çevirip UART basmam lazım 01 olarak -- > sprintf kullanmam gerek lakin bir türlü başarılı olmadım !
Data2+Data3+Data4+Data5+Data+Data7 toplamam (arka arkaya eklemem gerekiyor) gerek sonuç olarak ortaya 1A-BC-D1-00-D1-11-D1-DD gibi veri çıkartması gerekiyor ve bu değerleri stringe çevirip uarta göndermem gerekiyor. Sonuç olarak ekranımda görmem gerekenen aşağıdaki gibi olması gerekiyor.
aile kodu serial number CRC
0x01 1A-BC-D1-00-D1-11-D1-DD 0x02
char Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.
char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];
şeklinde string oluştur. ister döngüde yap. ister tek tek.
Alıntı yapılan: Klein - 20 Eylül 2013, 17:40:18
char Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.
char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];
şeklinde string oluştur. ister döngüde yap. ister tek tek.
Hocam çok iyi ....
Hocam 8 bit +48 bit + 8 bit
- 8 bitlerde problem yok ama 48 biti nasıl yapabilirim aynı mantıkta baktığım da tuhaf değerler çıkıyor.
- 48 bitlik bir hexdecimal sayı nasıl stringe çevirebilirim.
48 bit 6 byte ediyor byte byte çevirmelisiniz hocam.
Alıntı yapılan: Klein - 20 Eylül 2013, 17:40:18
char Tablo[] = {'0','1','2',....,'E','F'};
şeklinde bir tablo yap.
char TxBuf[32];
txBuf[1] = Tablo[OkunanVeri[0] & 0x0F];
txBuf[0] = Tablo[(OkunanVeri[0] >> 4) & 0x0F];
şeklinde string oluştur. ister döngüde yap. ister tek tek.
Hocam yukarıdaki mantıkla yapabiliyorum ama şunu kafam almadı.
Aşağıda 6 byte 48 bit var . byte-byte denediğimdeki sonucu bilgisayara gönderdiğimde tuhaf tuhaf karakterler çıkıyor. Acaba 48 bit bir bütün olup oradanmı stringe çevirmem gerek.
byte1;
byte2;
byte3;
byte4;
byte5;
byte6;
char seri_number[6],temp=0;
seri_number[0]=byte1;
seri_number[0]=byte2;
seri_number[0]=byte3;
seri_number[0]=byte4;
seri_number[0]=byte5;
seri_number[0]=byte6;
mantığıyla mı devam etmesi gerek devamı gelmiyor.
Alıntı yapılan: armsistem - 21 Eylül 2013, 09:41:54
Hocam yukarıdaki mantıkla yapabiliyorum ama şunu kafam almadı.
Aşağıda 6 byte 48 bit var . byte-byte denediğimdeki sonucu bilgisayara gönderdiğimde tuhaf tuhaf karakterler çıkıyor. Acaba 48 bit bir bütün olup oradanmı stringe çevirmem gerek.
byte1;
byte2;
byte3;
byte4;
byte5;
byte6;
char seri_number[6],temp=0;
seri_number[0]=byte1;
seri_number[0]=byte2;
seri_number[0]=byte3;
seri_number[0]=byte4;
seri_number[0]=byte5;
seri_number[0]=byte6;
mantığıyla mı devam etmesi gerek devamı gelmiyor.
Okuduğunuz 1 byte veriyi ascii ye cevirdiginizde elinizde 2 byte lik veriniz olur.
0x1BC gibi bir veriniz var bunun ascii karşılığı 'B'1 ci byte 'C' 2 ci byte
bunu göz önüne almanız gerekiyor.
char paket[32];
sprintf(paket"%X%X%X%X%X%X",data1,data2,data3,data4,data5,data6);//
Paketi seri porttan göndermeyi deneyin.