Konfigurace výstupu RA4 na PIC16F676

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
bohuš

Konfigurace výstupu RA4 na PIC16F676

#1 Příspěvek 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.
jankop

#2 Příspěvek 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 ???
bohuš

#3 Příspěvek 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:
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#4 Příspěvek 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í.
Ako elektrikár sa cítim slobodne.
Môžem hovoriť do vedenia!
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“