Relógio de ponteiro com HD Velho !!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor MOR_AL » 28 Ago 2009 09:54

Andre_Cruz escreveu:MOR_AL,
... Se eu quiser andar o ponteiro de 3º em 3º por exemplo eu calculo assim:

1/(30RPS * 120) = 278 uS ...
Muito obrigado


Pense que para 1 grau ( :evil: como é que se coloca o símbolo de grau na postagem? :?: ) o período dura 556us. Para andar o ponteiro de 3 em 3 graus, o tempo deve triplicar!!!
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Andre_Cruz » 28 Ago 2009 10:23

MOR_AL,

Pra colocar o simbolo do grau na postagem, pressione Alt+1+6+7 !

Para o disco em 1800 RPM 1800/60 = 30 RPS ou 30 Hz.
Periodo (O tempo que o disco leva pra dar uma volta completa, 360º).
Periodo = 1 / 30 = 33,3 mS

Para encontrar o tempo que o disco leva pra se deslocar de 1º em 1º eu não calculo assim ?

33,3 mS / 360º = 92,5 uS

Não estou conseguindo entender porque você converte de (RPM pra RPS) Editado de RPS pra RPM !

1 / (Frequência * 60)

Quando você faz (Frequência * 60) você esta convertendo de Rotações por segundo (RPS) pra Rotações por minuto (RPM), e depois você calcular o periodo.

Me explica o porque dessa conta que eu ainda não entedi.

Agradeço a paciência e a ajuda de todos.
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor MOR_AL » 28 Ago 2009 12:01

André.
valeu pela dica do grau (º).
Para se trabalhar com taxas de frequências, a dimensão é tempo à menos 1, ou inverso do tempo, e a unidade é ciclos por segundo. Logo, ao calcular rotações, fica mais fácil fazê-lo em ciclos por segundo (c/s).

"Para o disco em 1800 RPM 1800/60 = 30 RPS ou 30 Hz.
Periodo (O tempo que o disco leva pra dar uma volta completa, 360º).
Periodo = 1 / 30 = 33,3 mS

Para encontrar o tempo que o disco leva pra se deslocar de 1º em 1º eu não calculo assim ?

33,3 mS / 360º = 92,5 uS
".

Está correto!!! Mas você vai usar graus no seu relógio, ou seria melhor converter para segundo, minuto e hora?
O período de um segundo seria 33,3ms / 60 segundos por volta = (1 / 30) * (1 / 60) = 556us. Este já é o período que o led deverá ficar aceso. O risco permanecerá aceso, mostrando um ponteiro que ocupa um segundo de espaço do disco.
Para minutos ou horas, o risco deverá ficar aceso pelo mesmo período, só que com outra cor e outra posição.

Acho que o detalhe é o seguinte.

1 - Você parte das especificações da rotação do disco do HD, que devem estar em RPM.
2 - Para conhecer as frequências (taxa de rotação do disco) e períodos do disco, sua unidade deve estar em segundos e não em minutos. Daí a necessidade de se converter a RPM para RPS (rotações por segundo).

Caso você tenha alguma dúvida (talvez eu tenha errado em alguma passagem), é só postar e me mostrar, que terei prazer em ajudá-lo.
[]'s
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Andre_Cruz » 28 Ago 2009 12:46

MOR_AL

Entendi rsrsrs
Você esta trabalhando em segundo direto, e acada segundo corresponde a 6º.

O problema agora é tirar o disco, do eixo do motor eu não sei como tirar não tem nem um parafuso, aparentemente o disco é prensado no eixo do motor.

Sem tirar o disco não tem como eu fazer a ranhura do ponteiro.

Muito obrigado

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor MOR_AL » 28 Ago 2009 17:05

Você pode fazer a ranhura com uma mini retífica. Uma opção mais simples é fazer um furo de 1/4" próximo a periferia do disco. O mostrador seria um ponto e não um ponteiro.
Quando estiver funcionando mostra pra gente :D .
[]'s
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Andre_Cruz » 28 Ago 2009 17:58

MOR_AL

