Haberler:

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

Ana Menü

Bit Byte LSB MSB?

Başlatan Firzen, 22 Mayıs 2022, 18:19:57

Firzen

Her ne kadar elektronik çıkışlı da olsam. Unuttuğum bilmediğim bazı soruları sizlerle de paylaşmak istedim;

Micropython ile kütüphane yazmaya çalışıyorum (Örn: BMP180)

I2C pinlerini ayarla
I2C tarama yap
Sensörün I2C adresini bul

Daha sonra MSB biti için okuma ardından LSB için okuma yap

Eğer doğruysam

Sorum şu:

msb = i2c.readfrom_mem(BMP_180_ADDR, BMP_180_ADDR, addrsize)
buradaki "address size" olayı nedir? Neye göre belirliyorum?

(msb << 8) + lsb
Buradaki shift register yaparken 8 sayısı sabit mi? yani ben hep 8 bit kaydırma mı yapıyorum?


Bu kütüphaneyi yazmak için okuduğumda 16bit data diyor. Bunun için 8 i 16'ya çevirmeme gerek yok mu?

Bu Digital sistemler gerçekten kafamı karıştırdı. Genelde ADC verisi benim için yeterli oluyordu veya hazır yazılmış kütüphaneler. Artık biraz daha derinlemesine öğrenmek istiyorum.

Kararsız...

z

(msb << 8) + lsb

MSB yi 8 bit sola kaydirinca 16 bit alanin ust 8 bitine MSB yazmis oluyorsun. Bunun saginda kalan 8 bit bosluga da toplama islemi ile LSB yi yerlestirmis oluyorsun.

Sonucta MSB ve LSB paketlenip tek 16 bit veriye donusmus oluyor.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Sozuak

#2
Veri yolu 8 bit ama işlemci 16 bit ise aynı veri yolundan 2 defada 8+8 bit okuyup yazarak 16 biti elde edersin.

LSB  Least Significant Bit yani en düşük değerlikli 8 bitlik veri kısmı
MSB  Most Significant Bit  yani en yüksek değerlikli 8 bitlik veri kısmı

Eğer sistem 32 bit ama veri yolu 16 bit ise  16+16 şeklindedir. ille de 8 bit olacak diye kural yok.

Anlamında.

yani  sen  13504567 sayısını  2 parçada okursan 1350 MSB  olan kısımdır  yani 13500000 birim  değerindedir,  4567 ise LSB olan kısımdır 4567 birim değerindedir.

Firzen

Anladım.

msb = i2c..read_byte_data(BMP_180_ADDR, BMP_180_ADDR)

msb = i2c.readfrom_mem(BMP_180_ADDR, DATA_REG, addrsize)

bunun arasındaki fark nedir. Birisini Raspberry Pi 4'den diğerini de Raspberry Pi Pico dan. "addrsize" muhabbeti nedir peki?
Kararsız...

sadogan

#4
 "BMP_180_ADDR, DATA_REG" bu adres dahil kaç byte okunacağı anlamında.

Firzen

Alıntı yapılan: sadogan - 23 Mayıs 2022, 00:13:51"BMP_180_ADDR, DATA_REG" bu adres dahil kaç byte okunacağı anlamında.

0x77, 0xF6 + okunacak bit mi?
O zaman 4 + 4 + okunacak byte olmaz mı?
Kararsız...

z

msb = i2c.readfrom_mem(BMP_180_ADDR, BMP_180_ADDR, addrsize)

Soruna cevap verebilmek icin kutuphaneyi tanimak lazim.

Eger i2c.readfrom_mem fonksiyonu varsa onu gormek lazim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

volkanunal

#8
Alıntı yapılan: Firzen - 22 Mayıs 2022, 21:35:33Anladım.

msb = i2c..read_byte_data(BMP_180_ADDR, BMP_180_ADDR)

msb = i2c.readfrom_mem(BMP_180_ADDR, DATA_REG, addrsize)

bunun arasındaki fark nedir. Birisini Raspberry Pi 4'den diğerini de Raspberry Pi Pico dan. "addrsize" muhabbeti nedir peki?


İsimlendirme yapısı bir çok platforma oldukça yakın, örneğin stm32 için HAL_I2C_Master_Transmit, HAL_I2C_mem_write gibi fonksiyonlar mevcut (isimlerinin typosu yanlış olabilir.)

read_byte_data -> Şu fonksiyon için konuşacak olursak, şöyle bir frame yapısı mevcut diyebiliriz.

/**
 *
 * ______________________________________________________________________
 * | start | slave_addr + rd_bit | read n-1 bytes  | read 1 byte  | stop |
 * --------|---------------------|---------------- |--------------|------|
 *
 */


i2c.readfrom_mem -> Şu fonksiyon için konuşacak olursak ise, kabaca şöyle bir frame yapısı var.
/**
 *
 * _____________________________________________________________________________________________________________________
 * | start | slave_addr + wr_bit | Memory address | start | slave_addr + rd_bit | read n-1 bytes  | read 1 byte  | stop |
 * --------|---------------------|----------------|-------|---------------------|-----------------|--------------|-------
 *
 */


Yani mem fonksiyonları register tabanlı bir erişim sağlıyor ve örneğin okuma yapmadan önce kendisi yazarak okuma yapıyor. Diğerleri ise basit anlamda bir yazma, okuma yapıyor.

Primum nil nocere

Firzen

#9
Burada sormak istediğim Kodu Raspberry Pi ile yazarken
msb = i2c.read_byte_data(BMP_180_ADDR, DATA_REG)

Raspberry Pi Pico ile yazarken
msb = i2c.readfrom_mem(BMP_180_ADDR, DATA_REG, addrsize)

yazmamızı ima etmiştim ama teşekkür ederim cevaplar için. Çalışma mantığı yapısını yavaş yavaş çözmeye başladım.

23 Mayıs 2022, 18:27:01
Alıntı yapılan: mehmet - 23 Mayıs 2022, 09:17:13https://github.com/micropython

Ah hocam ingilizce biliyor olmama rağmen temel eksiği olduğu için zaten burada soru soruyorum.

23 Mayıs 2022, 18:27:38
Alıntı yapılan: z - 23 Mayıs 2022, 08:37:52msb = i2c.readfrom_mem(BMP_180_ADDR, BMP_180_ADDR, addrsize)

Soruna cevap verebilmek icin kutuphaneyi tanimak lazim.

Eger i2c.readfrom_mem fonksiyonu varsa onu gormek lazim.

Aynen dediğiniz gibi yapıyorum şuan datasheetlerden sensör özelliklerine bakarak yazmaya çalışıyorum
Kararsız...