12f675 yardım CMCON

Başlatan eee1984, 26 Şubat 2008, 16:12:04

eee1984

Merhaba arkadaslar

Pic12f675 in data sheet in deki örnege bakıyorum cmcon=0x7h diyince digital I/O diyor ama data sheet de ilgili register ı inceliyorum digital I/O yapmak için 0 yuklemek gerekiyor gb bi  hisse kapıldım acaba yardımcı olabilirmisiniz  :oops:

ete

675 de hem comparatör hemde analog pinler mevcut. Dolayısıyla,
CMCON=7 diyerek comparatörleri iptal etmeniz,
ANSEL=0 diyerek de analog pinleri digital yapmanız gerekir.
Kısaca pinleri digital yapmak için 2 komut vermeniz gerek.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

eee1984

Alıntı yapılan: "ete"675 de hem comparatör hemde analog pinler mevcut. Dolayısıyla,
CMCON=7 diyerek comparatörleri iptal etmeniz,
ANSEL=0 diyerek de analog pinleri digital yapmanız gerekir.
Kısaca pinleri digital yapmak için 2 komut vermeniz gerek.

Ete

Hocam ama datasheet de cmcon ları 0 yaparsak digital 1 yaparsak analog olur diyor yani   :oops:  yanlış mıyım acaba  :roll:

CLR

Merhaba

CMCON pic içindeki dahili komparatör girişlerini port girişlerinden ayırmak veya bağlamak için kullanılır, bağlı kalırsa port analog olarak çalışır
ANSEL ise dahili ADC'nin girişlerini portlardan ayırmak veya bağlamak için kullanılır, bağlı kalırsa port analog olarak çalışır
ADCON0 ise ANSEL ile birlikte kullanılır, CMCON ile bir alakası yoktur, daha önce ANSEL ile analog olarak ayarladığımız porttan birini seçmemize yarar

Tüm portları dijatal yapacaksak
     banksel CMCON
      movlw   0x7         ;
      movwf  CMCON   ; Comparator girişlerini portlardan ayır
      banksel ANSEL
      clrf        ANSEL    ; ADC girişlerini portlardan ayır
                                ; artık tüm portlar digital


ADC için Ansel ile  Port'tan sample alma frekansı ve portlardan hangilerini analog istiyorsak, ayarlarız

ANS3:ANS0 = 1111 ise AN0-AN3 pinlerinin hepsi analog port olur
ANS3:ANS0 = 1001 ise AN0 ve AN3 analog diğerleri digitaldir

ADCON0 (A/D CONTROL REGISTER) ile ise o anda hangi analog pini okuyacaksak onu seçeriz
00 = Channel 00 (AN0)
01 = Channel 01 (AN1)
10 = Channel 02 (AN2)
11 = Channel 03 (AN3)

mesela sadece AN3 pinini ADC girişi olarak kullanacaksak ,

 
banksel  ANSEL
 movlw    0x08
 movwf    ANSEL ; Sadece AN3 analog port olsun
 banksel  ADCON0
 movlw    0x0C
 movwf    ADCON0 ; AN3 analog portunu dahili ADC'ye bağla



Kolay gelsin
Knowledge and Experience are Power

eee1984

Alıntı yapılan: "eemkutay"Merhaba

CMCON pic içindeki dahili komparatör girişlerini port girişlerinden ayırmak veya bağlamak için kullanılır, bağlı kalırsa port analog olarak çalışır
ANSEL ise dahili ADC'nin girişlerini portlardan ayırmak veya bağlamak için kullanılır, bağlı kalırsa port analog olarak çalışır
ADCON0 ise ANSEL ile birlikte kullanılır, CMCON ile bir alakası yoktur, daha önce ANSEL ile analog olarak ayarladığımız porttan birini seçmemize yarar

Tüm portları dijatal yapacaksak
     banksel CMCON
      movlw   0x7         ;
      movwf  CMCON   ; Comparator girişlerini portlardan ayır
      banksel ANSEL
      clrf        ANSEL    ; ADC girişlerini portlardan ayır
                                ; artık tüm portlar digital


ADC için Ansel ile  Port'tan sample alma frekansı ve portlardan hangilerini analog istiyorsak, ayarlarız

ANS3:ANS0 = 1111 ise AN0-AN3 pinlerinin hepsi analog port olur
ANS3:ANS0 = 1001 ise AN0 ve AN3 analog diğerleri digitaldir

ADCON0 (A/D CONTROL REGISTER) ile ise o anda hangi analog pini okuyacaksak onu seçeriz
00 = Channel 00 (AN0)
01 = Channel 01 (AN1)
10 = Channel 02 (AN2)
11 = Channel 03 (AN3)

mesela sadece AN3 pinini ADC girişi olarak kullanacaksak ,

 
banksel  ANSEL
 movlw    0x08
 movwf    ANSEL ; Sadece AN3 analog port olsun
 banksel  ADCON0
 movlw    0x0C
 movwf    ADCON0 ; AN3 analog portunu dahili ADC'ye bağla



Kolay gelsin

Şİmdi cmcon=7 dediğimizde hepzi digital oluyor sonrada ansele yuklediğimiz veriye gore mi bazılarını analog bazılarını digital yapıyoruz  :roll:  :oops:

CLR

Merhaba,

Alıntı yapılan: "eee1984"
Şİmdi cmcon=7 dediğimizde hepzi digital oluyor sonrada ansele yuklediğimiz veriye gore mi bazılarını analog bazılarını digital yapıyoruz  

Daha iyi anlayabilmen için aşağıda C ve asm formatında yazdım.

Tüm portları dijital yapmak için
C:
CMCON=0x7;          // Komparator'ü kullanmıyoruz
ANSEL=0;               // ADC'yi kullanmıyoruz
                             // Artık tüm portlar dijital
Asm:
banksel CMCON   ; CMCON'un bulunduğu banka geç
movlw   0x7         ; CMCON=0x7 olacak
movwf  CMCON   ; Comparator girişlerini portlardan ayır,
banksel ANSEL    ; ANSEL=0
clrf        ANSEL    ; ADC girişlerini portlardan ayır
                                ; artık tüm portlar digital


Mesela GP4(AN3) portunu Analog yapmak için;

C:
CMCON=0x7;             // Komparator'ü kullanmıyoruz, FOSC=osilatör fre.
ANSEL=0b00011000;   //  001 = FOSC/8(ADC sample frekansı)  ve
                                 //  1000 = AN3 (GP4) analog giriş)
ADCON0=0xC;           //  Dahili ADC girişine GP4(AN3)'ü bağla
// artık GP4(AN3) portu hem analog hemde Dahili ADC'ye bağlandı.

asm:
 banksel  ANSEL
 movlw    0x08
 movwf    ANSEL ; Sadece AN3 analog port olsun
 banksel  ADCON0
 movlw    0x0C
 movwf    ADCON0 ; AN3 analog portunu dahili ADC'ye bağla 
 movlw    0x7         ; CMCON=0x7 olacak
 movwf    CMCON   ; Comparator girişlerini portlardan ayır, 
// artık GP4(AN3) portu hem analog hemde Dahili ADC'ye bağlandı.


Kolay gelsin
Knowledge and Experience are Power