ajuda

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

ajuda

Mensagempor mamp » 13 Dez 2010 14:20

Peço uma ajuda pra voçes.
Eu estou tentando fazer um projeto com um pic 12f675 e achei que dava pra eliminar alguns componentes, porém o projeto não funfou, então eu desejo saber se a eliminação dos componentes comprometeu o funcionamento do projeto.
segue abaixo o link com o diagrama do projeto original e do modificado (sem alguns componentes)

http://www.servidorbigua.comli.com/adic ... ficado.jpg

isso deveria funcionar normalmente né?
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor ÁgioFelipe » 13 Dez 2010 14:41

Era para funcionar sim.
Vc pegou o fonte pronto? Como é o seu circuito de alimentação?
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor chrdcv » 13 Dez 2010 14:49

A eliminação dos componentes "R7" e "LED Sensor1" não interfere no funcionamento, visto ser somente um resistor limitador e LED conectados em um pino de saída - pino 3 do uC.

Apesar de acionados por um mesmo pino de saída, os circuitos do sensor 0 e 1 são conectados em diferentes pinos de entrada (pinos 6 e 7). Portanto, ao eliminar o circuito 1, tenha em mente que o pino do uC ficou "flutuando" e dependendo de como o firmware foi implementado, há possibilidade de funcionemento inesperado.

O código não deve ser muito grande, poste aqui para darmos uma olhada!

christian
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13

Mensagempor mamp » 13 Dez 2010 15:37

pagina do projeto:
http://afonsomiguel.com/content/sensor-infra-vermelho

arquivo .asm:
http://afonsomiguel.com/sites/default/f ... licado.zip

Eu só nao copiei e colei o codigo porque to no trampo e aqui nao tem o mplab.
Valeu!
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor ze » 14 Dez 2010 07:16

talvez isso possa ajudar voce a ajudar alguém a te ajudar
talvez... se voce explicasse como deveria funcionar e como não ´funfou´... (abrev.+feia!). aliás, o que é 'funfar´pra voce neste circuito. ou depois de tirar as peças, como esperava que funcionasse...
preguiça de clicar no link pode não se só minha
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor mamp » 14 Dez 2010 08:02

Meu caro amigo lellis:

Muito obrigado pela sua atenção!
Como já havia informado: só não postei o código porque eu estava no trabalho. Que tipo de trabalho seria? de matematica de portugues? consertando carros? Sou estudande ou trabalhador? Estaria eu na clínica atendendo pacientes?) ahhh! se eu escrever "trampo" a galera vai entender? Então vamoa escrever "trampo"!! As gírias tem algum propósito com certeza. É por isso que eu gosto de usar. E não é proibido nesse forum ok? As linguas evoluem! se não fossem por elas estaríamos falando latim ainda! E nunca acuse ninguém de preguiçoso assim aleatóriamente. Como é que alguém que faz algo por hobby pode ser um preguiçoso? Me explique.
Ps: Desculpe não ter explicado o que o circuito faz, é que eu achei que a avaliacao do circuito, se ele iria funcionar ou nao sem aquelas pecas, ia ser bem mais facil.


-------------------------------------------
O que o circuito faz:

O pic faz um led infravermelho piscar na frequencia de 600 hz e isso é captado por um fototransistor que reage a tal estimulo (600 hz), se o fototransistor deixa de reagir ao sinal, o pic faz com que um outro led comum acenda pra indicar que o fototransistor nao esta recebendo o sinal, (não recebe porque um objeto se interpôs entre o led infravermelho e o fototransistor).


-------------------------------------------
Vamos ao código:

Tem dois codigos no projeto, eu nao tinha aberto eles pois tentei usar direto o arquivo .hex que ja vinha pronto.
Na real eu nao sei se o .hex é gerado a partir dos dois ou de um so deles mas vou postar os dois. (o segundo eu coloco em outro post pra nao misturar):




include <p12F675.inc>
include <general.inc>

EXTERN Contador,Acum0,Acum1,Timer0,Timer1

Reset CODE H'0'
goto main

MainCode CODE
; ***************************************
; ********* RESET Vector ****************
; ***************************************
main:
BANKSEL OSCCAL
call 3FFh ;Recupera calibração do oscilador
movwf OSCCAL

movlw b'00001011' ;Entradas digitais -> GP0=Foto0; GP1=Foto1; GP2=LED; GP3=?; GP4=Out0; GP5=Out1
movwf TRISIO

