Stránka 1 z 1

Konfigurace výstupu RA4 na PIC16F676

Napsal: 03 bře 2007, 00:47
od bohuš
Tak zase žádám o radu :oops: Z důvodu nedostatku vstupů PIC16F676 jsem připojil na RA5 externí hodiny a pokouším se přemluvit RA4
na funkci output. Po nakonfugurování se sice tváří jako výstup, ale rozhodí to funkci celého zařízení. Pro představu uvádím LCD na RC<0:5>, teploměr DS18B20 na RA1, A/D převodník na RA0 a vstup na RA2. Při funkci RA4 jako vstup, nebo výstup přestává komunikovat teploměr a LCD problikává. Toto se děje i při nakonfigurování interního oscilátoru. Ještě uvádím inicializaci procesoru. Simulace v MPLABu OK.

movlw 0x01
movwf PORTA ; přednastavení PORTu A
movlw 0x07 ; nastaveni PA 0-2 jako I/O
movwf CMCON
clrf PORTC ; přednastavení PORTu B
; ------------------------
bsf STATUS,RP0 ; nastavení BANKY 1

movlw b'000001' ; PA0 jako analog
movwf ANSEL
movlw b'000101' ; portA 2-0, 2vstupy, 4vystupy
movwf TRISA
movlw b'000000' ; portB 7-0, 0vstupy, 8vystupy
movwf TRISC

movlw b'11010000' ; PULL-UPy OFF, preddelic=1:32 pripojen k TMR0
movwf OPTION_REG ; f:4 :64 :156 = 100,1Hz (100us)

movlw b'00010000'
movwf ADCON1

bcf STATUS,RP0 ; nastavení BANKY 0
; ------------------------
movlw b'10000001' ;
movwf ADCON0

Přímám všechny konstruktivní nápady a předem děkuji.

Napsal: 03 bře 2007, 15:45
od jankop
Tož bohušu, zase mi uniká to nejpodstatnější. :)

Máš správně nastaveno:
CONFIGURATION WORD FOSC2:FOSC0: 011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN ???

Napsal: 03 bře 2007, 18:25
od bohuš
CONFIGURATION WORD je nastaven správně. V zapojení jsem připojil na RA4 LED diodu a to tak, že anoda je na napájení a katoda je připojená přes odpor na RA4, který je nastaven jako výstup. Dioda se má rosvítit při určité hodnotě registru "X" a pokud hodnota klesne po stanovenou mez, tak zhasne. Diodu ovládá podprogram:

#define LED PORTA,4
.
.
.

movf STA,W ; je cislo větší než 5?
sublw 0x34
btfsc STATUS,C
goto OFF_LED ; není
;--------------------------
movf DES,W ; je cislo větší než 3?
sublw 0x32
btfsc STATUS,C
goto OFF_LED ; není
bcf LED ; ano, rozsviť LED
return
;--------------------------
OFF_LED
bsf LED ; není, zhasni LED
return

Po různých experimentech jsem zapojení rozchodil díky malé úpravě
tohoto podprogramu:

movf STA,W ; je cislo větší než 5?
sublw 0x34
btfsc STATUS,C
goto OFF_LED ; není
;--------------------------
movf DES,W ; je cislo větší než 3?
sublw 0x32
btfsc STATUS,C
goto OFF_LED ; není
bsf STATUS,RP0
bcf LED ; ano, rozsviť LED
bcf STATUS,RP0
return
;--------------------------
OFF_LED
bsf STATUS,RP0
bsf LED ; není, zhasni LED
bcf STATUS,RP0
return
Z jedné stránky jsem rád, že to funguje, z druhé nejsem moc moudrej z toho, proč to nefungovalo, když jsem zapisoval přímo do PORTA... A včíl mudruj :P
Hlavně mě nekamenujte, PICuji teprve chvilku, tak můžu mít jisté mezery ve vzdělání :wink:

Napsal: 05 bře 2007, 09:58
od ViPali
No je jasné, že ovládaš port cez TRIS a nie OUT. Pozri v datasheete v blokovej schéme, všetky podmienky riadenia, či si na niečo nezabudol. Iná možnosť je, že je nejaký vnútorný skrat a pri nastavení bitu, dôjde k ovplyvneniu iných funkcií.