ADC den değer okurken frekans bozuluyor

Başlatan FUNKY, 11 Aralık 2009, 22:08:04

FUNKY

merhaba.

kod daki  dongü içerisinde porta.5 pininden bir T_on 200us olan 340 hz frekans üretirken AN.0 dan da 0- 5 v değeri okuyorum AN.0 a bağladığım pot un orta ucu +5 volta yakalaşırken  frekansta 10hz lik değişme oluyor.

bu sadece öğrenme sürecimde yaptığım deneme .

cevap şu olabilirmi   adc nin okuduğu değer arttıkca bunu  işleme zamanı da artıyor ondandır..ozaman nasıl birbirini etkilemesi giderilir ..
Device 16F870     
 Xtal 20                
Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_OFF,CP_OFF,CPD_OFF
Declare LCD_Type    = 0   
Declare	LCD_DTPin	=	PORTC.4
Declare	LCD_RSPin 	=	PORTC.0
Declare	LCD_ENPin	=	PORTC.3
Declare LCD_Lines 	=	 2
Declare LCD_Interface  = 4

Declare Adin_Res 10       ' 10-bit
Declare Adin_Tad 32_FOSC  ' AD conversion clock
Declare Adin_Stime 50    ' 
 PortB_Pullups On
 TRISA  =%00000001
 ADCON0 =%10000001             
 ADCON1 =%10000100
Dim temp2 As Byte
Dim temp1 As Word
Dim hamVolt As Word
Dim i As Byte
Dim toplam As Word     
Dim sonuc As Byte                
Symbol fr_pin = PORTA.5
'trisa.5=0 
 goo:
    High fr_pin
    DelayUS 200
    Low fr_pin
    DelayUS 10
    For i=1 To 10
    hamVolt = ADIn 0 
    DelayUS 50 
    toplam=toplam + hamVolt
    Next 
    toplam=toplam / 10
    temp1 = toplam * 0.097
   
    Print At 2,1,"adc:",Dec3 temp1 
    
    DelayUS 500
 
   GoTo goo

Klein

Basic'de arka planda işler nasıl yürüyor bilmiyorum.  
Sorun print ifadesinde olabilir.  Sayı büyüdükçe daha fazla dijit gösteriyor ve ekrana basılan her dijit zamanı biraz daha yavaşlatıyor olabilir.
Veya (çok ihtimal vermemekle birlikte) sayı küçükken , sayının üst 8 biti hiç işleme girmiyor, sayı büyüyünce üst 8 bit de işleme girince yavaşlama oluyor olabilir.
Ayrıca  For-Next döngüsüne girmeden önce toplam değişkeninin sıfırlandığı bir satır göremedim. Eğer bu değişkeni sıfırlamazsanız toplamm değişkeniniz sürekli şişecek , bu da değeri yanlış okumanıza sebep olacaktır.
Bu şekilde frekans üretmek doğru bir yöntem değil. Programda yapacağınız her değişim veya şart kullandığınızda şartın sonucuna göre yapılacak her işlem frekansınızı doğrudan etkileyecektir.
Ama öğrenme aşamasında olduğunuz için; kesme kullanın demek biraz fazla yüklenmek olur sanırım.