O HD velho que eu tenho aqui o disco é prensado e eu não consegui desmontar :evil: !!!!
Fui na loja de informática e o rapaz me arrumou um que o disco é parafusado, ja compre a chave pra desmontar.
Estava pensando em substituir o disco de metal por um CD transparente que vem no tubo de CD virgem, eu colo um papel contact preto e deixo a ranhura no papel, as vantagens:

1) Elimina a necessidade de fazer a ranhura (Com uma dremel).
2) Diminui o ruído que a ranhura produz.
3) E não vai desbalancear o disco, fazendo ele vibrar gerando mais um pouco de ruído.

Acho que vai ser uma boa troca.

Estava pensando em usar um pino para acionar a cor Azul e no mesmo pino um botão pra ajustar a hora, e no pino que aciona o led Verde e no mesmo pino um botão pra ajustar os minutos.
Pelo menos vai dar pra ajustar o relógio rsrsrs

Os leds são acionados por MOSFET, não encontrei esse MOSFET que é "logic level" aciona diretamente com o PIC.
Ele usou o MOSFET pelo tempo de acionamento dele ser mais rápido, do que o transistor Bi polar ?

Assim que alguma coisa estiver em funcionamento eu posto aqui !

Muito agradecido pela ajuda !!!
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Wagner de Queiroz » 28 Ago 2009 21:58

Eu tenho alguns hd Clocks aqui em casa, mas é uma coisa mais tola, comprei despertador de R$ 1,99 e coloquei no lugar do disco, estou pensando em pegar o sinal do clock do relogio e jogar num mcu tolo para ele mover o braço do HD como se fosse um relogio de pendulo e depois furar a carcaça do HD e colocar um relogio binário. Mas a preguiça é maior ...

Parabéns pelo projeto, embora muita gente ja faça um projeto bem similar por ai, o fato de vc fazer o seu projeto e poder colocar novas funcionalidades é de longe um otimo trabalho. Eu pensei em fazer um relógio destes no começo, mas quando pensei no desbalanceamento do disco e depois nao poder distinguir os ponteiros dos segundos, minutos e horas me fez mudar de ideia e fazer o relógio que fiz, uma hora boto foto dos relogios que montei.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor MOR_AL » 29 Ago 2009 08:38

André.
A velocidade fica limitada pela carga capacitiva dos leds. Não acredito que haja muita diferença entre transistor e mosfet neste caso. A duração do pulso é de 556us. Isso é muito maior que o período de comutação dos dois (transistor e mosfet).

Suas sujestões são boas. Acho que se você passar uma lixa 360 na parte que simula o ponteiro, a iluminação do mesmo será mais difusa e melhor visível em mais direções.
[]'s
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Andre_Cruz » 29 Ago 2009 16:40

Wagner,

Minha intensão é de futuramente postar o diagrama esquemático e o código fonte, e permitir que os amigos aqui do forun, possa fazer o seu sem ter que começar o fonte do zero, e pode personalizar com funcionalidades de acordo com o gosto de cada um.
Um projeto GNU Open Source rsrsrs

MOR_AL,

Estou ainda mexendo na parte mecânica, estou ancioso pra colocar o relogio pra funcionar.

A idéia de lixar onde simula o ponteiro é uma boa, mas o CD que eu usei não esta as mil maravilhas, mas vou fazer sim.

Muito obrigado a todos que estão acompanhando o tópico, e aos que estão opinando.

Abraço

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

Mensagempor Wagner de Queiroz » 30 Ago 2009 11:56

André, eu estava matutando aqui, o problema de cortar o disco para fazer o ponteiro é razoavel, mas tem um problema, os tres ponteiros tem o mesmo comprimento e é um problema para leitura de alguem nao muito treinado, e saber que cor é cada ponteiro pode ser problemático a primeira vista. Bom, eu cheguei a pensar na ideia de fazer tres ranhuras com comprimentos distintos defasados a 120Graus cada e só acender o led quando a ranhura CERTA passar pelo local certo, poderia dar certo, mas como o disco roda a mais de 3000 RPM, o led teria que piscar numa frequencia alta para dar a ilusao de persistencia, talvez possa ser uma ideia bacana, para isso teria que ser detectada a passagem de uma ranhura dos segundos (que é a maior) pelo ponto 12horas pra avisar o pic onde ta o disco para ele ir acendendo os leds dos ponteiros somente quando passar a sua ranhura pelo local correto podera ser mais real, mas por outro lado o PIC teria que ser muito rapido para poder dar conta.

