Analog Ölçüm Hatası

Başlatan hakkican84, 25 Ocak 2011, 00:02:11

hakkican84

Merhaba;

18F452 ile iki 10K lık 2 pot dan oluşan joystick i 10 bit olarak okumaya çalışıyorum. Joystick orta konumdayken sorun yok. Okuduğum değerler 512 civarında. Sorun joystick i hareket ettirince başlıyor. sona ulaşmadan, çok kısa mesafede maksimum ve minimum değerlere ulaşıyor. Timer hatası olabilir diye tüm timer seçeneklerini  denedim sonuç yine aynı ( DECLARE ADIN_TAD 2_FOSC , 8_FOSC , 32_FOSC , or FRC. )
Hata nerede olabilir ???
Device=18F452
XTAL 20

ADIN_RES = 10 		' 10-bit 
ADIN_TAD   2_fosc			
ADIN_STIME = 50 			
ADCON1=%10000000   
Include "modedefs.bas"
DEFINE OSC 20' serout komutu icin

Input PORTA
Output PORTB

Dim    i           As Byte   
Dim  angtotalx     As Word  
Dim  angtotaly     As Word  
Dim  avrgx         As Word   
Dim  avrgy         As Word   

  

main: '______________________________________________________________________ 
    angtotalx=0
    angtotaly=0
    
    For i=0 To 15         '16 kez oku analogtan ortalamasını al
        angtotalx=(angtotalx + ADIn 0) 
        angtotaly=(angtotaly + ADIn 1)
    Next i    
        
    avrgx=(angtotalx / 16)    
    avrgy=(angtotaly / 16)
    SerOut PORTB.7 , T9600 , ["Degerler  X:",#avrgx,"  Y:",#avrgy,13,10]	
    DelayUS 1000
    'değerleri görmek için seri porta yazdırıyorum
GoTo main

Maxim

analog girislerde kondansator varmıdır?

ErsinErce

TRIS ayarlarına bir bakmanı öneririm, ayrıca modedefs dosyasının içinden sana lazım olanları al sadece

hakkican84

analog girişlerde kondanstör yok. Pot un bir ucu (+5v) diğeri (-) ortadaki ölçüm yapılacak uç doğrudan pic in analog pinine bağlı

Input PORTA ve Output PORTB komutları Tris ayarını yapmıyor mu? modedefs.bas dosyasının tamamını eklemenin böyle bir hataya sebep olacağını sanmıyorum. Daha önce hiç karşılaşmadım. ???

FUNKY

oncelikle donanımı kontrol etmende fayda var  ilk yapacağın  potun orta ucuyla  - arasına dcv metre bağlayıp cubuk ortada olmasından dolayı 2,5dcv okuyormusun  ikinci olarak  cubuğu  ne kadar oynattığında 5 v okuyorsun   en ideali cubuk  bir tarafa dayanana kadar linear şekilde voltajın artmasıdır  az bi oynatınca 5dcv okunuyorsa  yazılımın yapacağı birşey yok kolay gelsin

Maxim

bir kere bu kodlar basic değil ,proton plus
o yüzden olması gereken yere taşıyorum

Maxim

bu kodlar ile çalışması lazım
birde adc girişlerine şase ile arasına 100nf bağlayın ve sinyali seri 10k direnç üzerinden girin .

Device=18F452
Xtal 20
Include "modedefs.bas" 

Declare Adin_Res = 10 		' 10-bit 
Declare Adin_Tad frc			
Declare Adin_Stime = 50 			
ADCON1=%10000000   

Input PORTA
Output PORTB

Dim    i           As Byte   
Dim  angtotalx     As Word  
Dim  angtotaly     As Word  
Dim  avrgx         As Word   
Dim  avrgy         As Word   

  
main: 
    angtotalx=0
    angtotaly=0
    
    For i=0 To 15  '16 kez oku analogtan ortalamasını al
        angtotalx=(angtotalx + ADIn 0) 
        angtotaly=(angtotaly + ADIn 1)
    Next i    
        
    avrgx=(angtotalx / 16)    
    avrgy=(angtotaly / 16)
    
    SerOut PORTB.7 , T9600 , ["Degerler  X:",#avrgx,"  Y:",#avrgy,13,10]	
    DelayUS 1000
    'değerleri görmek için seri porta yazdırıyorum
GoTo main

hakkican84

En kısa zamanda deneyip sonucu yazarım. TŞK

hakkican84

Alıntı yapılan: FUNKY - 27 Ocak 2011, 14:24:09
oncelikle donanımı kontrol etmende fayda var  ilk yapacağın  potun orta ucuyla  - arasına dcv metre bağlayıp cubuk ortada olmasından dolayı 2,5dcv okuyormusun  ikinci olarak  cubuğu  ne kadar oynattığında 5 v okuyorsun   en ideali cubuk  bir tarafa dayanana kadar linear şekilde voltajın artmasıdır  az bi oynatınca 5dcv okunuyorsa  yazılımın yapacağı birşey yok kolay gelsin

Günlerdir uğraşıyorum. Hata pot da çıktı. Sona dayanmadan 5v ve 0v a ulaşıyor. Bu durumda 100 nf kondanstorun de bir etkisi olmayacak. Kodda sorun yok.
Teşekkürler