Problema na leitura da porta AN3 do PIC12F615

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Problema na leitura da porta AN3 do PIC12F615

Mensagempor Escatopholes » 04 Jun 2010 13:58

Pessoal, estou tentando utilizar a porta AN3 do PICF615, em C, e está ocorrendo um problema singular.

Se eu coloco um potenciômetro (2kOhms) nas entradas AN0, AN1 e AN2 com uma tensão variando de 0-5Vcc, as 3 funcionam perfeitamente bem: eu giro o potenciômetro e efetuo as leituras sem problema algum, com a tensão na entrada das portas variando de 0-5Vcc, como é o esperado.
Quando passo o mesmo circuito para AN3 e vou girar o potenciômetro da mesma maneira que fiz para as portas AN0, AN1 e AN2, a máxima tensão que obtenho na entrada de AN3, está em torno de 2,3V, indicando que a impedância de entrada de AN3 deve ser tão baixa que drena mais corrente e ocorre uma queda de tensão maior do que a prevista em um resisitor limitador que estou utilizando. Aparentemente parece que AN3 é diferente das outras 3 ANs.

A pergunta é: Se AN0, AN1 e AN2 funcionam bem com o esquema da variação da tensão, por que AN3 não funciona? O que poderia estar errado nas configurações?

Nota: AN3 é também utilizada como CLOCK, porém eu utilizo uma diretiva que o desabilita quando AN3 for setada para entrada analógica.

Agradeço se alguém me ajudar nessa!!!
Escatopholes
Bit
 
Mensagens: 9
Registrado em: 01 Jun 2010 07:20

Mensagempor Andre_Cruz » 04 Jun 2010 17:13

Escatopholes,

Não conhecia esse PIC 12F615, conhecia apenas o 12F675.
Olhando o data sheet doi 12F615, vi um registrador chamado "APFCON" fica na página 23, talvez ele influencie.
O oscilador não esta configurado como, oscilador interno e saída de clock em GP4 ?
O registrador ANSEL esta configurado corretamente ?
Os pull-ups internos como estão ?

Acredito que postando o código fonte, será mais fácil de identificar o problema.

Abraço

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Códgio fonte para o André

Mensagempor Escatopholes » 07 Jun 2010 08:30

Este é o código fonte que estamos utilizando e apresenta o problema mencionado anteriormente:



;=======================================================================
;
; Objetivo: testar programação pic12f615
; Funcionamento:
; entrada analogica ANx liga LED (gpio5) com bit7 do ADRESH
;=======================================================================
list p=12F615; , F=INHX8M ; processador
__config _BOR_OFF & _IOSCFS_4MHZ & _CP_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
; __config B'11110001100100'
; [not usad ] [boren ] [ioscse] [cp] [mclr][pwrte][wdt ][oscilador]
; bit 13 12 11 10 9 8 7 6 5 4 3 2 1 0
; B' 1 1 1 1 0 0 0 1 1 0 0 1 0 0'
; congiguração e acordo com data sheete setion 12
;
radix dec ; define padrao DECIMAL para valores sem identificacao
include <P12F615.INC> ; anexa o arquivo que contem as definicoes do 16F84
;..........................................................................
; Tabela de definicoes de RAM e constantes.
tempo equ 40H ; define variavel auxiliar tempo na RAM
X equ 41H
Y equ 42H
FT equ 43H
;----------------------------- Memoria de Programa ------------------------

org 0 ; define inicio do trecho a seguir em 000

goto inicio ; desvia para o programa principal onde inicia pelo
; ajuste dos registros de controle.
; Este desvio tem por objetivo deixar o endereco 004
; para a rotina de interrupcao.
;.............................. INICIO DA ROTINA DE INTERRUPCAO ..........
org 4

nop ; primeira instrucao da interrupcao.

retfie ; retorna da interrupcao.

;.............................. INICIO DO PROGRAMA ......................
inicio: ; este endereco e' o imediatamente apos o fim da interrupcao
clrw

movwf INTCON ; INTCON = 0.

bsf STATUS,RP0 ; Seleciona banco 1 para option e tris

movlw B'00000111' ;prescaler do tmr0 1:256 data sheet setion 6
movwf OPTION_REG ; Registro OPTION ajusta timer 0 clock interno
; e prescaler p/ Watch Dog (nao usamos)

movlw B'00001111' ; porta 3 entrda
movwf TRISIO ; TRISIO = outras saida

MOVLW B'00001111' ; [1] analogic input, [0] Digital I/O
movwf ANSEL ; configura as portas para digital e AN
bcf STATUS,RP0 ; volto ao banco 0. Padrao do reset
;. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
principal:
CLRF GPIO

teste: ;- leitura entrda AN0 -----------
MOVLW B'00001101' ; ADCON0 B' 0 0 0 011 0 1'
MOVWF ADCON0 ; left vdd nu an3 start enable



bsf ADCON0,1 ; inicia a conversão do an3
btfsc ADCON0,GO ; testa se a conversão foi complettada(done)
goto $-1 ; não volta e testa novamente
; sim

btfss ADRESH,7
goto desliga ; atribui o valor de ADRESH,7 a saida GPIO,5
goto liga

desliga:
bcf GPIO,5
goto sai1 ; mostra na porta gpio,5
liga:
bsf GPIO,5
sai:
goto teste

goto principal


;...............................Rotina de tempo de 250 ms.
ms250: ; - O CALL para a rotina leva 2 us.
movf Y,W
; movlw 255
movwf tempo ;+1 total 1 = 4 us

ms250a:
movlw 255 ;+1
movwf X ;+1 total 2 = 2 us

ms250b:
nop ;1
decfsz X ;1 248 x 4 us + (1 us nop + 2 us quando decfsz da 0)
goto ms250b ;2 da um tempo total 3 = 995 us

decfsz tempo ;1 1 us pq tempo > 0 + 2 us goto da um total 4 = 3 us
goto ms250a ;2 250 x (total 2 + total 3 + total 4) + 2 us quando tempo = 0
; = total 5 = 250.002 us

return ; delay = total 1 + total 5 + 2 us return = 250.008 us

END ; fim do programa fonte
Escatopholes
Bit
 
Mensagens: 9
Registrado em: 01 Jun 2010 07:20

Mensagempor RobL » 08 Jun 2010 08:39

Respondi no outro post igual a esse!!!
O problema é sua GP4 que está como saída.
Mude-a para entrada. GP4 é sua AN3.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x