Por outro lado, temos o problema da rotacao do disco que pode ser arriscado, meu hd clock baseado em despertador de 1,99 costuma cair vez em quando sempre, imagine com um disco rodando, tudo bem que se tiver um vidro de protecao a coisa muda.

No meu caso eu pretendo usar uma caixa de despertador de 1,99 no lugar do motor e disco, e roubar o sinal do clock do relogio, para fazer o braço do HD se mexer como pendulo de relógio e aproveitar esse clock para animar um relógio binário, que para mim vai ser mais doido pq será só pra mim, mas os ponteiros do despertador de R$1,99 vao continuar trabalhando normalmente. Veja o prototipo atual abaixo:

Imagem

eu ainda preciso arrumar um jeito de colocar os leds na carcaça de alumínio do hd e fazer o circuito detector de clock do relógio para sincronizar o braço
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Andre_Cruz » 31 Ago 2009 10:42

Wagner,

A idéia do relogio binario é super legal !!

Eu curti !!
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Wagner de Queiroz » 31 Ago 2009 13:21

A unica encrenca do relógio binário é furar a carcaça do meu hd clock, eu nao tenho uma mesa para corte para poder fazer os furos espaçados da maneira correta e nem poderia garantir o angulo do corte para nao ficar leds tortos, vc pode ver que dependendo do tipo do relógio binário, terei que controlar muitos leds. Veja a imagem abaixo com a cara que quero que fique o relogio:

Imagem

http://www.thinkgeek.com/homeoffice/lights/59e0/

Até como um projeto standAlone ficaria bacana, de toda forma sao 20 léds para controlar.

Tem este relógio de pulso, mas nao sei se ficaria bom eu mexer na placa do relogio para colocar leds SMD

http://www.thinkgeek.com/gadgets/watches/6a17/?cpg=ab
Imagem


De toda forma, colocar um relógio Binário no HD vai ser bem legal.
Editado pela última vez por Wagner de Queiroz em 31 Ago 2009 13:39, em um total de 1 vez.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor Andre_Cruz » 31 Ago 2009 13:28

Procurei led de alto brilho aqui em minha cidade, com corrente superior a 20mA mas não encontrei, e surgiu uma dúvida rsrsrs

Dúvida 1
O tamanho do encapsulamento do LED (3mm, 5mm) influência na quantidade de luz emitida pelo LED ?

Dúvida 2
Se eu encontrar led de alto brilho de por exemplo 40mA a quantidade de luz produzidada por ele aumenta, ou o fato dele precisar de 40mA não influência na quantidade de luz emitida por ele ?

Estou pensando em usar 12 leds, fixos a cada 30º ou seja acada 1 hora, para facilitar a visualização da hora, sendo desses 12 leds, 4 azuis, 4 verdes e 4 vermelhos, cada um fixo a cada 90º.

Para acionar os 4 leds pensei em usar um resistor limitador de corrente ligado nos 4 leds e dos leds em um BC337 que será acionado pelo PIC, assim consigo manter a mesma corrente nos 4 leds trabalhando com o brilho total.

Para testar a eficiencia dos led, se mantidos acessos constantemente os 4 leds de mesma cor, o disco deve assumir a cor do dos leds ligado?
Tipo como se o ponteiro estivese em todas as posições do relogio, esta correto esse meu pensamento ?

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Andre_Cruz » 01 Set 2009 20:55

Pessoal eu estou mexendo no programa do relogio, e esta acontecendo um bug que não consigo encontrar.

Fiz o programa, para teste, e ele deve acionar os leds para acender o ponteiro do relogio, toda vez que a ranhura passar pelo sensor, que curiosamente liga o sensor na posição zero que eu quero e aciona na posição 1 que eu não quero, e esse problema só acontece com o zero.

