Página 1 de 1

Comparador Analógico 16f628a

MensagemEnviado: 23 Nov 2009 11:39
por Bruno Caputo
Pessoal, estou começando a mexer com PIC usando ASM e não encontrei,ainda, na internet uma explicação de como eu posso estar fazendo uma comparação em cima de uma entrada analógica.

Apenas descobri que no modelo 16f628a, que estou usando, não possui conversor de AD mas que posso fazer uma comparação da entrada analógica com voltagens base de comparação.

Descobri tbm que pra isso eu deveria usar as instruções CMCON e VRCON. Mas não faço a menor ideia de como usálos.

Alguem poderia me dizer como eu posso saber se uma entrada analógica é maior, menor ou igual a um V de referencia??

MensagemEnviado: 23 Nov 2009 11:59
por Alesandro F Zagui
O ribeiro220 postou uma apostila que fala sobre Pic 16F, bem completa, provavelmente tenha alguma coisa sobre o comparador.

http://asm51.eng.br/phpbb/viewtopic.php?t=8792

MensagemEnviado: 23 Nov 2009 12:39
por renatokodaira
Bruno, primeiro arrume a datasheet do 16F628A no site da Microchip. Dê uma lida no capítulo sobre comparadores analógicos. Ali tem todas as informações técnicas que você precisa.

Em resumo: CMCON e VRCON não são instruções. Eles são nomes de registradores onde cada bit tem um significado, uns são o resultado da comparação das entradas (ou seja são a saída do comparador), outros servem para configurar os comparadores (modo, inversão de sinal, entradas usadas, tensões de referência usados, etc).

Para usá-lo como conversor analógico-digital você terá uma limitação muito grande, já que somente 16 níveis de tensão de comparação estarão disponíveis.

MensagemEnviado: 23 Nov 2009 12:44
por Bruno Caputo
Obrigado pessoal, vou seguir a orientação de vc´s.

MensagemEnviado: 23 Nov 2009 13:58
por Djalma Toledo Rodrigues
E Veja também Amplificador Operacional (TL071)

Aliais no µC pode configurar para acesso aos pinos Entradas (+ - ) e Saída

Claro que a qualidade desse do µC não se compara com o CI TL071

.

MensagemEnviado: 23 Nov 2009 18:59
por Bruno Caputo
Pessoal, valeu..consegui fazer a comparação entre dois valores analógicos da entrada.

Agora farei comparando com um referencial interno.

Alesandro F Zagui, seu link juntamente com o datasheet me fizeram entender todo a caoisa.
Valeu pessoal.

MensagemEnviado: 24 Nov 2009 00:42
por jorgeluiz
procure topicos com as palavras "conversao delta-sigma". Ou va direto na fonte : AN700, no site da Microchip.

MensagemEnviado: 26 Nov 2009 21:01
por Bruno Caputo
Pessoal, consegui fazer a comparação entre duas entradas. RN0 e RN3. Tentei fazer usando a Vref mas não está dando certo.

Usei a seguinte configuração dos registradores...

MOVLW B'10101100'
MOVWF VRCON


MOVLW B'00000010'
MOVWF CMCON


CALL delay
CALL delay

BTFSC CMCON,6
BSF PORTB,5

Ah...coloquei uma entrada em RA0 apenas e queria comparar com a Vref interna 2,5V.

MensagemEnviado: 26 Nov 2009 21:26
por Jozias del Rios
Não estou olhando o datasheet... mas vc está configurando os bancos de memória corretamente para acessar essas configurações, principalmente o VRCON?

isto é, será q não faltou algo do tipo
bsf STATUS, RP0

antes de mexer em VRCON?

MensagemEnviado: 26 Nov 2009 21:34
por Bruno Caputo
Opa..não havia colocado a parte inicial do código...agora ele vai completo...


;xxxxxxxxxxxxxxxxxxxxx


LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system

#include "P16F628.INC" ; Include header file


__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON

CBLOCK 0x20 ; Declare variable addresses starting at 0x20
Loop1,Loop2
ENDC
;
; -----------
; INITIALIZE
; -----------
;
ORG 0x000 ; Program starts at 0x000

CLRF PORTA ; Initialize port A
CLRF PORTB ; Initialize port B

BSF STATUS,RP0 ; RAM bank 1

CLRF TRISA ; All pins port A output
CLRF TRISB ; All pins port B output

BCF STATUS,RP0 ; RAM bank 0
;
; ------------------------
; FUNCTION OF PORT A PINS
; ------------------------
;
MOVLW 7
MOVWF CMCON ; Comparators off, all pins digital I/O

;
; ----------
; MAIN LOOP
; ----------
;
Main

;Compara RA0 com RA3. Verifica se RA3 > RA0

MOVLW B'10101100'
MOVWF VRCON

MOVLW B'00000010'
MOVWF CMCON

CALL delay
CALL delay

BTFSC CMCON,6
BSF PORTB,5

GOTO Main

;
; ---------------
; DELAY 250 MSEC
; ---------------
;
delay MOVLW 150
MOVWF Loop1
Outer MOVLW 100
MOVWF Loop2
Inner NOP
NOP
DECFSZ Loop2,F
GOTO Inner ; Inner loop = 5 usec.
DECFSZ Loop1,F
GOTO Outer
RETURN

END

MensagemEnviado: 26 Nov 2009 21:51
por Jozias del Rios
Olhando o datasheet do 16F628, vejo que o register file VRCON está no Bank1

logo para acessá-lo, faça:

Código: Selecionar todos
; (...)
bsf STATUS, RP0
  MOVLW B'10101100'
  MOVWF VRCON
bcf STATUS, RP0
; (...)


tente!

MensagemEnviado: 26 Nov 2009 22:24
por Jozias del Rios
É, além disso o cara configurou os pinos como output, então não faz sentido.

Tinha que botar pelo menos o RA0 como input, este pino que ele deseja comparar com o VREF.

MensagemEnviado: 27 Nov 2009 07:16
por Andre_Cruz
Bruno Caputo,

Gostaria apenas de dar uma dica de organização do código fonte, após o vetor de reset endereço 0x000, o correto é dar um salto antes de iniciar a configuração dos registradores do PIC, e deixando o vetor de interupção endereço 0x004 livre, mesmo que você não esta fazendo o uso delas.

Abraço

André

MensagemEnviado: 27 Nov 2009 08:39
por Bruno Caputo
Galera, muito obrigado mesmo.

Ajudaram absurdamente.

Arrumei o bank segundo o datasheet e funcionou...vou apenas organizar o código , comentar e posta-lo aqui pra poder dar o tópico como fechado e ajudar a outros que tenham a mesma dificuldade.
Novamente obrigado..e desculpem a ignorancia...faz apenas 2 semnas que to mexendo nisso...

[]´s