movlw b'00010011' ;Entradas analógicas -> ANSEL=0x13
movwf ANSEL

movlw 08H ;Internal instruction cycle clock (CLKOUT); Prescaler is assigned to the WDT
movwf OPTION_REG

BANKSEL CMCON
movlw 0x7 ;Desabilita comparador
movwf CMCON

call InicializaVariaveis

clrf Timer0
clrf Timer0+1
clrf Timer0+2
clrf Timer0+3
clrf Timer1
clrf Timer1+1
clrf Timer1+2
clrf Timer1+3

movlw b'10000001' ;Configura CAD -> Right justified;VREF=VDD;Channel 00(AN0);ADON
movwf ADCON0

movlw TIMER_CONSTANT ;Inicializa Temporização do TIMER0
movwf TMR0

movlw b'10100000' ;Habilita interrupção do timer 0 (INTCON = 0xA0)
movwf INTCON

loop:
goto loop ;Nada (loop sem fim)


InicializaVariaveis:
GLOBAL InicializaVariaveis
BANKSEL GPIO ; Garante Banco 0
movlw .1
clrf Contador ; Zera contador
clrf Acum0 ; Zera acumulador0
clrf Acum0+1
clrf Acum0+2
; clrf Acum0+3
movwf Acum0+3
clrf Acum1 ; Zera acumulador1
clrf Acum1+1
clrf Acum1+2
; clrf Acum1+3
movwf Acum1+3
bcf GPIO,LED ; Apaga LED
return

org 0x3FF
dt 0xFF ; calibration value
end
Editado pela última vez por mamp em 14 Dez 2010 08:25, em um total de 5 vezes.
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor mamp » 14 Dez 2010 08:08

Conforme combinado, aí vai o segundo código que consta no projeto do mplab:




include <p12F675.inc>
include <general.inc>

extern InicializaVariaveis

UDATA_SHR
Contador RES 1 ; Contador do numero de amostras (0~255)
Acum0 RES 4 ; Acumulador da integração do fotosensor 0
Acum1 RES 4 ; Acumulador da integração do fotosensor 1
Timer0 RES 4 ; Temporizador do monoestável 0
Timer1 RES 4 ; Temporizador do monoestável 1


W_TEMP RES 1 ; Registros temporários para interrupção
STATUS_TEMP RES 1
GLOBAL Contador,Acum0,Acum1,Timer0,Timer1

; Subtrai uma variavel de 32 bits do valor do CAD (16 bits)
Sub32_CAD macro Variavel
BANKSEL ADRESL
movf ADRESL,w
BANKSEL Variavel
subwf Variavel,f

BANKSEL ADRESH
movf ADRESH,w
btfss STATUS,C
incf ADRESH,w
BANKSEL Variavel
subwf Variavel+1,f
btfss STATUS,C
decf Variavel+2,f
btfss STATUS,C
decf Variavel+3,f
endm

; Soma uma variavel de 32 bits e o valor do CAD (16 bits)
Add32_CAD macro Variavel
BANKSEL ADRESL
movf ADRESL,w
BANKSEL Variavel
addwf Variavel,f

BANKSEL ADRESH
movf ADRESH,w
btfsc STATUS,C
incf ADRESH,w
BANKSEL Variavel
addwf Variavel+1,f
btfsc STATUS,C
incf Variavel+2,f
btfsc STATUS,C
incf Variavel+3,f
endm

; Decrementa uma variável de 32 bits
Dec32 macro Variavel
BANKSEL Variavel
movlw .1
subwf Variavel,f
btfss STATUS,C
subwf Variavel+1,f
btfss STATUS,C
subwf Variavel+2,f
btfss STATUS,C
subwf Variavel+3,f
endm

EhZero macro Variavel
movf Variavel,w ; Verifica se Timer0 é ZERO
iorwf Variavel+1,w
iorwf Variavel+2,w
iorwf Variavel+3,w
endm

; Inicializa uma variável de 32 bits
Init32 macro Variavel,Valor
BANKSEL Variavel
movlw low Valor
movwf Variavel
movlw low (Valor >> .8)
movwf Variavel+1
movlw low (Valor >> .16)
movwf Variavel+2
movlw low (Valor >> .24)
movwf Variavel+3
endm