Segue o código fonte:

Código: Selecionar todos
; PROTÓTIPO RELOGIO DE PONTEIRO
;
; INTERUPÇÃO DE MUDANÇA DE ESTADO EM GPIO3 DETECTA A POSIÇÃO DO PONTERIO
; TIMER 0 GERA A BASE DE TEMPO DE 185uS CORRESPONDENTE A 1SEGUNDO DO RELOGIO OU 6º
; TIMER 1 GERA A BASE DE TEMPO DE 1 SEGUNDO
;
; ESTE PROGRAMA DE TESTE, DEVE ACENDER O PONTEIRO TODA VEZ QUE A RACHURA PASSAR PELO SENSOR DE ROTAÇÃO
; 31/08/2009
; ESCRITO POR: ANDRÉ NOBREGA DA CRUZ

 #define __12F675

 include <p12f675.inc>
 errorlevel  -302              ; Não mostra o Error 302

 __CONFIG _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;   _INTRC_OSC_NOCLKOUT
; Config
; Code Protect ligado
;
; BOR Desligado
; Master Clear MCRL Desligado
; Watch Dog Timer WDT Desligado
; Power Up Timer PWRTE Ligado
; Oscilador Externo 20MHz

;DEFINES

#DEFINE LED_AZUL      GPIO,0      ; PINO 7
#DEFINE LED_VERDE      GPIO,1      ; PINO 6
#DEFINE LED_VERMELHO      GPIO,2      ; PINO 5
#DEFINE   ROTACAO         GPIO,3      ; PINO 4

#DEFINE   BANK1   BSF        STATUS,RP0      ; SELECIONA BANCO 1
#DEFINE   BANK0   BCF      STATUS,RP0      ; SELECIONA BANCO 0
; CONSTANTES


;VARIAVEIS
   CBLOCK   0x020
      P_PONTEIRO               ; ARMAZENA A POSIÇÃO DO PONTEIRO EM SEGUNDOS
      SEG                     ; ARMAZENA OS SEGUNDOS   
      FLAG   
      PRESCALER_TMR1
      DELAY_AC
; PARA A INTERUPÇÃO
      BACKUP_W
      BACKUP_STATUS
      BACKUP_FSR
      BACKUP_PCLATH

   ENDC

; FLAGS
#DEFINE BORDA_ROT      FLAG,0      
#DEFINE ACIONOU_AZUL      FLAG,1            ; FLAG QUE INDICA 0 -> AINDA NÃO ACIONOU LED AZUL 1 -> JA ACIONOU LED AZUL
#DEFINE ACIONOU_VERDE      FLAG,2            ; FLAG QUE INDICA 0 -> AINDA NÃO ACIONOU LED VERDE 1 -> JA ACIONOU LED VERDE
#DEFINE ACIONOU_VERMELHO   FLAG,3            ; FLAG QUE INDICA 0 -> AINDA NÃO ACIONOU LED VERMELHO 1 -> JA ACIONOU LED VERMELHO

; CONSTANTES
TMR1_HIGH   EQU   HIGH (.65536-.62500)
TMR1_LOW   EQU   LOW  (.65536-.62500)   ; VALOR PARA CONTAGEM DE
                  ; 62500 CICLOS DE CONTAGEM
                  ; DO TMR1 (PROGRAMADO P/
                  ; PRESCALER DE 1:8)
          
; VETOR DE RESET
      ORG     0x000      

      NOP
      GOTO   CONFIG_CPU   
             
; VETOR DE INTERUPÇÂO
      ORG    0x004

;SALVA REGISTRADORES IMPORTANTES
         MOVWF        BACKUP_W
      SWAPF       STATUS,W
      MOVWF      BACKUP_STATUS
      MOVF      FSR,W
      MOVWF      BACKUP_FSR
      MOVF      PCLATH,W
      MOVWF      BACKUP_PCLATH
      CLRF      PCLATH
      CLRF      STATUS

