avatar_elektro77

12f675 adc kullanımı hakkında.

Başlatan elektro77, 22 Temmuz 2019, 11:36:22

elektro77

12f675 ile küçük bir akım ölçme devresi yapmak istiyorum. Fakat pbp de bu kadarcık kodla bile out off memory hatası alıyorum. ADC de  Word tanımını kaldırıp byte tanımını kullanırsam hata kalkıyor.. bu böyle olmamalı. Nerde hata yapıyorum yardımcı olurmusunuz.

@ DEVICE pic12F675                                                     
@ DEVICE pic12F675, WDT_OFF             
@ DEVICE pic12F675, PWRT_ON             
@ DEVICE pic12F675, PROTECT_OFF         
@ DEVICE pic12F675, MCLR_OFF            
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  

DEFINE OSCCAL_1K 1  
DEFINE OSC 4

DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 50 

adc VAR word


GPIO=0
TRISIO=1
CMCON = 7
ANSEL=1

PAUSE 250

BASLA:
         ADCIN 0,adc

    
       
goto basla
end
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Normal şekilde kurulmuş ilaçlı bir basic derleyicisi bu hatayı vermez. Kullandığın bence demo sürümü ve satır bazında yada derlenen  word bazında kısıtlama olan bir sürüm. Ben derliyorum sorunsuz derleniyor. Sorun kullandığın sürümde.
Ete

elektro77

Evet hocam sorun tamda buymuş. Herzaman kullanıp durduğum mcs nasıl olduysa pbp yi kaldırıp demosu ile değiştirmiş. Nasıl olduğunu bilmiyorum.Pbp 2.60L diye bir ek buldum ve mcs ye tanıttım. sorun kalktı. Teşekkür ederim.

Bir sorum daha olacak hocam. Aşağıdaki yazılım simülasyonda çalışıyor. Sigorta ayarlarını ve adc giriş açma işlemlerimi bi kontrol edermisiniz bir yanlışım varmı. Başta şu kodla baya ceballeştim ama okuya okuya doğruyu buldum galiba. O kodu koymadan uğraşmışım bayaa bir süre. bu kodun ne anlama geldiğini açıklarsanız da memnun olurum. kod şu: ADCON0=%10000000
kontrol etmenzi istediğim yazılım ise aşağıda. Çekilen akıma göre 3 adet led yakıyor. hepsi bu.
@ DEVICE pic12F675                                                     
@ DEVICE pic12F675, WDT_OFF             
@ DEVICE pic12F675, PWRT_ON             
@ DEVICE pic12F675, PROTECT_OFF         
@ DEVICE pic12F675, MCLR_OFF            
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  

DEFINE OSCCAL_1K 1'bu kod olmazsa pic ilk programdan sonra bozulur.  
DEFINE OSC 4

DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 11

GPIO=%00000000 
TRISIO=%00001001'0 ve 3. bitler giriş olarak ayarlandı
OPTION_REG.7=1
CMCON=7 
ANSEL=%00000001 
ADCON0=%10000000' adc çözünürlüğünü 10 bit yaptık

ham  VAR word 56
AMP  VAR WORD
Mamp var byte
SAYAC VAR BYTE

SYMBOL MOSGATE=GPIO.1 'mosfetin gate ucu
SYMBOL LED1=GPIO.2
SYMBOL LED2=GPIO.4
SYMBOL LED3=GPIO.5
symbol BUTON=GPIO.3'bu picte bu pin sadece giriş olarak ayarlanabiliyor.

PAUSE 250

SAYAC=0
'__________________________________________________________________________
BASLA:
ADCIN 0,ham 'okunan adc değerini ham tanımına yerleştirir.10 bitte max:1024 tür.

IF BUTON=1 THEN'butona her basıldığında sayac 1 artar
SAYAC=SAYAC+1
WHILE BUTON=1
WEND
ENDIF