;Compara uma variavel de 32 bits com LIMITE_VALOR
;retorna C=1 se Variavel >= LIMITE_VALOR
Compara32_LIMITE_VALOR macro Variavel
BANKSEL Variavel
movlw LIMITE_VALOR_byte0
subwf Variavel,w

movlw LIMITE_VALOR_byte1
btfss STATUS,C
addlw 1
subwf Variavel+1,w

movlw LIMITE_VALOR_byte2
btfss STATUS,C
addlw 1
subwf Variavel+2,w

movlw LIMITE_VALOR_byte3
btfss STATUS,C
addlw 1
subwf Variavel+3,w

endm

CODE H'4'
InterrupcaoTIMER0:
; Salva contexto
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP

BANKSEL INTCON ; Zera flag de interrupção
bcf INTCON,T0IF

; ****************************************
; ******* CRITICAL TIME SESSION **********
; ****************************************
movlw TIMER_CONSTANT ; Reinicializa o TIMER0
movwf TMR0

incf Contador,f ; Incrementa o contador

btfss GPIO,LED
goto LED_desligado
LED_ligado:
call CAD ; converte canal 0
bsf ADCON0,CHS0 ; CAD canal 1
Sub32_CAD Acum0 ; Acum0 -= CAD
call CAD ; converte canal 1
bcf ADCON0,CHS0 ; CAD canal 0
Sub32_CAD Acum1 ; Acum1 -= CAD
goto fim_teste_LED
LED_desligado:
call CAD ; converte canal 0
bsf ADCON0,CHS0 ; CAD canal 1
Add32_CAD Acum0 ; Acum0 += CAD0
call CAD ; converte canal 1
bcf ADCON0,CHS0 ; CAD canal 0
Add32_CAD Acum1 ; Acum0 += CAD0
fim_teste_LED:

movlw 0x3 ; Contador&0x3==0?
andwf Contador,w
gotoNZ fim_int

BANKSEL GPIO ; Contador&0x4?
btfss Contador,2
goto DesligaLED
LigaLED:
bsf GPIO,LED ; Liga LED
goto TestaLimites
DesligaLED:
bcf GPIO,LED ; Desliga LED

TestaLimites:
movlw LIMITE_AMOSTRAS ; Contador >= LIMITE_AMOSTRAS?
subwf Contador,w
gotoNC fim_int

call Verifica_Acum_LimiteValor0
call Verifica_Acum_LimiteValor1

call InicializaVariaveis
fim_int
; Restaura contexto
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
retfie

;------------------------------------------------------
CAD: ; Realiza a conversao CAD
bsf ADCON0,GO ; Dispara conversao
aguardaConcluirCAD:
btfsc ADCON0,GO ; Aguarda concluir conversão
goto aguardaConcluirCAD
return

;------------------------------------------------------
Verifica_Acum_LimiteValor0:

Continua:
Compara32_LIMITE_VALOR Acum0
if TIPO==0
MESSG "Compilando versão FEIXE REFLETIDO"
gotoC Acum0EhMaiorOuIgual
else
MESSG "Compilando versão FEIXE DIRETO"
gotoNC Acum0EhMaiorOuIgual
endif
Acum0EhMenor:
EhZero Timer0
gotoNZ ContinuaMono0
bcf GPIO,Out0 ; Apaga o OUT0
goto VALV0_FIM
ContinuaMono0:
Dec32 Timer0
goto VALV0_FIM

Acum0EhMaiorOuIgual:
bsf GPIO,Out0 ; Acende o OUT0
Init32 Timer0,MON_0
VALV0_FIM:
return

;------------------------------------------------------
Verifica_Acum_LimiteValor1:
TestaLimites2:
Compara32_LIMITE_VALOR Acum1
if TIPO==0
gotoC Acum1EhMaiorOuIgual
else
gotoNC Acum1EhMaiorOuIgual
endif

Acum1EhMenor:
EhZero Timer1
gotoNZ ContinuaMono1
bcf GPIO,Out1 ; Apaga o OUT1
goto VALV1_FIM
ContinuaMono1:
Dec32 Timer1
goto VALV1_FIM

Acum1EhMaiorOuIgual:
bsf GPIO,Out1 ; Acende o OUT2
Init32 Timer1,MON_1
VALV1_FIM:
return

end
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor ze » 14 Dez 2010 08:52