INT_TMR1
      BTFSS      PIR1,TMR1IF            ; É INTERUPÇÃO DE TIMER 1 ?
      GOTO      SENSOR               ; NÃO TESTA PRA VER SE INTERUPÇÃO DE GPIO3
                                 ; SIM
      
      MOVLW   TMR1_HIGH
      MOVWF   TMR1H
      MOVLW   TMR1_LOW
      MOVWF   TMR1L                  ; RECARREGA TIMER 1 PRA CONTAR 0,1 S OU 100mS
                                 
      BCF      PIR1,TMR1IF               ; LIMPA FLAG DA INTERUPÇÃO DE TIMER 1

      DECFSZ   PRESCALER_TMR1,F         ; 1 SEGUNDO ?
      GOTO   SAI                     ; NÃO, ENTÃO SAI DA INTERRUPÇÃO
                                 ; SIM
      MOVLW   .10
      MOVWF   PRESCALER_TMR1            ; REINICIA O PRESCALER       
;************************************************************************************************************
      INCF   SEG,F                  ; INCREMENTA OS SEGUNDOS      

      GOTO   SAI

SENSOR
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      BTFSS   INTCON,GPIF            ; É INTERUPÇÃO DE MUDANÇA DE ESTADO EM GPIO3 ?
      GOTO   T_TIMER               ; NÃO TESTA SE É INTERUPÇÃO DE TIMER 0
                              ; SIM
      BCF      INTCON,GPIF            ; LIMPA FLAG DA INTERUPÇÃO DE MUDANÇA DE ESTADO EM GPIO3
      
;LE BORDA 
      BTFSC   GPIO,3               ; SENSOR ESTA EM 0
      GOTO   SENSOR_ALTO            ; NÃO, ENTÃO ESTA EM 1
                              ; SIM
      BTFSS   BORDA_ROT            ; FLAG DA BORDA DE SUBIDA ESTAVA EM 1 ?
      GOTO   SENSOR_ALTO            ; NÃO, ESTAVA EM 1
                              ; SIM
      BCF      BORDA_ROT            ; ATUALIZA A BORDA
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ;CLRF   P_PONTEIRO            ; REINICIA A POSIÇÃO DO PONTEIRO   
      MOVLW   .0
      MOVWF   P_PONTEIRO
   
      GOTO    SAI
SENSOR_ALTO
      BSF      BORDA_ROT            ; ATUALIZA BORDA_ROT E SAI
      GOTO   SAI

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
T_TIMER      
; INTERUPÇÃO DO TIMER0 ?
      BTFSS   INTCON,T0IF
      GOTO   SAI                  ; NÃO, SAI   
      
      
                              ; SIM, TRATA INTERUPÇAO DE TIMER 0
           MOVLW   .36                  
           MOVWF   TMR0               ; REINICIA O TIMER 0
      
TESTA_SEG
; ESTA NA HORA DE ACIONAR O PONTEIRO DOS SEGUNDOS ?
      MOVF   SEG,W               
      XORWF   P_PONTEIRO,W            
      BTFSS   STATUS,Z            ; POSIÇÃO DO PONTEIRO IGUAL A SEGUNDO ATUAL ?
      GOTO   SAI_TMR0            ; NÃO, TESTA MINUTO
                              ; SIM

; ACIONA LED CORRESPONDENTE AO PONTEIRO DOS SEGUNDOS

      BSF      LED_AZUL
      MOVLW   .20
      MOVWF   DELAY_AC

; DELAY DE 20uS POR INSTRUÇÃO
DELAY
      NOP
      NOP
      NOP
      NOP                        ; 1 uS
      DECFSZ   DELAY_AC,F
      GOTO   DELAY

      BCF      LED_AZUL
      
      GOTO   SAI_TMR0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SAI_TMR0
; PONTEIRO ANDOU 6º OU 1 SEGUNDO
      INCF   P_PONTEIRO,F         ; INCREMENTA A POSIÇÃO DO PONTEIRO
      BCF      INTCON,T0IF            ; LIMPA FLAG
      
