7 segment adc okumada sıkıntı...

Başlatan dedim, 20 Ocak 2014, 20:19:19

dedim

Device = 16F88
Xtal 8
@CONFIG_REQ
@__CONFIG _CONFIG1, INTRC_IO & WDT_OFF & PWRTE_OFF & BODEN_OFF & MCLR_OFF & LVP_OFF & CP_OFF & CPD_OFF & DEBUG_OFF & CCP1_RB3
@__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF

Declare Adin_Res 10       
Declare Adin_Tad FRC     
Declare Adin_Stime 50

Dim ADC0 As Word
Dim VER As Byte

Clear
PORTA=0
PORTB=0
OSCCON=%01111000 '8 Mhz
ANSEL = 1
ADCON1=%10000000
CMCON = 7 'COMPARATORS OFF
INTCON = 0 ;Disable interrupts
TRISB = 0
TRISA = 1
High PORTA.6
High PORTA.7
DelayMS 250

BASLA:
    ADIn 0,ADC0 
    ADC0=(ADC0*/25)
       
    VER=Dig ADC0,0
    GoSub TABLO
    Low PORTA.7
    DelayMS 5
    High PORTA.7
   
    VER=Dig ADC0,1
    GoSub TABLO
    Low PORTA.6
    DelayMS 5
    High PORTA.6
GoTo BASLA


TABLO:
    PORTB=LookUpL VER,[63,6,91,79,102,109,125,7,127,111,99,88,64,80]
    '                 [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ,c ,- ,r ]
    Return
   
    End




ete hocam bu yazılım proton biliyorum ama gercekte yaptım.birler hanesi sürekli oynuyor.ne yaptıysam bu 1 ler hanesinin oynamasını bir türlü düzeltemedim.sıvı seviye göstergesi olarak küçük bir tankı  ölçecek.adc girişine bir pil baglıyorum.sabit kalabiliyor.ama besleme kısmına 100nf picin besleme girişlerine 100nf adc okuyan pin ile gnd arasına 100nf attım.ama halen dalgalanıyor.sorun besleme voltajımdan kaynaklanabilir mi?bilgisayar  power supply den bozma bir masa üstü güç kaynagım var sebebi besleme olabilir mi ustam.ekte semasınıda gönderiyorum

ete

Gel bir göz kırpma yok ve yalnızca birler hanesi oynuyorsa güç kaynağında sorun var demektir. Referans gerilimi sabit olmaz ise okunan değerler sürekli inip çıkabilir.
Display başına 5 ms bekleme vermişsin buda biraz fazla 2 ms den fazla verme.
Ete

dedim

ustam 2 ms verdim.hatta 1 de verdim ama bu seferde displayle sönuk kalıyor acaba tranzistörlemı sürsem bu ucları.ustam birde benım besleme kaynagım dedigim gibi pc power supply den bozma cıkısını ölçüyorum12.1 volt gösteriyor.7805 cıkısını ölçüyorum 4.96 volt gösteriyor.dediginiz gibi her yerde 100nf var ama gel gelelim bu birler hanesi halen oynamaya devam ediyor.

İlyas KAYA

Besleme tam doğru değilse okuma süresini uzatmayı deneyin.
Bir sayaç saydırın ve bu sayac 20 olduğunda adcin komutu çalışsın. 20 Rakamını değiştirerek deneme yapın.
Böylece çok kısa süreli inme ve çıkmaları okumamış olursunuz.



SAYAC VAR BYTE

BASLA:
sayac=sayac+1

IF sayac>=20 then
    ADIn 0,ADC0 
    ADC0=(ADC0*/25)
sayac=0
ENDIF

       
    VER=Dig ADC0,0
    GoSub TABLO
    Low PORTA.7
    DelayMS 5
    High PORTA.7
   
    VER=Dig ADC0,1
    GoSub TABLO
    Low PORTA.6
    DelayMS 5
    High PORTA.6

GoTo BASLA
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Switching güç kaynağı devreye puls veriyorsa bu palsların geldiği anlarda sistem ref volatjı yüksleiyor olabilir. Bu nedenle peryodik olarak çalışan bu sistemi bozmak için İlyas'ın önerdiği yöntem yararlı olacaktır.
20 değeri ile oynayarak en oynamasız bir değeri tespit edebilirsin. Örnek veriyorum. Şu anda her program çevriminde bir okuma yapıyorsun. Belkide bir yüksek bir alçak okuma yapıyordur sistem. Önce bunu tespit etmek lazım. Kaç okumada bir normal okuma yapabileceksin.

