12F683

Başlatan zeus48, 13 Mayıs 2020, 19:23:59

zeus48

Arkadaşlar mrb. 12f683 ile bir sorunum var. AN0 kullanarak 0 ile 5 volt arası bir değer okumaya  çalışıyorum  bu değerin  yani ham değerin 10 bitte  0-1024   arası olması gerekmiyormu ?  ham değeri 4 ile böldüğümüzde 0-256 arası olması gerekir .Benim yazdığım kodlarda ham 4 ile bölünmüş haldeyken bile hiç alakası olmayan sayılar çıkıyor 200 lü   300 lü  500 lü 900 lü rakamlar çıkıyor .sorunu çözemedim. Bilen arkadaşlardan yardım istiyorum.

'****************************************************************                                       
'*  İŞLEMCİ :12f 683 kullanıldı                             *
'**************************************************************** 
@ __CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF& _INTRC_OSC_NOCLKOUT
DEFINE OSC 4
OSCCON=%01100001
CMCON0 = 0

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 1
DEFINE ADC_SAMPLEUS 30
           

TRISIO= %00000001
ANSEL = %00000001
GPIO=0


HAM VAR WORD
HAM=0

Y VAR byte


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
SYMBOL BUT=GPIO.1
SYMBOL LED=GPIO.2
SYMBOL DTC=GPIO.4
SYMBOL BUZ=GPIO.5

PAUSE 1000

BUZ=1:LED=1:PAUSE 200:BUZ=0:LED=0:PAUSE 200
BUZ=1:LED=1:PAUSE 200:BUZ=0:LED=0:PAUSE 200
BUZ=1:LED=1:PAUSE 200:BUZ=0:LED=0:PAUSE 200
BUZ=1:LED=1:PAUSE 200:BUZ=0:LED=0:PAUSE 200

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BASLA:      
ADCIN 0,HAM
HAM=HAM/4
PAUSE 500
GOSUB GON

IF HAM<500 THEN GOTO ALR
IF BUT=1 THEN GOTO ALR
GOTO BASLA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ALR:
BUZ=1:LED=1:PAUSE 200:BUZ=0:LED=0:PAUSE 200
      
GOTO ALR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GON:
Y=HAM
SEROUT2 DTC,813,["E","I","N",Y]
SEROUT2 DTC,813,["E","I","N",Y]
SEROUT2 DTC,813,["E","I","N",Y]
SEROUT2 DTC,813,["E","I","N",Y]
PAUSE 5
RETURN
      
     

ete

Hata-1:BU işlemcide Komparatör vardır ve kullanmıyorsan ki kullanmıyorsun iptal etmen gerekir.
İptal Komutu CMCON0=7 dir.

Hata-2: Bir ADC işleminde gereken registerler mutlaka ayarlanmalıdır. Bu işlemcide ADCON0 register ADC sonucunun ne şekilde alınacağını belirler. Adc sonucu 10 bit olup 16 bitlik değişken içinde sağa yaslı veya sola yaslı şekilde ayarlanabilir. Sağa yaslı seçilirse sonuç 0-1023 (1024 değil!!!) olarak okunur. Sola yaslarsanız 65472-64 arası bir değer okursunuz. Bu nedenle ideal çözüm sağa yaslamaktır. Komutu ADCON0=%10000000 şeklinde olmalıdır.

ADC değeri 10 bitlik bir değerdir. 0-1023 arası değer 0-5V luk girişe tekabül eder.
Bu değeri 4 e bölerek  255 değerini bulursunuz 256 değil.

Tavsiye olarak söylüyorum. Data sheet'e bakma alışkanlığını mutlaka edinin. İllaki lisan bilmek gerekmiyor. En azından Analog Digital Converter bölümüne bakın hangi registerler var neler ayarlanmalı bunları görmeniz gerekir.

Ete

zeus48

Tşk hocam .Çalıştı.Data bilgilerine defalarca baktım ama bu kadar anlayabilmiştim. Sağol

Powered by EzPortal