SAI
; RESTAURA OS VALORES DOS REGISTRADORES
      MOVF   BACKUP_PCLATH,W
      MOVWF   PCLATH
      MOVF   BACKUP_FSR,W
      MOVWF   FSR
      SWAPF   BACKUP_STATUS,W
      MOVWF   STATUS
      SWAPF   BACKUP_W,F
      SWAPF   BACKUP_W,W
      RETFIE               ; RETORNA
                     
CONFIG_CPU 
; Inicia a configuração da CPU         
      BANK1
      CLRF    ANSEL                  

      MOVLW     B'00001000'         
      MOVWF   TRISIO                    ; Configura I/O

      MOVLW   B'01101000'         ; CONFIGURA AS INTERUPÇÕES
      MOVWF   INTCON               
                            ; <7> GIE DESLIGADA
                     ; <6> INTERUPÇÕES PARALELAS LIGADAS
                     ; <5> INTERUPÇÃO DE TIMER 0 LIGADA
                     ; <4> INTERUPÇÃO DE MUDANÇA DE ESTADO EM GPIO2 DESLIGADA
                     ; <3> INTERUPÇÕES DE GPIO DESLIGADAS
                     ; <2> FLAG DO OVER FLOW DO TIMER 0
                     ; <1> FLAG DO EVENTO DA INTERUPÇÃO DE GPIO2
                     ; <0> FLAG DO EVENTO DE INTERUPÇÃO DE GPIO

          MOVLW    B'10010001'         ; CONFIGURA OS PERIFERICOS
         MOVWF    OPTION_REG
                     ; <7> PULL-UP DESLIGADOS
                     ; <6> INTERUPÇÃO DE GPIO2 NA BORDA DE DESCIDA 0
                     ; <5> TIMER 0 OPERANDO COM O CLOCK INTERNO
                     ; <4> CLOCK PARA O TIMER 0 DE GPIO2 DESLIGADO
                     ; <3> PRESCALER NO TIMER 0
                     ; <2><1><0> PRESCALER DE 1:4 NO TIMER 0
                              
      BSF      PIE1,TMR1IE
                              
             MOVLW   B'00001000'
      MOVWF   IOC            ; LIGA A INTERUPÇÃO DE GPIO3

      MOVLW   B'00001000'
           MOVWF   WPU            ; LIGA A INTERUPÇÃO DE GPIO3

      BANK0

      MOVLW   0x07               
      MOVWF   CMCON                    ; DESLIGA COMPARADOR INTERNO
         
      CLRF    ADCON0                    ; DESLIGA CONVERSOR A/D
         
      MOVLW   B'00110000'            
      MOVWF   T1CON
                     ; <6> TIMER1 GATE DESLIGADO
                     ; <5><4> PRESCALER 1:4
                     ; <3> LC OSC DESLIGADO
                     ; <2> CLOCK NÃO SINCRONIZADO COM O CLOCK EXTERNO (PINO)
                     ; <1> CLOCK INTERNO
                     ; <0> TIMER 1 DESLIGADO

; INICIALIZA AS VARIAVEIS E FLAGS
           CLRW                        ; LIMPA ACUMULADOR "W"
            CLRF   GPIO                  ; LIMPA AS PORTAS GPIO       
   
           MOVLW   .36
           MOVWF   TMR0            ; INICIALIZA TIMER 0

      MOVLW   .10
      MOVWF   PRESCALER_TMR1

; LÊ O ESTADO ATUAL DO SENSOR DE ROTAÇÃO
      BTFSS   GPIO,3            ; GPIO3 IGUAL A 1 ?
      GOTO   BORDA_ROT0         ; NÃO, ZERO
                     ; SIM
      BSF   BORDA_ROT
      GOTO   CON
BORDA_ROT0
      BCF   BORDA_ROT
CON
      BSF   INTCON,GIE         ; LIGA GIE

      MOVLW   .0
      MOVWF   SEG            

MAIN
      NOP

      GOTO   MAIN

    END   



Agradeço a ajuda de todos.

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Anterior

Voltar para PIC

Quem está online

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

cron

x