12f675 te ADC ayarı

Başlatan SERCE, 28 Mart 2012, 19:25:14

SERCE

Merhaba arkadaslar küçük sinyal çıkışları olan bir cihazı ADC olarak 12f675 e okutmak istiyorum.Programı belli bir
düzeye getirdim.Program gelen sinyalleri okuyor fakat tam bir istikrar sağlanmıyor.Çünkü gelen sinyalleri pıc in düzenli okuyup istenilen
sinyal değeriyle çıkış vermesi gerekirken ya ilk gelen sinyalle çıkış veriyor ya düzenli okuyor yada gelen  sinyalleri atlatarak okumaktadır.
Acaba sorun ADC ayarında mı sorun var? 

SERCE

programı gönderitorum belki daha anlaşılır.
Device=12F675
DEFINE OSCCAL_1K 1         
  Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_OFF, BODEN_OFF, CP_OFF, MCLRE_OFF
\'***************************************************************************
Declare Adin_Res   10
Declare Adin_Tad   FRC         
Declare Adin_Stime   50
\'*****************************************************************************
TRISIO = %00000100     
CMCON = %00000111 
ANSEL=%00000100           
ADCON0=%10000000           
GPIO=0           
GPIO.2=0           
Dim DEGER As Word
Dim HAM   As Word
Dim SAYI  As Word
Dim sinyal As Word
HAM=0
BASLA:
GPIO.0=0:GPIO.1=0:GPIO.2=0:HAM=0
DelayMS 200               
ADCIN 2,HAM
If HAM >=500 Then
sinyal=sinyal+1
GPIO.0=1:DelayMS  350:GPIO.0=0
EndIf
If sinyal>=1500 Then
sinyal=0
EndIf
If sinyal=3 Then
GPIO.1=1:DelayMS  1000:GPIO.1=0:sinyal=0
EndIf
GoTo BASLA

ibrsel

#2
Programında mantık hatası var gibi..



Analog girişten okunan HAM değeri 500 den büyükse sinyal değerini arttır demişsin.(1 Nolu işaretli yer)

3. İf döngüsünde sinyal değişkeni 3 ise sinyal değerini tekrar sıfırlamışsın. (3 nolu işaretli yer)
Böylelikle 2. İf döngün hiçbir  işe yaramamış oluyor.
İlk gördüğüm bu..Birde analog giriş olarak nasıl bir sinyal okutuyorsun..Bununla ilgili bağlantılarını veya ayrıntılarıda verir isen daha iyi yardımcı olunur..

Ayrıca analog değer okuturken ortalama alarak okutur isen daha hassas ölçüm yapabilirsin. Örneğin 100 ölçüm yapıp toplam değeri 100 e bölerek daha sağlıklı sonuç alırsın.. Analog ölçüm yapan komuttan sonra bir kaç ms bekleme yapmanda fayda.


SERCE

ibrsel gösterdiğin ilgiden dolayı teşekürler belirttiğin noktaları düzeltip deneyeceğim.
Bu arada elimdeki cihazın sinyali hemen hemen saat sinyaline yakındır.Zaten verdiğim
değer ortalamadır.

SERCE

Program hakındaki belirtiğiniz mantık hatalarını düzeltim ama program çıkılmaz hale geldi.
Çünkü devre gelen sinyalleri okuyamaz hale geldi.Başka bilgisi olan yokmu?

Maxim


ibrsel

Alıntı YapBu arada elimdeki cihazın sinyali hemen hemen saat sinyaline yakındır.Zaten verdiğim
değer ortalamadır.

Burada anlayamadığım birşey var..Okuttuğum sinyal saat sinyaline (kare dalga) yakın demişsin..Sen Saat sinyalinden kaç pals geldiğinimi okutmaya çalışıyorsun..Devre şemanı ve dış ortamdan okutmaya çalıştığın sinyal hakkında ayrıntılı bilgi verir isen daha iyi yardımcı olunur..