IF SAYAC=1 THEN'butona ilk basıldığında sayac 1 olur ve motor çalışır  
MOSGATE=1
ENDIF

IF SAYAC=2 THEN' butona 2.kere basıldığında sayac 2 olur ve motor durur. 
MOSGATE=0
SAYAC=0'sayac tekrar sıfırlanır.
ENDIF
'____________________________________________________________________________
IF ham>205 then'1 amperden sonra 1. led yanar 
led1=1
ELSE
LED1=0
ENDIF

IF ham>510 then'2 amperden sonra 2.led yanar 
led2=1
ELSE
LED2=0
ENDIF

IF ham>715 then'3 amperden sonra 3. led yanar 
led3=1
ELSE
LED3=0
ENDIF

    IF ham>820 then' 4 amperden fazla akım çektiğinde motoru durdurur. 
    MOSGATE=0
    SAYAC=0
    ELSE
    GOTO BASLA
    ENDIF
'_______________________
goto basla
end
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#3
üstatlarım. 0...5 amper arası akım çekildiğinde sıra ile 3 adet led yakan bir devre yapmaya çalıştım. fakat simülasyonda gp.2 ve gp.4 e bağlı ledler çalışıyor ama gerçekte bu pinlerden çıkış alamadım. 2 ayrı pic denedim. sebebi sigorta ayarlarından olabilir mi. şema ve yazılım ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Öncelikle yazılımla ilgili soruna cevap vereyim. Aslında data sheet'i açıp Analog to digital bölümğnde ADCON0 registeer ayarlarına baksan görebilirdin ne olduğunu.
ADCON0.7= okunan bilginin sağa yaslı (1=10 bit) yada sola yaslı olup olmadığına karar verir.
Malum değişken 16 bitlik ve okunan bilgi sağa yaslı olursa sondaki 6 bit sıfır kabul edilir ve siz 10 bitlik olarak kullanmış olusunuz. Sola yaslı olursa 16 bitlik bilginin son 10 bitini ADC bilgisi kaplar ve baştaki 6 bit ise sıfır kabul edilir. Bu durumda sayı 16 bitlik bir sayı gibi gözüksede aslında bilgi 10 bitliktir. Doğrusu sağa yaslı kullanmaktır ve en soldaki -1- bunu sağlar.
ADCON0.6 biti Vref bitidir ve sıfır verilirse VDD voltaj referansı olarak kullanılır.
1 olursa harici VREF pininden girilen değer Vref olarak kullanılmış olacaktır.
Diğerleri çok önemli değil kafa karıştırmasın diye açıklamıyorum gerekirse data sheet'e bakabilirsin.
Yazılıma gelince açılış ayarlarında sorun görmedim. Her şey yerli yerinde.

Programda ve tanımlamalarda hata yok. Led1 , led2 ve led3 ün program şartlarına uygun yanması veya sönmesi gerekir. yanmıyor ise muhtemelen akım okuma sistemin bu ADC değerlerine ulaşacak ölçümleri vermiyordur. Yani adc okumaların hiç bir zaman 205'i aşmıyor ise ledler yanmayacaktır ve muhtemelen bu şekilde bir sorun oluşuyordur. Yada pic lerin adc girişleri bozuktur.


Ete
 

elektro77

#5
Açıklamanız için teşekkür ederim. yanlız şöyle bir durum var. ham değer 715 yi aşıyor olmalı ki led 3 yanıyor. ama diğer ledler yanmadan yanıyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

aklıma şöyle bir şey denemek geldi:mademki led3 yanıyor. bu durumda hamdeger 715 i aşıyor demektir dedim. ve tüm ledleri 715 ham değer e ulaşıldığında yanacak şekilde ayarladım. bu sefer led3 dahil hiç biri yanmadı.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#7
HOCAM ÖZÜRDİLERİM.
Dediğiniz gibi gerekli ham değerine ulaşamamışım. ledleride gerçek devrede ters bitlere bağlamışım. yanan led3 aslında ilk led miş.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal