ADC Değerini LSB MSB ye ayırma

Başlatan er-da, 11 Ekim 2020, 21:37:43

er-da

ADC değeri  LSB ve MSB yi nasıl hesplarım


+5v a bağlı pot
seri  data göndereceğim adc deki pot  kapalı ise 0v
HSerOut [ adres,LSbyte,MSbyte]
                             00         00
pot ortada ise 2,5v
HSerOut [ adres,LSbyte,MSbyte]
                               $00         $40
pot tam acık ise 5v
HSerOut [ adres,LSbyte,MSbyte]
                             $7F         $7F

ilk defa MSB LSB ile  uğraşıyorum  anlatabilmişimdir inşallah 

ete

10 bitlik olan ADC değerinin okunmasında Word tipi 16 bitlik değişken kullanılır.
PBP ve aynı şekilde sanırım Proton Basic derleycisi bu değişkeni zaten otomatikman LowByte ve HighByte olarak ayırıyor.
BYTE0 or LOWBYTE, Create alias to low byte of word
BYTE1 or HIGHBYTE, Create alias to high byte of word

Bu özelliği sürekli olarak kullanırım ben.
Örnekle daha iyi açıklarız sanırım.
Diyelimki SAYI isimli bir Word değişkeni tanımladın. Bu otomatikman derleyici tarafından Değişken hafızasına SAYI.Byte1  (veya SAYI.HIGHByte) ve SAYI.Byte0 (Veya SAYI.LOWByte) olarak kayıt edilir. Sende istediğin zaman bu değişkeni iki ayrı byte şeklinde kullanabilirsin.
Kendin hesaplamak istersen;
SAYI.MSByte=SAYI/256
SAYI.LSByte=SAYI-(SAYI/256)*256
şeklinde hesaplanır.

Ete

er-da

Teşekkür ederim anladım hocam.

blueboard

#3
Alıntı yapılan: ete - 12 Ekim 2020, 08:22:0610 bitlik olan ADC değerinin okunmasında Word tipi 16 bitlik değişken kullanılır.
PBP ve aynı şekilde sanırım Proton Basic derleycisi bu değişkeni zaten otomatikman LowByte ve HighByte olarak ayırıyor.
BYTE0 or LOWBYTE, Create alias to low byte of word
BYTE1 or HIGHBYTE, Create alias to high byte of word

Bu özelliği sürekli olarak kullanırım ben.
Örnekle daha iyi açıklarız sanırım.
Diyelimki SAYI isimli bir Word değişkeni tanımladın. Bu otomatikman derleyici tarafından Değişken hafızasına SAYI.Byte1  (veya SAYI.HIGHByte) ve SAYI.Byte0 (Veya SAYI.LOWByte) olarak kayıt edilir. Sende istediğin zaman bu değişkeni iki ayrı byte şeklinde kullanabilirsin.
Kendin hesaplamak istersen;
SAYI.MSByte=SAYI/256
SAYI.LSByte=SAYI-(SAYI/256)*256
şeklinde hesaplanır.

Ete

Ete Hocam , ben tam olarak anlamadım.

Aşağıdaki gibi basit bir örnek vermeye çalışayım.


Konfigürasyon satırları..
...
...
TRISA=%00000001
..
HAMA VAR WORD
BASLA:
ADCIN0 , HAMA
Bu aşamadan sonra
SAYI.MSByte=SAYI/256
SAYI.LSByte=SAYI-(SAYI/256)*256  olarak belirttiniz.
SAYI.MSByte ve SAYI.LSByte değerini kendimiz hesaplamak için ne yapmamız gerekiyor?
SAYI.MSByte ve SAYI.LSByte şeklinde 2 adet değişken mi tanımlayacağız?
Burada SAYI olarak ifade edilen HAMA değeri midir?

Tam olarak program belirtmediğimdem Kod tag ile yazmadım. Umarım burada sorun yoktur.
Teşekkür ederim.

ete

Tavuk-yumurta hesabına döndü bu iş.
ADCIN 0,HAMA
şeklindeki komut 10 bit olarak ADC yi okuyacak.
Şayet PBP derleyici kullanıyor isen, İşlemci bunu zaten HAMA,Byte0 ve HAMA,Byte1 olarak ayırmış durumda.
Sana HAMA isimli değişkenin 8 er baytlık iki bileşeni lazım ise HAMA,Byte0 ve HAMA,Byte1 bu iki bileşendir. Ayrıca hesap yapmana gerek yok. BU değişkenleri tanımlamana da gerek yok çünki sistem bunları tanımlamış durumda zaten. Bunların hesaplanmış şekli zaten HAMA dır.

PBP da her bir word (16 bitlik) değişkeni bu şekilde 8er bitlik iki bileşene ayrılabilir. 8 er bitlik değişkenlerinde tanımlanması gerekmiyor. Sistem değişkeni olduklarını düşünün.

Tekrar ediyorm. ADCIN 0,HAMA şeklinde okunan bir ADC değerinde farzedelim HAMA=365 okunmuş olsun.
Bunu 2 byte olarak bir yerlere gönderecek isen;
HAMA,Byte1=1 ve HAMA,Byte0=109 olarak derleyici tarafından hesaplanıp bu değişkenlere yerleştirilir.
Sen yanlızca HAMA VAR WORD tanımlamasını yapacaksın diğerleri otomatik tanımlanmış olacak.
AYrıca hesap falan yapman da gerekmiyor.

Ete

Powered by EzPortal