Biliyorsun PİC in analog girişinden MAX 5V büyüklüğünde sinyalleri okutabiliyorsun.Eğer okutacağın sinyalin MAX değeri 5V tan büyük ise gerilim bölücü dirençler ile orantı kurarak 5V olacak şekilde devreni kurmalısın..Diyelimki okutacağın değer 10V. İki adet 1K lık direnci seri bağlayıp Üstteki direncin üst ucuna +10V,alttaki direncin alt ucuna şase,iki direncin birleşim ucunuda PIC in analog girişine bağladın diyelim...

Programında 10bit çözünürlük ile analog sinyal okutmuşsun.  Okuduğun analog sinyalin HAM değişkenine aktarılıyor.(programına göre). Ham değeri 1024 ise bu senin analog sinyalinin 10V olduğunu gösterir. HAM değerin 512 ise dışarıdan okuduğun değer 5V demektir..

Bu bilgiler doğrultusunda yapmak istediğin işi ayrıntılı anlatır ve devre şemanı da paylaşır isen hatalarını daha iyi inceleyebiliriz..


SERCE

Program hemen hemen gösterdiğim gibidir.Ben ayarlanan zamandaki alarm sinyalinin sonucunda çıkan voltaj değerini
pıc e okutmaya çalışmaktayım.Alarm çaldığı zaman ortaya çıkan voltaj değeri hemen hemen 5 v yakın tabiki bu voltaj
değeri değişmektedir.Acaba diyorum ADC ayarlarında sorun olmasın çünkü bu ayarlardan pek emin değilim. 

ibrsel

O zaman öncelikle analog girişine bir POT bağlayarak programını ve devreni test et derim..Örneğin okuduğun değer 512 den büyük ise bir ledi yak gibi..

ali_29

12f675 serisinde adc okumak için ayrı bir rutin yapmak gerekir diye biliyorum.
ben aşağıdaki örnekte olduğu gibi çözdüm umarım faydası olur.

Device 12F675
Xtal 4
Config INTRC_OSC_NOCLKOUT,MCLRE_OFF,WDT_OFF

Dim kanal1 As Word
Dim kanal2 As Word
Dim AD_RESULT As ADRESL.Word
Dim Sabit_1 As Word
Dim Sabit_2 As Word
TRISIO = %00011111            
        ANSEL.4 = 1                  ' \
        ANSEL.5 = 1                  '   Setup ADC's clock for FRC
        ANSEL.6 = 0                  ' /
        ADCON0.6 = 0                  ' VREF is set to VDD of PICmicro
        ADCON0.7 = 1                  ' Right justify the ADC result
        ANSEL.0 = 1                  ' Set AN0 (GPIO.0) as analaog input
        ANSEL.1 = 1                  ' Set AN1 (GPIO.1) as analaog input
        ANSEL.2 = 0                  ' Set AN2 (GPIO.2) as Digital  input
        ANSEL.3 = 0                  ' Set AN3 (GPIO.3) as Digital  input
Low GPIO.5       
Low GPIO.4
       
Basla:   
    ADCON0.2 = 0 '\
                  'BİRİNCİ ANALOG KANAL AKTİF
    ADCON0.3 = 0 '/   
   
    GoSub kanal_1
    kanal1 = AD_RESULT  'OKUNAN KANALI kanal1 E AKTAR
   
    ADCON0.2 = 1 '\
                  'BİRİNCİ ANALOG KANAL AKTİF
    ADCON0.3 = 0 '/
    GoSub kanal_1
    kanal2 = AD_RESULT  'OKUNAN KANALI kanal1 E AKTAR   
            
If kanal1 < kanal2 Then
High GPIO.5
End If

If kanal1 > kanal2 Then
Low GPIO.5
End If   

GoTo Basla       
   
kanal_1:

        ADCON0.0 = 1                  ' Enable the ADC
        DelayUS 50                    ' Wait for sample/hold capacitors to charge
        ADCON0.1 = 1                     ' Start conversion
      While ADCON0.1 = 1 : Wend      ' Poll the GO_DONE flag for completion of conversion
        ADCON0.0 = 0                  ' Disable the ADC, to save power
        Return