Página 1 de 2

[RESOLVIDO] PROBLEMAS COM A CONFIGURAÇÃO DO PIC16F76 /876

MensagemEnviado: 25 Mai 2010 07:44
por Rodrigo.rb3s
Bom dia a todos, estou montando um projeto pra apresentar 2 sensores (LDR) em funcionamento usando tambem um LM393, mas quando peço pra o pic testar o BTFSS PORTA,1 se está em 1 o programa não faz nada (eu deixo o pino do pic sem tenção nenhuma e quando altera a luminosodade do LDR o pino do conparador vai pra 1 (5,0V) mas o pic não identifica, o que pode estar acontesendo?
e não consigo reservar 2 bytes para as variaveis se eu colocar
DELAY RES 2 na frente da variavel o MP LAB da erro de compilação. se alguem tiver alguma dica ajudaria muito, pois já não tenho muito tempo pra entregar o projeto final na facu...

aqui vai o programa...


; PROJETO DE APRESENTAÇÃO DE SENSORES
; REV00 01/05/2010 ESCRITO POR: RODRIGO BONFANTE



;******************************************************************************************
;Objetivo: DEMONSTRAR O FUNCIONAMENTO DE SENSORES ATUANDO EM UM PROCESSO E MOSTRAR ESTATOS DO PROCESSO
;
;-----------------------------------DIRETRIZES-----------------------------------

INCLUDE "P16F76.INC"
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_OFF & _XT_OSC
ERRORLEVEL -302
;*************************************************************************
;LOCAL PARA DEFINIR CONSTANTES
;
; LOCAL PARA DEFINIR VARAVEIS
;
CBLOCK H'20'
TEMP1
TEMP2
TMPLCDREGISTER RES 2
MSDELAYCOUNTER RES 2
ENDC
;************************************************************
ORG 0X00
GOTO INICIO
ORG 0X04
NOP
GOTO INICIO
RETFIE
;
; PORT B'76543210'
;
INICIO
BCF STATUS, RP0
BCF STATUS, RP1 ; muda pra banco 1
CLRF PORTA
BSF STATUS, RP0
MOVLW B'00000111'
MOVWF ADCON1
MOVLW B'00111111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
CLRF STATUS ; volta pra banco 0
;
;*************************************************************************
; COMEÇO DO PROGRAMA
;*************************************************************************
CLRF PORTA
CLRF PORTB
CLRF PORTC
GOTO BOTAO1
;
BOTAO1
BTFSC PORTA,0
GOTO BOTAO1
CALL LIGADO
BSF PORTC,4
BSF PORTC,5
BSF PORTC,6
MOVLW H'10'
CALL MSDELAY
GOTO DESLIGA
GOTO SENSOR1
;
SENSOR1
BTFSS PORTA,1
GOTO SENSOR2
BSF PORTB,0
GOTO SENSOR2
;
SENSOR2
BTFSS PORTA,2
GOTO SENSOR1
BSF PORTB,1
GOTO PROCESSO
;
SENSOR3
BTFSS PORTA,3
GOTO PROCESSO
BCF PORTB,1
GOTO DESLIGA
;
DESLIGAR
BTFSC PORTA,0
GOTO SENSOR2
GOTO DESLIGA
;
PROCESSO
BCF PORTC,0
MOVLW H'255'
CALL MSDELAY
BSF PORTC,0
CALL MSDELAY
GOTO SENSOR3
;
DESLIGA
BTFSC PORTA,0
GOTO SENSOR1
CLRF PORTC
BCF PORTB,1
CALL DESLIGADO
GOTO BOTAO1
END[/img]

MensagemEnviado: 25 Mai 2010 07:59
por Andre_Cruz
Bom dia Rodrigo,

Véio, de uma olhada no datasheet do pic, você precisa configurar os registrador do modulo comparador, o CMCON, o ADCON1 você configurou, configure o registrador CMCON que é pra funcionar.

Abraço

MensagemEnviado: 25 Mai 2010 13:29
por Rodrigo.rb3s
Andre_Cruz escreveu:Bom dia Rodrigo,

Véio, de uma olhada no datasheet do pic, você precisa configurar os registrador do modulo comparador, o CMCON, o ADCON1 você configurou, configure o registrador CMCON que é pra funcionar.

Abraço


Andre..
nesse PIC16F76 bão tem esse registrador CMCON, tem CCP1CON que faz parte dos COMPARE/PWM/CAPTURE, dexei todos em 0 mas tambem não rezolve...

fora esse problema tem esse,

se eu por o RES 2 depois de uma variavel pra reservar dois bytes pra variavel o MPLAB não compila...

MensagemEnviado: 25 Mai 2010 23:25
por Andre_Cruz
Rodrigo,

Desculpa, eu imaginei que você estivesse usando o comparador interno, o 16F76 realmente não tem comparador interno.

Mas analizando seu código, você tem a saída de um comparador ligado ao PORTA,0 ou RA0, seu erro esta na configuração do PORTA, no registrador TRISA, quando você move B'00000000' para TRISA você configura o PORTA todo como saída, para usar o RA0 como entrada você deve mover B'00000001' para TRISA.

Código: Selecionar todos
   MOVLW         B'00000001'
   MOVWF         TRISA                        ;CONFIGURA RA0 COMO ENTRADA


Assim o BTFSC PORTA,0 vai funcionar !

O PIC trabalha com variavéis de 8 bits, ou seja vai de 0 a 255, para trabalhar com 16 bits ou mais é preciso fazer na unha, por exemplo VAR_LOW e VAR_HIGH, LOW armazena a parte baixa de 0 a 255 e HIGH a parte alta de 255 a 65535, cada vez que VAR_LOW estoura ou ocorre o overflow você incrementa a VAR_HIGH !

Abraço !

André Cruz

MensagemEnviado: 26 Mai 2010 08:04
por Rodrigo.rb3s
André,

já acertei o PORTA como como todo entrada (é o que eu quero que o pic faça)

mas se eu por um resistor de 10k para os pinos RA0, RA1, RA2 RA3 ir a 5V e por uma chave do tipo tactil (TACT SWITCH) usar o comando
BTFSC PORTA,0
GOTO LOOP
BSF PORTC,4

o programafunciona normalmente,

mas quando eu retiro os resistores e ligo os pinos RA1, RA2 na saida de um AMP-OP onde a tensão inicial é '0' e depois de acionar o sensor a tensão é 5 o programa não faz nada..

BTFSS PORTA,1
GOTO SENSOR2
BSF PORTC,3
CALL DESLIGADO
GOTO SENSOR2
;
SENSOR 2
BTFSS PORTA,2
GOTO LOOP
BSF PORTC,6
CALL DESLIGADO
END

é isso que eu não entendo o porque, e não consigo resolver
BTFSS É PRA TESTAR SE ESTÁ EM '1' (5V) e pular a proxima instrução certo?
alguns pinos eu deixei COM 5v '1' RA0, RA1, RA2, RA3, e outros pinos com '0' 0V ligados a saida de um AMP-OP
RA4, RA5, RA6 os pinos do PORTB vou usar um LCD 20x2 E PORTC eu vou usar como saida pra acionar reles e led´s.
já verifiquei varias vezes a PCI mas não encontrei erros...

se alguem mais se interessar a configuração desse PIC16F76 é igual a do PIC16F876 - PIC16F873

MensagemEnviado: 26 Mai 2010 08:12
por Sergio38br
teste colocando um resistor em pulldown neste pino.

[ ]'s
Sergio

MensagemEnviado: 26 Mai 2010 08:15
por Andre_Cruz
Rodrigo,

A instrução BTFSS (Testa o bit e salta se igual a 1).

Código: Selecionar todos
BTFSS   PORTA,0
GOTO    PINO_0V
GOTO    PINO_5V


A instrução BTFSC (Testa o bit e salta se zerada).

Código: Selecionar todos
BTFSC   PORTA,0
GOTO    PINO_5V
GOTO    PINO_0V


Se acionando com botão, o PIC muda de estado, o problema pode ser com o comparador, senão me engano o LM393 precisa de um resistor de pull-up (Do +5V para o pino de saída do comparador).
Da uma confirida no datasheet do LM393.

Qualquer da um toque.

Abraço

André Cruz

MensagemEnviado: 27 Mai 2010 21:34
por Pask
Você está usando alimentação simétrica para o LM393 ? Verifique com um multímetro se o pino de saída do seu comparador realmente está indo a zero.

MensagemEnviado: 28 Mai 2010 08:33
por Rodrigo.rb3s
Pask escreveu:Você está usando alimentação simétrica para o LM393 ? Verifique com um multímetro se o pino de saída do seu comparador realmente está indo a zero.


não, eu estou usando a mesma fonte do microcontrolador, e quando eu altero a luminosidade no LDR a saida sai de '0' e vai pra '1' mas no microcontrolador não acontece nada.
SENSOR1

BTFSS PORTA,3
GOTO LOOP
BSF PORTC,5
CALL PROCESSO_EM_ANDAMENTO
GOTO SENSOR2


SENSOR2
BTFSS PORTA,4
GOTO $-1
BCF PORTC,5
CALL FINALIZADO
GOTO LOOP


o programa só testa o primeiro botão e mostra a mennsagem ligado,
depois ele deveria executar o teste acima, mas mesmo jogando a tenção 5V no pino do pic ele não faz nada.

MensagemEnviado: 28 Mai 2010 08:41
por Pask
Bem. Vc já experimentou fazer o teste desses pinos usando um botão ligado do pino para a massa?
Veja como o PIC se comporta quando vc usa um botão para forçar o nível lógico zero nos pinos do PORTA.

Se funcionar com o botão, eu sugiro que você ligue os pinos de saída do comparador a um arranjo com transistores, de tal forma que, quando o comparador for 5V, o transistor fique cortado e um resistor de pull-up force o pino do PIC em 1. Quando o comparador for 0V, o transistor conduza e force o pino do PIC em 0.

MensagemEnviado: 28 Mai 2010 09:12
por MOR_AL
Olá Rodrigo.
Você está usando um resistor da saída do LM393 até o +5V?
Esse comparador tem saída em coletor aberto, precisa do resistor. Use um de 1k que deve funcionar.
MOR_AL

MensagemEnviado: 31 Mai 2010 10:31
por Rodrigo.rb3s
MOR_AL escreveu:Olá Rodrigo.
Você está usando um resistor da saída do LM393 até o +5V?
Esse comparador tem saída em coletor aberto, precisa do resistor. Use um de 1k que deve funcionar.
MOR_AL


não funciona, mesmo colocando um resistor de 10k para 5V PORTA do PIC16F76
fica em 0V...
PORTB E PORTC funcionan corretamente.

Voltando pra onde eu ainda não deveria ter saido..
PIC16F84A
e começar os testes tudo de novo...

Obrigado pela ajuda de todos, mas vou tentar com o 16f84a
porque já não tenho muito tempo pra terminar esse Projeto...[Desktop]PROJETO SENSORES REV00[/img]

MensagemEnviado: 01 Jun 2010 18:37
por Eliomarjj
Boa noite jovem, experimente colocar depois do teste do pino de entrada um delay de estabilização do pino para saber se ele realmente foi para nível 1 e lembre-se que o pic utiliza a expressão "Read, Modify and Write
" em todos os ports.

MensagemEnviado: 08 Jun 2010 07:24
por Rodrigo.rb3s
Eliomarjj escreveu:Boa noite jovem, experimente colocar depois do teste do pino de entrada um delay de estabilização do pino para saber se ele realmente foi para nível 1 e lembre-se que o pic utiliza a expressão "Read, Modify and Write
" em todos os ports.


Dias depois....

caro colegas amantes da eletronica ou profissionais da eletronica, eu queria que o pic executa-se alguma função se o nivel do PORTA for pra 1 ou pra zero e acionar um rele que está no portb atraves de um transistor mas nesse pic parece que nada funciona quando uso o PORTA.

Depois de muito insistir, percebi que quando gravo o programa acima citado e ligo o pic, com resistores de 10k pra 5V no PORTA (pull up) e testo com multimetro os pinos do PORTA do PIC 16F76 os pinos continuam em zero. E se eu gravar esse programa teste " que achei no for" abaixo, o programa funciona normalmente, mas tambem não usa o PORTA;



;SEQUENCIAL DE LEDS PIC16F76



#INCLUDE <P16F76.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_OFF & _XT_OSC
ERRORLEVEL -302
CBLOCK H'20'
TEMP1
TEMP2
ENDC
ORG 0x00
GOTO INICIO
ORG 0x04
RETFIE
INICIO
CLRF STATUS
CLRF PORTA
BSF STATUS,RP0
MOVLW B'11111111'
MOVWF TRISA
CLRF STATUS
CLRF PORTB
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISB
CLRF STATUS
CLRF PORTC
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISC
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF STATUS
MAIN
MOVLW B'00000000'
MOVWF PORTC
CALL TEMPA
MOVLW B'00000001'
MOVWF PORTC
CALL TEMPA
MOVLW B'00000010'
MOVWF PORTC
CALL TEMPA
MOVLW B'00000100'
MOVWF PORTC
CALL TEMPA
MOVLW B'00001000'
MOVWF PORTC
CALL TEMPA
MOVLW B'00010000'
MOVWF PORTC
CALL TEMPA
MOVLW B'00100000'
MOVWF PORTC
CALL TEMPA
MOVLW B'01000000'
MOVWF PORTC
CALL TEMPA
MOVLW B'10000000'
MOVWF PORTC
CALL TEMPA
GOTO MAIN
TEMPA
MOVLW H'FF'
MOVWF TEMP1
MOVLW H'2E'
MOVWF TEMP2
LOOP1
DECFSZ TEMP1,1
GOTO LOOP1
DECFSZ TEMP2,1
GOTO LOOP1
RETURN
END by "nagkiller, 2010"

ainda não achei o problema já fiz de tudo o que sugeriram, será que pode ser a pci, " eu usei a ferramenta copper pour do PCAD pra completar o espaço vazio das trilhas com o terra" será que pode ser esse o problema? como faço pra postar o leyaut da pci?

MensagemEnviado: 08 Jun 2010 09:08
por fabim
amigo, esse pic tem comparador analogico no porta ?

Se sim, pois esta usando os bits baixos é necessario desligar os comparadores.
O registrador é o CMCON e é necessario por default escrever 7 nele.

MOVLW 0x07;
MOVWF CMCON;

Se você não o fizer, o pic sempre enxerga o pino como 0...