12F675 ADC register tanımlama !

Başlatan sinasos, 12 Mart 2018, 11:22:51

sinasos

Merhabalar,
Biliyorum ETE hocam biraz kızacak ancak benim gibi acemiler için de bunu göze alarak soru sormak istiyorum.
12f675 işlemcide 3 adc (AN0-AN1-AN2) kullanmak istiyorum. Dahili osilatör 4 mhz, GPIO.3 digital giriş, GPIO.4 ve5 digital çıkış olarak ayarlandı. 10 bit adc çalışacak.
ETE hocam diyecekki datasheetine baksana ! valla hocam 2 gündür datasheetini inceliyorum ama o kadar kafam karıştı ki içinden çıkamadım. siz bir konuda ANSEL komutundan bahsetmişsiniz onu anladım ama ANSEL, ADCON0, vb hepsini aynı anda nasıl kullanacağımı hesaplamaya çalışırken kafa karıştı !
Alıntı YapData sheet 46 cı sayfada ANSEL register parametreleri verilmiş. Bulamazsanız aratmayı seçin ve REGISTER 7-2  yazıp aratın.
İlk bulduğunuz değil İkinci bulduğunuz aradığınız olacaktır.

Bu registerin 7. nolu biti işe yaramıyor. Her zaman "0" olacaktır.
6-4 bitleri A/D çevirici CLK seçme bitleri oluyor. Register parametrelerinde bunlar verilmiş.
%000 olursa  Fosc/2 
%001 olursa Fosc/8
şeklinde sıralanmış.

Registerin 3-0 arası bitleri analog pin seçme bitleridir. 3-0 arasında 4 adet pin bulunur.  3 nolu bit 1 olursa GPIO.3=analog, sıfır olursa GPIO.3=Digital pin olarak çalışır.
2 nolu bit 1 olursa GPIO.2=Analog, sıfır olursa digital olarak çalışır. Aynı mantıkla GPIO.1 ve GPIO.0 pinlerinin seçimide yapılır.
Bu durumda registerin %0000xxxx şeklinde x ile gösterilen bitleri Analog pin seçme bitleri olmaktadır. 0000 şeklinde gösterilen bitlerin sağdaki 3 adedi ise ADC işleminde CLK seçme bitleri olarak işlem görür.
Sorunuzun cevabı için GPIO.0 pini analog olması için ANSEL.0=1 şeklinde komut verilmesi yeterlidir. Yada ANSEL=%00000001
şeklinde bir komut verilmesi de aynı işi görür. Bu ikincisinde CLK seçme bitleri %000 verilerek F/2 Osc seçilmiş olur. Siz yinede F/8 seçmeye çalışın. Bunun için ANSEL=%0001001 şeklinde komut vermeniz yeterli olacaktır.

Ete
Benim yazdıklarım şu şekilde ;

DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
DEFINE OSC 4

define adc_bits 10
define adc_clock 1
define adc_sampleus 50

ANSEL = %00010111 
ADCON0 =%10001000   
TRISIO=%00001111
WPU=0
GPIO=0
OPTION_REG.7=1
CMCON=7


proteusta sürekli "attempt to read unimplemented memory location 0x0006 ignored" hatası alıyorum !

muyat

Yapmak istediginiz şey nedir?
Picin hangi pinini analog olarak kullanmak istiyorsunuz?

sinasos

#2
Alıntı yapılan: muyat - 12 Mart 2018, 12:15:00
Yapmak istediginiz şey nedir?
Picin hangi pinini analog olarak kullanmak istiyorsunuz?

Alıntı Yap12f675 işlemcide 3 adc (AN0-AN1-AN2) kullanmak istiyorum. Dahili osilatör 4 mhz, GPIO.3 digital giriş, GPIO.4 ve5 digital çıkış olarak ayarlandı. 10 bit adc çalışacak.

1. 3 adet adc kullanmak istiyorum (AN0-AN1-AN2)
2. 2 adet dijital çıkış (GPIO.4 - GPIO.5)
3. 1 adet dijital giriş (GPIO.3)

ete

#3
Bu yazdıkların kadarı ile Proteus o hatayı vermez veremezde. Başka ilavelerin vardır mutlaka.

12F675 için kullandığım header dediğim başlangıç değerleri aşağıdaki şekilde;
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
DEFINE OSC 4
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 20 ' ADC sampling time (uSec)
CMCON = 7
ADCON0=%10000000
ANSEL = %000xxxxx
GPIO=0
TRISIO=%000xxxxx

Şimdi söylediğine bakarsak,
GPIO.0 (AN0) ,GPIO.1(AN1)  ve GPIO.2(AN2) analog olacak o halde,
TRISIO=%00001111 verip pinleri önce giriş yapacaksın. Sonra,
ANSEL=%00000111 verip bu pinleri  analog yapacaksın.

Hepsi bu kadar.
Ete

Powered by EzPortal