16F877 config atamaları

Başlatan OG, 18 Kasım 2005, 22:02:06

OG

Arkadaşlar şunu beceremedim. Yapmak istediğim ayar;

PortA.0 Analog input
PortA.1 Digital output
PortA.2 Digital Output
PortA.3 Digital İnput

PortB ve PortD digital output.

PortC kullanılmıyor.

@   device pic16F877A, hs_osc, wdt_off, pwrt_on, lvp_off, protect_off

Define   ADC_BITS   10   
Define   ADC_CLOCK  1   ' Set clock source (FOSC / 8 )
Define   ADC_SAMPLEUS 50   
define osc 4
DEFINE BUTTON_PAUSE 50

ADCON0= %01000001 '
ADCON1= %10001110 ' hız FOSC/8
CMCON=3


TRISA = %00011001
PORTA = %00000000
TRISB = %00000000
PORTB = %00000000
TRISD = %00000000
PORTD = %00000000

Hatam ne olabilir?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mmengi

kod taki tek hata cmcon bu register 877A da bulunmamaktadır.

porta nın 0. ucu analog olsun dersen ADCON1= %00001110 yazman yeterli zaten define larda 10 bit adc okumak istediğini ve osilator ayarını belirtmişsin adcon0 a tanımlama yapmana gerek yok.

Veli B.

Alıntı yapılan: "OG"
PortA.0 Analog input
PortA.1 Digital output
PortA.2 Digital Output
PortA.3 Digital İnput

PortB ve PortD digital output.

PortC kullanılmıyor.


ADCON0= %01000001 '
ADCON1= %10001110 ' hız FOSC/8
CMCON=3


TRISA = %00011001
PORTA = %00000000
TRISB = %00000000
PORTB = %00000000
TRISD = %00000000
PORTD = %00000000

PCGF ayarları yanlış.ADCON1 ayarları yanlış.

ADCON1 de sadece 5 bit kullanılır, bunların dört tanesi<3:0> PCFG ayarları içindir.Detayları datashhette bulunan bir tablo.ADCON1.[3-2-1-0]
PCFG AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ VREF-   C / R
1110  D   D   D   D   D   D   D   A  AVDD  AVSS    1 / 0

Bu tabloda  sizi ilgilendiren satır.
5. bit ise sonucun yaslanacağı tarafı belirler(10 bit ADC için önemli)
ADFM: A/D Result format select. ADCON1.5
1 = Right justified. 6 Most Significant bits of ADRESH are read as '0'.
0 = Left justified. 6 Least Significant bits of ADRESL are read as '0'.


ADCON0 için kritik bir ayar yok.Sadece kanal seçme bitleri(5:3) için sıfır yeterli.Osc ayarlarını ve start stop bitini ve dönüştürme bitti/bitmedi bayrağını zaten kullanıyorsunuz.

16xxxx ailesi içinde cmcon compaartor control register ve alt düzey mcu larda var.877 de yerine ccpxxx kullanılıyor.Bu mcu için cmcon gerekli değil.

OG

Üstadlar teşekkür ederim.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

huseyin117

merhaba
bu konu ile ilgili benimde küçük bir sorunum var. ben AN0 AN1 analog giriş olarak ayarlamaya çalışıyorum anacak PCFG değerini verdiğiniz tabloya göre kuramadım.
iyi çalışmalar

ete

Önce bir bilgiyi tazeleyeyim. CMCON registeri 16F877 de yoktur. Ama 16F877A da vardır. OG nin verdiği işlemci 877A olduğuna göre CMCON=7 komutunun programda kullanılması gerekir. Tabiiki asıl amacı komparatör pinlerini kullanmak değil ise.

Huseyin117 nin sorusuna gelince, Yalnızca AN0 ve AN1 pinlerini analog olarak kullanmak isterseniz bence en doğru tablo seçimi,
--------------------------------------------------------------------------------------------
PCFG AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ VREF-   C / R
0100   D     D     D     D     A     D     A      A    VDD     VSS     3/0
--------------------------------------------------------------------------------------------
şeklinde olacaktır. Zira bu seçimde AN0 - AN1 ve zorunlu olarak AN3 analog seçiliyor diğerleri digital kalıyorlar.
Bir başka seçenek daha var ve sanki size daha uygunmuş gibi gözüküyor. Oda şöyle;
--------------------------------------------------------------------------------------------
PCFG  AN7  AN6  AN5  AN4  AN3    AN2  AN1  AN0  VREF+  VREF-   C / R
0101    D      D      D      D   VREF+   D      A      A      RA3     VSS       2/1
--------------------------------------------------------------------------------------------

Ancak bu seçimde AN3 pini +Voltaj referans girişi olarak kullanılmaktadır. Bu durumda bu seçeneği kullanırsanız AN3 pininden ayrıca bir ADC için voltaj referansı vermeniz gerekir. Bir önceki seçenekte  Pic besleme girişi ref voltajı olarak kullanılmıştır.

Ete

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