Şimdi Ara

12 bit veriyi 8 bite dönüştürme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
9
Cevap
0
Favori
947
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • pic mikrodenetleyici 8 bit veri transferi yapabiliyor karşı tarafa ise 12 bit göndermek zorundayım



    unsigned int value1,value2;
    unsigned short data1,data2;
    .
    .

    void main()
    {
    value1=2157; // 00001000 01101101 binary
    data1=value1; // 01101101 8 bitlik paket hazır yarım bayt+yarım bayt ile 1 bayt yapmak istiyorum

    value1=value1>>8; //00000000 00001000

    value2=3400; //00001101 01001000
    value2=value2>>4; //00000000 11010100

    }

    burada value2 değişkeninden 1101 bölümü ile value1 değişkeninden 1000 bölümünü birleştirip 1101 1000 olarak 1 bayt yapmak istiyorum. C dilinde yapılabilir mi?



  • value2 değerini 11110000 ile & işlemine sokun, value1 value2 toplama yapın, shorta atama yapın soldaki bitler kaybolsun.
  • 2 tane 8 göndersen olmuyor mu?
  • Bit-shifting yaparken 0xff ile and yapmayı unutmayın. (& 0xff) :)



    < Bu mesaj bu kişi tarafından değiştirildi Dentrax -- 3 Ağustos 2017; 19:54:29 >
  • denedim ama farklı sonuç verdi.

    son durumda;

    value1=2157; // 00001000 01101101 binary
    data1=value1; // 01101101 8 bitlik 1. paket

    value1=value1>>8; //00000000 00001000

    value2=3400; //00001101 01001000
    value2=value2>>8; //00000000 00001101
    value2=value2<<4; //00000000 11010000

    data2=value1+value2; //1101 1000

    2 gündür kafayı sıyırdım yüzüp kuyruğuna gelip bırakmışım
  • maalesef toplamda 288 bit 36 byte veriyi uç uca ekleyerek göndermeliyim
  • Picte 12 bit veri ancak iki tane registerda tutulabilir. Atıyorum bu bir adc verisi ise bir adc_high, bir de adcl_low vardır. Bunları ayrı ayrı kullanırsan hem kolay olur hem hafıza şişmez.

    3'er bytelık gruplar halinde yollayabilirsin. l-h|h-l şeklinde.

    unsigned short data;

    gönder(low); // 1. low
    data = high & 0x0F; // 1. high
    data |= high << 4; // 2. high
    gönder(data);
    gönder(low); // 2. low

    Başa dön. 12 kere tekrar et.
  • Soru çok önce sorulmuş ama fikir vermesi açısından istenilen değişkenin herhangi adres hücresine gidip buraya yeni değer geçirmek mümkün

     
    // Arduino platformunda int 2 Byte 2x8=16 bit

    // 5000: 0001 0011 1000 1000
    // ( 19 ) ( 136 )


    int a(5000);

    void setup() {

    Serial.begin(9600);
    Serial.println(a);
    Serial.println((int)&a);

    for ( int i = 0 ; i <sizeof(int) ; i++ ) {

    // if (i==0) *(byte*)(((byte*)&a)+i)=0;
    if (i==1) *(byte*)(((byte*)&a)+i)=1;

    }

    Serial.print("a nin son deger: "); Serial.print(a); // 392= 0000 0001 1000 1000
    // ( 1 ) ( 136 )
    }


    void loop() {


    }


    kodda int değişkenin herhangi 8 bitlik kısmını manipüle ederek yeni değerimizi geçirdik bu sayede a değişkenin değeride değişmiş oldu




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.