Adin 0 ile okuma

Başlatan pcb, 17 Nisan 2007, 11:39:35

pcb

merhaba,
picbasic pro da okuma Adcin ile yapılıyordu 1 e karşılık gelen değer ise 255 di , Picbasic plus da ise okuma Adin ile yapılıyor ve gördüğüm kadarıyla 1 in karşılığı 65472 bu bana yüksek geldi. Diğer yabancı kaynaklı sitelerde yine 255 diye okudum ama sizlerin bilginizden faydalanmak istedim.

Sizce de 65472 mi ?

Maxim

8 bit okuma yaparsan 255 ,
10 bit okuma 1023 ,
12 bit ise 4096 dır ,
bu senin seçtiğin pic e göre değişiyor ,mesela 16F877 de 10 bit okuma yapabilirsin en fazla .

pcb

anlıyorum, benim yaptığım okuma kaç bit onu anlayamadım

sitenindelisi

Kodları incelemek lazım aslında ama sanırım sorun, word tipinde tanımlanmış değişken içeriğinin negatife gitmesi.

pcb

ADC (Adin) 8 bit lik-10 bitlik okumanın nasıl tanımlacağını yazarmısınız

mesela benim kodlarım da bunlardan başka bir tanım yok, geri kalan döngüler

Device=16F877
Include "PROTON_20.INC"

Maxim

10 bit ADC,


'****************************************************************
'*  Name    : 10bit_adc.BAS                                     *
'*  Author  : MaxiBoost                                         *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 22.04.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
device 16f877
xtal 4

Declare   LCD_DTPIN	PortB.4
Declare	LCD_RSPIN	portb.2 'Pin35 -Portb.2
Declare	LCD_ENPIN	portb.3 'Pin36 -Portb.3
Declare	LCD_INTERFACE	4
Declare	LCD_LINES	2

delayms 500
cls

TRISA=%00000001
trisb=%00000000
ADCON1=%10000000

Declare ADIN_RES	10
Declare ADIN_TAD	FRC
Declare ADIN_STIME	50

DIM HAM1 AS WORD
DIM HAM2 AS FLOAT

loop:

ADCIN 0,HAM1  'Pin2 -Porta.0
ham2=ham1
ham2=ham2 + 1
ham2=ham2 * 5 /1024
print at 1,1,dec HAM1 ," Ham Deger"," "
PRINT at 2,1,dec2 ham2 ," Volt"

delayms 250

goto loop

pcb

programa Declare ADIN_RES   10 eklediğim zaman çevirinin 1023 veya 8 yaptığım da 255 olduğunu gördüm. teşekkür ederim.

okuma döngüsünün çok hızlı yani DelayMs   100 yaptığımda ekrandan rakamların takibi çok zor, sorun ekrandan okumanın zor olması değil de  bu hızlı okuma sürecinde aynı noktayıda ölçü aletinden takip ederken voltajın hiç bir zaman 4V-5V a yükselmedğini görmeme rağmen nasılsa program voltajı 4-5 e yükseldiğini eklediğim bir satır il haber veriyor buda dengesizliği ortaya çıkarıyor.

örneğin:

oku=adin   0
if   oku=125    or oku>125   then  ....ekrana a yaz a git
if   oku=200   or  oku>200   then ..... ekrana b yaz
ıf   oku=255   or  oku>255   then  ....ekrana c yaz

gibi kodlarda zaman zaman 2.5V u ölçü aletinden takip ederken birden çok kısa bir süre için 200-255 olduğunu görüyorum. döngü süresini uzatmama rağmen yine de birşekilde 200-255 görülüyor. bu nasıl oluyor anlayamadım. Ölçü aletleri efektif öçlme yapar ancak sonuçta ölçü aletlerinde de bir ADC çevirici var. Sorun sizce nedir ? Pic basic pro da ADC çevirim yaparken PB-plus gibi sıçramalar görmedim.

Maxim

Declare ADIN_STIME   50

ile oynayabilirsin ,


""
DECLARE ADIN_STIME 0 to 65535 microseconds (us).

Allows the internal capacitors to fully charge before a sample is taken. This may be a value from 0 to 65535 microseconds (us). A value too small may result in a reduction of resolution. While too large a value will result in poor conversion speeds without any extra resolution being attained.

A typical value for ADIN_STIME is 50 to 100. This allows adequate charge time without loosing too much conversion speed. But experimentation will produce the right value for your particular requirement. The default value if the declare is not used in the BASIC listing is 50. ""

normal değeri 50 ile 100 arasında kullanılıyormuş ,
çok düşük ise çok hızlı ,yüksek ise yavaş bir okuma oluşuyor .
örnek olarak 250 dene istersen .

Ölçü aleti ADC nin yanında yavaş kalıyordur ,o yüzden sen göremiyorsun anlık voltaj yükselmelerini .

aslan_korhan

if oku=200 or oku>200 then ..... ekrana b yaz     yerine

if oku=>200 then ..... ekrana b yaz        de yazabilirsin.

Sadece gözüme çarptı ve belirteyim dedim...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

sitenindelisi

Hatta Üstadım,
If oku>199 then ...

derseniz dahada kısalır gibi geliyor. ;)

pcb

ADC okumada 255 veya 1023 gibi kısıtlamalar yaptık ama hala okunan değer ara sıra ölçü aletinde görünen den farklı olarak yukarı sıçramalar yapıyor. Acaba ADC çevirici entegrelere mi kullanmak lazım sizce ?

Maxim

Alıntı yapılan: "pcb"ADC okumada 255 veya 1023 gibi kısıtlamalar yaptık ama hala okunan değer ara sıra ölçü aletinde görünen den farklı olarak yukarı sıçramalar yapıyor. Acaba ADC çevirici entegrelere mi kullanmak lazım sizce ?

Hayır gerekmiyor ,bence başka sorun var ,

-besleme ne durumda ?
regülelimi ? pil ile denedinizmi ?
adc referans olarak besleme voltajını kullanıyor yukarıdaki kod da,
eğer besleme düzgün değilse yada bağlantılarda temas sorunları varsa
adc sapıtıyor olabilir .

-pic in besleme uçlarında 100 nf varmı ?