viu só. não foi tão difícil.
sim é permitido escrever o que quiser. mas também me é permitido expressar opinião alguma gírias sem que comprometa de modo significativo nosso relacionameto.
poréns: dificuldade em tratar com gente nervosinha e asm. a 1ª parte sempre abro uma excessão e perdoo, mas a 2ª...

o que voce vai ler é chover no molhado (destas gírias eu gosto) e 'pra não dizer que não falei das flores', retire a parte do codigo que trata do circuito retirado e veja o resultado.

off topic: gostei da descrição do funcionamento. ele tem um filtro por sw de 600hz? pra evitar interferência? é isso? como o ad é usado para tratar disso? ou ele é usado para medir a intensidade de luz ou escuridão? caso queira (ou possa, voce ou alguém não muito preguiçoso=eu hobysta ou não) , peço a gentileza descrever o funcionameto pois me interessei pelo projeto. tenho um parecido que usa uma abordagem = mas !=

se a lingua evolui, a linguagem também. já pensou em c? se 1 dia chegar lá, conte comigo!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor vtrx » 14 Dez 2010 10:57

Engraçado,no link tem um vídeo demosntrando tudo,alias,ta bem completo.~
Monte o circuito original pára testar ou peça pro lellis enviar o mesmo projeto completo em C e tomara que não passe mais de um mes (15 dias para um Led e 15 para o outro).
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor andre_luis » 14 Dez 2010 11:29

vtrx escreveu:...Monte o circuito original pára testar...


mamp,

Essa dica é interessante, pois os componentes retirados não deveriam interferir. Desse modo, iremos isolar erro de montagem por erro de (re)projeto.

Pode ser que a polarização do Q1 pelo R1 esteja no limiar da saturação, e com essa retirada pode estar entrando na região linear de condução. Para testar, diminui um pouco o valor de R1.

Voce deve ficar atento ao fato de que o ganho do transistor BC54x é definido pelo sufixo ( a~100 / b~250 / c~600 ). Pode ser que o projetista tenha inicalmente usado o BC548C e voce esteja usando o BC548A.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor mamp » 14 Dez 2010 16:14

Era para funcionar sim.Vc pegou o fonte pronto? Como é o seu circuito de alimentação?Vc pegou o fonte pronto? Como é o seu circuito de alimentação?

Desculpe ter respondido topicos postados apos o seu. Rapaiz! eu tenho certeza que era pra funcionar! Eu peguei o .hex já pronto que vem disponibilizado na página do projeto. O meu circuito de alimentação é de 4 baterias recarregaveis de 1,2 volts cada em serie, total = 4.8 volts
os arquivos estao no final da pagina deste link:
http://afonsomiguel.com/content/sensor-infra-vermelho

Apesar de acionados por um mesmo pino de saída, os circuitos do sensor 0 e 1 são conectados em diferentes pinos de entrada (pinos 6 e 7). Portanto, ao eliminar o circuito 1, tenha em mente que o pino do uC ficou "flutuando" e dependendo de como o firmware foi implementado, há possibilidade de funcionemento inesperado.