Ilyasın veridği örnekte yer alan 20 rakamını önce 1 yap, duruma bak sonra 2 yap duruma bak sonra 3... zaten muhtemelen 10 okumaya gelinceye kadar şayet böyle aksak bir durum var ise tespit etmiş olursun.
Sonra en uygun değeri verip işini hallet.
Bir diğer önerilecek yöntem de, Okunanları eproma sıra ile kayıt etmek ve kayıt adedi 255 olduğunda programı durdurmak olabilir.
Sonra işlemciyi programnlayıcıya takıp epromu incele ve bak bakalım hangi aralıklarda düşük yada yüksek okuma yapıyor sistem. Bana kalırsa 10 bitlik ADC değerinin yalnızca LOW Byte değerini kayıt et.

Ete

dedim

könce ilyasın verdigi örmek üzerinde calısayım.olmaz ise sizin dediginiz gibi önce eproma kayıt edeyim.255 oldugun da da bakayım.dediginiz gibi low byte lerı kayıt edip inceleyeyim.verdiginiz bilgiler için tesekkür ederim.

dedim

ilyas usta
vermiş oldugunuz örnekte hiç okuma yapamıyor. ekranda 00 degeri kalıyor.öylecene sayac degerini ete ustanın dedigi gibi 1 er 1er arttırdım.ekranda deger sabir kalıyor bu seferde.

İlyas KAYA

Alıntı yapılan: dedim - 23 Ocak 2014, 00:42:06
ilyas usta
vermiş oldugunuz örnekte hiç okuma yapamıyor. ekranda 00 degeri kalıyor.öylecene sayac degerini ete ustanın dedigi gibi 1 er 1er arttırdım.ekranda deger sabir kalıyor bu seferde.

Kodlarınızda bir hata olabilir.Kodlar PBP değil Proton sanırım.
Kodları denemedim yada incelemedim sadece örnekleme yaparak mantık gösterdim.

Diğer bir mantık ise ; 10 tane okuma yapıp bu 10 okumanın ortalamasını almak.
5 de olabilir.

saygılarımla.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

dedim

ortalamada da aynı hatayı aldım ilyas ustam.devrenin kartında sıkıntıda yok ama ben yine kart basıp displayleri transistörle sürmeyi deneyecegim.yardımlarınız için ete ustama ve sana tesekkür ederim.

ete

Ilyas'ın kodlarının çalışması gerek. Mutlaka değişken tanımlamada word yerine byte tanımlanmıştır.
Kontrol et. Kodları vermeyince bize ahkam kesmek düşüyor maalesef.
Ete

dedim

Device = 16F88
Xtal 8
@CONFIG_REQ
@__CONFIG _CONFIG1, INTRC_IO & WDT_OFF & PWRTE_OFF & BODEN_OFF & MCLR_OFF & LVP_OFF & CP_OFF & CPD_OFF & DEBUG_OFF & CCP1_RB3
@__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF

Declare Adin_Res 10       
Declare Adin_Tad FRC     
Declare Adin_Stime 50

Dim ADC0 As Word
Dim VER As Byte
Dim SAYAC As Byte








Clear
PORTA=0
PORTB=0
OSCCON=%01111000 '8 Mhz
ANSEL = 1
ADCON1=%10000000
CMCON = 7 'COMPARATORS OFF
INTCON = 0 ;Disable interrupts
TRISB = 0
TRISA = 1
High PORTA.6
High PORTA.7
DelayMS 250



BASLA:
SAYAC=sayac+1
If SAYAC>=20 Then
    ADIn 0,ADC0 
    ADC0=(ADC0*/25)
SAYAC=0
EndIf
       
    VER=Dig ADC0,0
    GoSub TABLO
    Low PORTA.7
    DelayMS 5
    High PORTA.7
   
    VER=Dig ADC0,1
    GoSub TABLO
    Low PORTA.6
    DelayMS 5
    High PORTA.6

GoTo BASLA


TABLO:
    PORTB=LookUpL VER,[63,6,91,79,102,109,125,7,127,111]
    '                 [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ]
    Return
   
    End




ete ustam bu sekilde isisde calısıyor.gercekte deneyemedim henuz devre evde olunca aksama deneme yapar yine yazarım ustam.hata bende imiş.nerde oldugunu buldum.

BASLA:
SAYAC=sayac+1
If SAYAC>=20 Then
    ADIn 0,ADC0 
    ADC0=(ADC0*/25)
SAYAC=0
EndIf

basla satırının hemen altındaki sayac degişkenını arttırmayı unutmusum.bu hali ile similasyonda calısdı ustam.


Powered by EzPortal