uhmm, o pino 7 (gp0) ficou flutuando, entendi.
segundo a ideia do projeto, o sensor 1 nao interfere no funcionamento do sensor 0 e vice versa. esse circuito deve funcionar como um alarme de barreira infravermelho, onde é enviado um sinal de um led infravermelho e um fototransistor recebe o sinal (se o sinal esta sendo recebido, um outro led comum fica apagado, mas se o sinal é obstruido por um objeto por exemplo este led comum é aceso pra indicar tal obstrucao.
acredito que o projetista tenha usado um pic pra confeccionar duas unidades do alarme, eu tenho certeza, analisando a idéia do projeto, (nao o código) que os dois sensores não interagem.


Monte o circuito original pára testar

Estas peças são muito difíceis de achar aqui onde eu moro e eu só tenho um til32 e um til78. Portanto não vou montar o circuito original.


gostei da descrição do funcionamento. ele tem um filtro por sw de 600hz?pra evitar interferência?

não sei o que é sw. Sim, é pra evitar interferencia.

como o ad é usado para tratar disso?

Sou iniciante, não sei o que é ad

peço a gentileza descrever o funcionameto pois me interessei pelo projeto. tenho um parecido que usa uma abordagem

http://afonsomiguel.com/content/sensor-infra-vermelho

Pode ser que a polarização do Q1 pelo R1 esteja no limiar da saturação, e com essa retirada pode estar entrando na região linear de condução.

Gostei muito da idéia, acredito que deva ser considerado com certeza, mas eu acho que ta acontecendo um erro antes desse ainda, pois o transistor é responsavel por fazer o led infravermelho emitir o sinal, e já que o objetivo do circuito é detectar uma interrupcao no sinal, o fato do resistor nao funcionar iria interromper o sinal e deveria fazer o led comum (pino 2) acender, só que o mesmo nunca ficou aceso.
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor andre_luis » 14 Dez 2010 17:34

mamp escreveu:...eu acho que ta acontecendo um erro antes desse ainda, pois o transistor é responsavel por fazer o led infravermelho emitir o sinal, e já que o objetivo do circuito é detectar uma interrupcao no sinal, o fato do resistor nao funcionar iria interromper o sinal e deveria fazer o led comum (pino 2) acender, só que o mesmo nunca ficou aceso.


Bom, para saber se ao menos o programa está rodando, seria aconselhável utilizar o pino 4 do PIC como saída de Debug.
Ex.:
Compila 1 vez, força para 0
Compila 1 vez, força para 1
Se detectar diferença, ao menos já temos noção se o firmware está executando.

mamp escreveu:...Estas peças são muito difíceis de achar aqui onde eu moro e eu só tenho um til32 e um til78. Portanto não vou montar o circuito original...


Então recai no panorama que mencionei antes. Se o circuito não é o original, já não temos como isolar o problema, mas vamos por passos...Algum sintoma do circuito indica que o firmware está executando ? ( tipo, aparece um sinal de 600Hz no pino 5 ? )

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor mamp » 16 Dez 2010 16:48

andre_teprom:

No 12F675 o pino 4 é o GP3 que só pode ser usado como entrada.assim é o único que sobrou e não vai dar pra usá-lo como como a saída de Debug.

Não aparece sinal algum no pino 5, eu utilizei o visor de uma camera digital para detectar o sinal infravermelho (invisivel a olho nu) porem o led nao acende quando o firmware deveria estar executando. Os leds comuns tambem não acendem vou continuar testando.

Você havia falado do transistor, o que eu to usando é o BC548b
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Mensagempor andre_luis » 16 Dez 2010 17:14

mamp escreveu:...Não aparece sinal algum no pino 5...porem o led nao acende quando o firmware deveria estar executando. Os leds comuns tambem não acendem vou continuar testando...


Sugiro voce criar um programa simples ( tipo pisca-pisca ), compilar e gravar nesse circuito. Nas saídas, medir com um multimetro, nas entradas, alternar entre GND e VCC e habilitar a saída em funçao disso. Tipo : Se entrada =1, saída =0, e vice-versa.
Com eletrônica, temos de partir com pelo menos de um elemento confiável, e até o momento, não sabemos se o problema está na gravação do programa ou no circuito externo ao uC.

mamp escreveu:...eu utilizei o visor de uma camera digital para detectar o sinal infravermelho (invisivel a olho nu)...


Sua inventividade é louvável, e também reconhecivel seus esforços, mas há de convir que precisamos ao menos de alguma ferramenta confiável, própria para uma bancada. Em situações de sinal alternado, um multimetro seria o mínimo, se não tiver um osciloscópio. Exiba os testes sugeridos numa base de tempo acima da resposta do multimetro, tipo uns 2 segundos para cada nível.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor mamp » 17 Dez 2010 16:10

Muito bem.
Considero o tópico RESOLVIDO pois ao analisar o video:
http://afonsomiguel.com/sites/default/f ... rativo.wmv
O vídeo do link acima mostra claramente: metade dos componentes faltando e tudo funcionando bonitinho, tal e qual o circuito em:
http://www.servidorbigua.comli.com/adic ... ficado.jpg

Porém vou manter o tópico em pé porque ainda terei que fazer o circuito funcionar de verdade, já que agora provou-se que realmente ele funciona estando só pela metade.

A única diferença entre o circuito proposto por mim e o original é que o meu elimina o sensor 1 e o seu respectivo led indicador, já o construído pelo autor do projeto elimina os mesmos componentes, só que do sensor 0 (e o seu respectivo led indicador).

Vou montar o circuito igual o do vídeo, se não der certo seguirei as orientações do andré, Acho que o meu multímetro não tem frequencímetro.
mamp
Bit
 
Mensagens: 34
Registrado em: 13 Set 2010 15:43

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x