Pesquisar este blog

domingo, 15 de abril de 2012

sensor de passagem por zero (zero cross)

 

bannerfans_206421 segue um video de um sensor de passagem por zero muito bom para quem quer fazer um dimer com microcontrolador

 

segunda-feira, 27 de fevereiro de 2012

circuito impresso e layout receptora protocolo rc5

e finalmente consegui um tempo para fazer este pcb tão esperado da placa receptora do protocolo rc5
e vo deixar aqui para download
ir_controle.asm      codigo fonte em assembly
ir_controle.HEX    codigo para ser gravado no pic
placa receptora
placa de reles para acionamentos
qualquer duvida é so entrar em contato e vamo comenta ai gente rsrsrs

quinta-feira, 16 de fevereiro de 2012

segunda-feira, 13 de fevereiro de 2012

teclado matricial

hoje iremos falar sobre teclado matricial (aqueles que é usado em telefones) item muito usado em sistemas que se desejam um dispositivo de entrada de dados e interfaces com o usuario abaixo segue um descritivo de como é estes dispositivo internamente:



e seu aspecto fisico:






este dispositivo é composto de 3 colunas e 4 linhas
uma forma de se ler qual tecla foi precionada esta descrita no roteiro abaixo:


roteiro
para identificar que tecla foi utilizada usaremos
RA0-RA1-RA2 como saida para alterar o nivel logico
da coluna 1-2-3 e
RB0-RB1-RB2-RB3 como entrada para ler a tecla
primeiro colocamos todas as  colunas em nivel alto
(RA0-1-2-3)
lembrando que devemos colocar resistores de pull-down
no (RA0-1-2)
depois colocamos coluna 1 em nivel baixo (0)
e escaneamos RB0-RB1-RB2-RB3
lembrando que devemos colocar resistores de pull-up
nos portosRB0-RB1-RB2-RB3
quando o sistema estiver nesta condição a entrada que estiver em nivel baixo
sera considerado uma tecla precinada da coluna 1
temos 4 condições possiveis

PRIMEIRA
1=1
4=0
7=0
#=0
SEGUNDA
1=0
4=1
7=0
#=0
TERCEIRA
1=0
4=0
7=1
#=0
QUARTA
1=0
4=0
7=0
#=1


viram como é simples e isto se repete para as outras colunas
abaixo tem um trecho de um codigo em assembly

;**************************************VARREDURA C1******************************************
  BCF C1      ;COLUNA1 EM NIVEL BAIXO
  BSF C2       ;COLUNA2 EM NIVEL ALTO
  BSF C3       ;COLUNA3 EM NIVEL ALTO
  NOP
  BTFSS L1
  GOTO S1           
  NOP
  BTFSS L2
  GOTO S2           
  NOP
  BTFSS L3
  GOTO S3  
  NOP
  BTFSS L4
  GOTO S4  

;**************************************VARREDURA C2******************************************
  BSF C1       ;COLUNA1 EM NIVEL ALTO
  BCF C2      ;COLUNA2 EM NIVEL BAIXO
  BSF C3       ;COLUNA3 EM NIVEL ALTO
  NOP
  BTFSS L1
  GOTO S5  
  NOP
  BTFSS L2
  GOTO S6  
  NOP
  BTFSS L3
  GOTO S7  
  NOP  
  BTFSS L4
  GOTO S8  
  NOP
;**************************************VARREDURA C3******************************************
  BSF C1         ;COLUNA1 EM NIVEL ALTO
  BSF C2         ;COLUNA2 EM NIVEL ALTO
  BCF C3         ;COLUNA3 EM NIVEL BAIXO
  NOP
  BTFSS L1
  GOTO S9 
  NOP
  BTFSS L2
  GOTO S10  
  NOP
  BTFSS L3
  GOTO S11  
  NOP
  BTFSS L4
  GOTO S12  
  NOP
  GOTO S13  


AGORA VAMOS FAZER UMA PERGUNTA NÃO SERIA MAIS FACIL COLOCARMOS UMA ENTRADA PARA CADA TECLA?
vamos analisar :
temos 12 tecla
seria nescessario 12 entradas  usando o sistema de matricial usamos 
apenas 4 bits do portb e nos resta mais 4 bits do portb para usarmos
como entrada de sensores ou saida para acionamentos
de cargas via rele
bom pessoal é isso ai qualquer duvida é só comentar












segunda-feira, 12 de dezembro de 2011

protocolo rc5 part 2

agora nesta segunda parte do tutorial do protocolo rc5
estou colocando o codigo em assembler é um pouco longo são 444 linhas mais fico bem intuitivo
qualquer duvida e so comentar
lembrando que este codigo ainda nào foi otimizado por falta de tempo mais funciona perfeitamente e não roda lento






;***************************DEVICE TEC/ SISTEMAS ELETRONICOS
;DATA 07/07/2011
;PROGRAMADOR: DANILO S CABRAL
;COMPILADOR USADO MPLAB IDE V8.63
;ALGORITIMO CRIADO PARA INTERPRETAÇÃO DOS SINAIS EMITIDOS POR CONTROLE REMOTO
;ULTILIZANDO O PROTOCOLO (RC5) DESENVOLVIDO PELA PHILIPS
;PROTOCOLO ENVIA UMA SEQUENCIA DE 14BITS COM DURAÇÃO DE 25MS
;SENDO CADA BIT COM 1.77MS DE DURAÇÃO
;NESTE ALGORITIMO IREMOS TRABALHAR COM A LOGICA DE SINAIS INVERTIDA
;DEVIDO AO FATO QUE O SENSOR INFRAVERMELHO INVERTE OS SINAIS ISTO E QUANDO O CONTROLE
;ENVIA NL1 O SENSOR RECEBE E ENIA NL0 PARA O MICROCONTROLADOR E VICE VERSA.
;=======================COMPOSIÇÃO DO CODIGO RECEBIDO
;BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9|BIT10|BIT11|BIT12|BIT13|BIT4|
;STARTBIT|TOGLE|        ENDEREÇO        |   COMANDO COMPOSTO POR 6 BITS   |
;|             DESCARTE                 |      SINAIS QUE SERA USADO      |
;|          DURAÇÃO  13.6MS             |       DURAÇÃO DE 10.2 MS        |


  LIST P=16F84a           ;define processador
  RADIX     DEC           ;define padrão decimal
  INCLUDE <P16F84a.INC>   ;inclue arquivo com características do 16f628
  __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
  ERRORLEVEL   -302
;______________________________________SEL. BANCO DE MEMORIA
#DEFINE  BANK0 BCF STATUS,RP0
#DEFINE  BANK1 BSF STATUS,RP0
;______________________________________VARIAVÉIS
 CBLOCK   0X0C
          W_TEMP
          STATUS_TEMP
          ADRESS         ;AQUI FICA ARMAZENADO OS 8 BITS INICIAIS    
          COMAND         ;AQUI FICA ARMAZENADO OS 6 BITS REFERENTE A TECLA DO CONTROLE
          GETCH          ;ULTILISADA PARA LIMITAR QUANTIDADE DE BITS
          FLAGCIR        ;VARIAVEL USADA COMO ESPELHO DA VARIAVEL COMAND
          STARTBIT       ;AQUI FICA ARMAZENADOS OS 2 START BITS E O BIT TOOGLE
          FLAGTEC        ;FLAG DE CONTROLE DE TECLAS APERTADA
          FLAGTEC1       ;FLAG DE CONTROLE DE TECLAS APERTADA
          TEMPO0         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO1         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO2         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
          TEMPO3         ;VARIAVEL USADA PARA TEMPORIZAÇÃO
         
 ENDC

;_____________________________________FLAGS CONTROL;
;FLAGS DE RECEBIMENTO IR
#DEFINE  CONTROLE   STARTBIT,0
#DEFINE  _1         STARTBIT,1
#DEFINE  _2         STARTBIT,2
#DEFINE  _3         STARTBIT,3
#DEFINE  _4         STARTBIT,4
#DEFINE  TOOGLE     STARTBIT,5
#DEFINE  START2     STARTBIT,6
#DEFINE  START1     STARTBIT,7
#DEFINE  CINCO      FLAGCIR,5

#DEFINE  ZERO       FLAGCIR,0
#DEFINE  TC1        FLAGTEC,0
#DEFINE  TC2        FLAGTEC,1
#DEFINE  TC3        FLAGTEC,2
#DEFINE  TC4        FLAGTEC,3
#DEFINE  TC5        FLAGTEC,4
#DEFINE  TC6        FLAGTEC,5
#DEFINE  TC7        FLAGTEC,6
#DEFINE  TC8        FLAGTEC,7
#DEFINE  TC9        FLAGTEC1,0
#DEFINE  TC0        FLAGTEC1,1
;_____________________________________CONSTANTES;
;VALORES EQUIVALENTES A TECLAS ACIONADAS NO CONTROLE
#DEFINE TECLA0            B'00111100'
#DEFINE TECLA1       B'00111101'
#DEFINE TECLA2         B'00111110'
#DEFINE TECLA3   B'00111111'
#DEFINE TECLA4   B'00111000'
#DEFINE TECLA5     B'00111001'
#DEFINE TECLA6   B'00111010'
#DEFINE TECLA7   B'00111011'
#DEFINE TECLA8   B'00110100'
#DEFINE TECLA9   B'00110101'
#DEFINE STANDBY           B'11110011'
#DEFINE MUTE             B'11110010'
#DEFINE VOLUME_UP         B'11101111'
#DEFINE VOLUME_DO         B'11101110'

;_____________________________________DEFINIÇÕES
#DEFINE  IR          PORTA,0    ;SENSOR TSOP
#DEFINE  OUT0        PORTA,1    ;ACIONAMENTO DO RELE
#DEFINE  OUT1        PORTA,2    ;ACIONAMENTO DO RELE
#DEFINE  OUT2        PORTB,0    ;ACIONAMENTO DO RELE
#DEFINE  OUT3        PORTB,1    ;ACIONAMENTO DO RELE
#DEFINE  OUT4        PORTB,2    ;ACIONAMENTO DO RELE
#DEFINE  OUT5        PORTB,3    ;ACIONAMENTO DO RELE
#DEFINE  OUT6        PORTB,4    ;ACIONAMENTO DO RELE
#DEFINE  OUT7        PORTB,5    ;ACIONAMENTO DO RELE
#DEFINE  OUT8        PORTB,6    ;ACIONAMENTO DO RELE
#DEFINE  OUT9        PORTB,7    ;ACIONAMENTO DO RELE
;_____________________________________MEMORIA DE PROGRAMA
       ORG      0X00      ;define nicio do trecho a seguir em 000
         GOTO INICIO        ;desvia para o inicio
;_____________________________________ROTINA DE INTERRUPÇÃO
       ORG      0X04
   
       RETFIE             ;volta da interupção
;_____________________________________SUB.ROTINAS
LE_BIT
    BTFSC    IR
    GOTO     BIT1
    GOTO     BIT0
BIT0
 
    BCF      STATUS,C  
    RETURN
BIT1
 
    BSF      STATUS,C  
    RETURN      
   
_10MS
    MOVLW     .10
    MOVWF     TEMPO1
    MOVLW     .250
    MOVWF     TEMPO0
T_0
    NOP
    DECFSZ    TEMPO0,F
    GOTO      T_0
    NOP
    DECFSZ    TEMPO1,F
    GOTO      $-7
    RETURN
_1.7MS                    ;ESPERA 1.725 MS
    MOVLW     .2
    MOVWF     TEMPO1
    MOVLW     .213
    MOVWF     TEMPO0
T_1
    NOP
    DECFSZ    TEMPO0,F
    GOTO      T_1
    NOP
    DECFSZ    TEMPO1,F
    GOTO      $-7
    RETURN
DELAY_MS               ;ESPERA 10.813 MS
    MOVLW     .16
    MOVWF     TEMPO2
RECARGA
    MOVLW     .239
    MOVWF     TEMPO3
T_2
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_2
    DECFSZ    TEMPO2,F
    GOTO      RECARGA
    RETURN
TIME
    MOVLW     .14
    MOVWF     TEMPO2
RELOAD
    MOVLW     .253
    MOVWF     TEMPO3
T_4
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_4
    DECFSZ    TEMPO2,F
    GOTO      RELOAD
    RETURN
TEMPO
    MOVLW     .255
    MOVWF     TEMPO2
TTT
    MOVLW     .255
    MOVWF     TEMPO3
T_5
    NOP
    DECFSZ    TEMPO3,F
    GOTO      T_5
    DECFSZ    TEMPO2,F
    GOTO      TTT
    RETURN
;_____________________________________INICIO DO PROGRAMA
INICIO: ; ESTE ENDERECO E' O IMEDIATAMENTE APOS O FIM DA INTERRUPCAO

       
    BANK1                
    MOVLW B'00000001'    
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
    MOVLW B'10001000'    
MOVWF OPTION_REG
    MOVLW B'01010000'        
MOVWF INTCON
    BANK0              
    CLRF    PORTA
    CLRF    PORTB
    CLRF    FLAGTEC
    CLRF    FLAGTEC1
   

;____________________________________ROT. PRINCIPAL
MAIN
 

LOOP0  
    MOVLW       .6
    MOVWF       GETCH
    CLRF        COMAND                
   
LE_0                          ; 10ms sem nehum pulso para
    CALL        _10MS        ; identificar START
    BTFSS       IR         ;
    GOTO        LE_0        ;
;START
    BTFSC      IR            ;//ESPERA NL=1 PARA IDENTIFICAR STARTBIT
    GOTO       $-1           ;ESPERA NNL=1
   
    CALL       DELAY_MS
INICIO_COMANDO
    CALL      LE_BIT    
    RLF       COMAND,F
    CALL      _1.7MS
    DECFSZ    GETCH,F
    GOTO      INICIO_COMANDO
   


;TECLA0
    MOVF     COMAND,W
    XORLW    TECLA0
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_0
;TECLA1
    MOVF     COMAND,W
    XORLW    TECLA1
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_1
;TECLA2
    MOVF     COMAND,W
    XORLW    TECLA2
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_2
;TECLA3
    MOVF     COMAND,W
    XORLW    TECLA3
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_3
;TECLA4
    MOVF    COMAND,W
    XORLW    TECLA4
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_4
;TECLA5
    MOVF   COMAND,W
    XORLW    TECLA5
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_5
;TECLA6
    MOVF    COMAND,W
    XORLW    TECLA6
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_6
;TECLA7
    MOVF    COMAND,W
    XORLW    TECLA7
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_7
;TECLA8
    MOVF    COMAND,W
    XORLW    TECLA8
    BTFSS    STATUS,Z
    GOTO     $+2    
    GOTO     C_8
;TECLA9
    MOVF    COMAND,W
    XORLW    TECLA9
    BTFSS    STATUS,Z
    GOTO     MAIN
    GOTO     C_9
C_0
    BTFSC   TC1
    GOTO    OFFC0
    GOTO    ONC0
ONC0
    BSF     OUT0
    BSF     TC0
    CALL    TEMPO
    GOTO    MAIN
OFFC0
    BCF     OUT0
    BCF     TC0
    CALL    TEMPO
    GOTO    MAIN
 

C_1
    BTFSC   TC1
    GOTO    OFFC1
    GOTO    ONC1
ONC1
    BSF     OUT1
    BSF     TC1
    CALL    TEMPO
    GOTO    MAIN
OFFC1
    BCF     OUT1
    BCF     TC1
    CALL    TEMPO
    GOTO    MAIN
C_2
    BTFSC   TC2
    GOTO    OFFC2
    GOTO    ONC2
ONC2
    BSF     OUT2
    BSF     TC2
    CALL    TEMPO
    GOTO    MAIN
OFFC2
    BCF     OUT2
    BCF     TC2
    CALL    TEMPO
    GOTO    MAIN
C_3
    BTFSC   TC3
    GOTO    OFFC3
    GOTO    ONC3
ONC3
    BSF     OUT3
    BSF     TC3
    CALL    TEMPO
    GOTO    MAIN
OFFC3
    BCF     OUT3
    BCF     TC3
    CALL    TEMPO
    GOTO    MAIN
C_4
    BTFSC   TC4
    GOTO    OFFC4
    GOTO    ONC4
ONC4
    BSF     OUT4
    BSF     TC4
    CALL    TEMPO
    GOTO    MAIN
OFFC4
    BCF     OUT4
    BCF     TC4
    CALL    TEMPO
    GOTO    MAIN
C_5
    BTFSC   TC5
    GOTO    OFFC5
    GOTO    ONC5
ONC5
    BSF     OUT5
    BSF     TC5
    CALL    TEMPO
    GOTO    MAIN
OFFC5
    BCF     OUT5
    BCF     TC5
    CALL    TEMPO
    GOTO    MAIN
C_6
    BTFSC   TC6
    GOTO    OFFC6
    GOTO    ONC6
ONC6
    BSF     OUT6
    BSF     TC6
    CALL    TEMPO
    GOTO    MAIN
OFFC6
    BCF     OUT6
    BCF     TC6
    CALL    TEMPO
    GOTO    MAIN
C_7
    BTFSC   TC7
    GOTO    OFFC7
    GOTO    ONC7
ONC7
    BSF     OUT7
    BSF     TC7
    CALL    TEMPO
    GOTO    MAIN
OFFC7
    BCF     OUT7
    BCF     TC7
    CALL    TEMPO
    GOTO    MAIN
C_8
    BTFSC   TC8
    GOTO    OFFC8
    GOTO    ONC8
ONC8
    BSF     OUT8
    BSF     TC8
    CALL    TEMPO
    GOTO    MAIN
OFFC8
    BCF     OUT8
    BCF     TC8
    CALL    TEMPO
    GOTO    MAIN
C_9
    BTFSC   TC9
    GOTO    OFFC9
    GOTO    ONC9
ONC9
    BSF     OUT9
    BSF     TC9
    CALL    TEMPO
    GOTO    MAIN
OFFC9
    BCF     OUT9
    BCF     TC9
    CALL    TEMPO
    GOTO    MAIN

ERRO
    MOVLW   B'11111111'
    MOVWF   PORTB
    CALL    TEMPO
    CLRF    PORTB
    CALL    TEMPO
    MOVLW   B'11111111'
    MOVWF   PORTB
    CALL    TEMPO
    CLRF    PORTB
    GOTO    MAIN
    END

terça-feira, 6 de dezembro de 2011

protocolo rc 5

fala pessoal de pois de um tempão sem postar nada  vou colocar aqui um projeto que eu fiz
este projeto fala sobre o protocolo rc5 da philips o qual ultilizei para criar um sistema em que eu controlo as lampadas e as tomadas da minha casa  ainda não foi finalizada a instalação definitiva pois terei que refazer toda  a infra estrutura para a instalação abaixo segue uma breve explicação do protocolo
no proximo post vou colocar o codigo em asm e algumas fotos das placas  por enquanto vou colocar um
video do prototipo funcionando

terça-feira, 21 de junho de 2011

tutotial de programação part2

hoje como prometido vou mostrar como seria aquela estrutura comentada na parte 1 do nosso tutorial
vamos começar


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                      cabeçalho do programa
;  neste trecho colocamos informações referente ao codigo como:
; nome da empresa que escreveu o codigo - micro controlador ultilizado - nome do programador - data de ;criação
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                     informações para o compilador
 LIST P=16F84a                          ;define processador
  RADIX     DEC                          ;define padrão decimal
  INCLUDE <P16F84a.INC>      ;inclue arquivo com características do 16f84a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                         configurações de gravaçào
;               aqui definimos nossos bits de configuração
 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                        paginaçào de memoria
;                                       aqui criamos nomes para nossos bamcos de memorias do pic

#DEFINE  BANK0 BCF STATUS,RP0
#DEFINE  BANK1 BSF STATUS,RP0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                     variaveis
;                                           aqui criamos espaços para nossas variavei usadas no sistema
cblock  0x0c

          W_TEMP
          STATUS_TEMP
          TEMPO0
          TEMPO1
          TEMPO2
          CONTROLE
          FLAG
          F1
          F2
 ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                               flags de controle
; aqui definimos nossos flags que nada mais é do que cada bit que temos dentro de uma determinada variavel
#DEFINE  ST_PR1 FLAG,0
#DEFINE  SE_PC1 FLAG,1
#DEFINE  ST_J1  FLAG,2
#DEFINE  ST_J2  FLAG,3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                        CONSTANTES
;espaços para constantes do sisteme como o proprio nome sugere é um registro que nunca tem seu valor ;alterado
T1  EQU .250   ;FILTRO TC ON E OFF
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                        DEFINIÇÕES
; aqui é onde iremos criar nomes para os pinos do pic
#DEFINE  PR1       PORTA,0
#DEFINE  PC1       PORTA,1
#DEFINE  J1        PORTA,2
#DEFINE  J2        PORTA,3
#DEFINE  ON        PORTB,0
#DEFINE  OFF       PORTB,1
#DEFINE  ABI       PORTB,3
#DEFINE  SIRENE    PORTB,2
#DEFINE  ERRO      PORTB,4
#DEFINE  VIO       PORTB,5
#DEFINE  AXL       PORTB,6
#DEFINE  MONITOR   PORTB,7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                              MEMORIA DE PROGRAMA
;                                  este trecho indica que apartir deste ponto se inicia o programa
       ORG      0X00      ;define nicio do trecho a seguir em 000
       GOTO INICIO        ;desvia para o inicio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                          ROTINA DE INTERRUPÇÃO
;é para este trecho que todas asinterrupções do programa sera direcionada
       ORG      0X04              
       RETFIE             ;volta da interupção
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                            SUB.ROTINAS
;neste trecho fica posicionado todas as subrotinas  lembrando que subrotinas são aquelas que estam fora da ;rotina principal
EMERGENCIA
    BCF MONITOR
    BSF VIO
    NOP
    BSF SIRENE
    NOP
    RETURN
MONITORANDO
    BCF AXL
    BSF MONITOR
    BSF ABI
    CLRF CONTROLE
PR_1
    BTFSC PR1
    INCF CONTROLE
    NOP
PC_1
    BTFSC PC1
    INCF CONTROLE
    NOP
J_1
    BTFSC J1
    INCF CONTROLE
    NOP
J_2
    BTFSC J2
    INCF CONTROLE
    NOP
   
    RETURN
ALARME_OFF
    BCF   ABI
    BCF   VIO
    BCF   MONITOR
    BCF   SIRENE
    BSF   AXL
    CLRF  CONTROLE
    RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;_____________________________________INICIO DO PROGRAMA
; ESTE ENDERECO E' O IMEDIATAMENTE APOS O FIM DA INTERRUPCAO OU QUANDO ;LIGAMOS NOSSO SISTEMA
INICIO:
;apartir deste ponto começamos a configurar os registradores do pic  

       
    BANK1                                         ; SELECIONA BANCO 1 PARA OPTION E TRIS  
    MOVLW .15                         ; W = 15
    MOVWF TRISA           ; TRISA = FFH. PORTA TODA ENTRADA
    MOVLW .3                         ; W = 3
    MOVWF TRISB          ; TRISB = 0. PORTB TODA SAIDA
    MOVLW .129                          ; CARREGA W COM ESTE VALOR
    MOVWF OPTION_REG ; REGISTRO OPTION AJUSTA TIMER 0 CLOCK INTERNO
    MOVLW .0                          ; CARREGA W COM ESTE VALOR
    MOVWF INTCON
    BANK0                                        ; VOLTO AO BANCO 0. PADRAO DO RESET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                             ROTINA PRINCIPAL
;                                 aqui é aonde iremos criar o nosso programa para executar o que queremos
MAIN
 
   CLRF PORTA
   CLRF PORTB
   CLRF FLAG
   CLRF F1
   CLRF F2
   CLRF STATUS
TEST_ON
 
   BTFSS ON
   GOTO TESTE_OFF
   CALL MONITORANDO
   GOTO TESTE_CONTRO
TESTE_OFF
   BTFSS OFF
   GOTO TEST_ON
   CALL ALARME_OFF
   GOTO TEST_ON
TESTE_CONTRO
 
   MOVLW .4
   MOVWF F1
   XORWF CONTROLE,F1
   SKPZ
   CALL  EMERGENCIA
   CALL  MONITORANDO
   
   GOTO TEST_ON
 END

;                                        FIM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


pode parecer meio confuso no começo mais a pratica leva a perfeiçào
da maneira que esta colocado o programa nesta estrutura fica mito facil encontrar um trecho especifico
para se fazer alguma alteraçào se nescessario
bom é isso ai lembrando que este codigo que esta escrito acima é totalmente funcional
e no nosso proximo tutorial teremos mais informaçòes sobre progamaçào
valeu ate a proxima galera














                                                   

segunda-feira, 20 de junho de 2011

tutorial de programação part1

boa tarde a todos hoje vamos falar sobre programação começando pela estrutura de programação
pois com uma boa estruturação fica ate mais facil escrevermos nosso codigo.
_o que é estrutura de codigo?
e a forma como criamos o nosso programa
criando espaços definidos pra cada funçào do nosso codigo
_como assim?
imagene se voce começa a escrever seu codigo diretamente pelo que ele vai executar
e conforme voce vai criando percebe que vai precisar usar constantes variavei  e sub rotinas  sendo que voce ainda não tinha criado espaços para elas?
deu pra perceber o problema ?
isto pode ser ainda pior se voce colocar uma subrotina posicionada dentro da rotina principal
seu codigo provavelmente ira travar e deixar voce com os cabelos em pé!!
este o outros problemas são facilmente evitados atraves de uma boa estruturação alem de deixar o codigo
bem legivel com aspecto profissional apesar de todos nos sermos apenas iniciantes
o primeiro passo para se criar um a boa estrutura de codigo
e começando pelas instruçòes que informam ao compilador com qual microcontrolador queremos trabalhar
qual padrão numerico0 iremos ultilizar e as configuraçoes de gravação
este é no meu ponto de vista o melhor modo de se começar um programa
depois criamos nossa paginação de memoria
nossa area para nossas variaveis
area para as constantes
area de definições (lembra dos #define)
nossa area de interrupções
vetor de resset
sub rotinas
configurações dos registradores
inicialização das nossas variaveis e finalmente nossa verdadeira area de programação

esta é a estruturação que tenho usados em todos os meus codigos
e sempre funciono muito bem
isto não quer dizer que todo mundo tem que usar o mesmo tipo que eu uso
e sim tentar criar uma que seja mais facil para o entendimento.
no proximo post vou colocar isto que foi citado da forma que fica no conpilador
lembrando que se voce esta escrevendo um codigo em assembler esta rotina
é bem eficiente
belesa galera ate o proximo post aonde daremos continuidade a este tutorial

sexta-feira, 15 de abril de 2011

planilha de delay

estou postando aqui uma planilha para calculo de perda de tempo ja que muitas vezes quem escreve soft em assembly tem que calcular valores numericos e quantidade de nop para conseguir a temporização correta, e em assembli não é tam simples como em C vamos comparar:
em assembly:                                                                               em    C:
movlw .255                                                                                 delay_ms(529);
movwf   temp  (variave p/ temporização)
t_1
decfsz  temp
goto t_1
return
  deu pra perceber a diferença (este é apenas um exemplo ficticio)
este link abaixo é uma planilha do exel que eu encontrei na net não me lembro ao certo onde mais acho que 
foi no site do luiz bertini
CALCULO DELAY

quinta-feira, 14 de abril de 2011

microcontroladores pic desenhos praticos de aplicações


este livro conten varios exemplos de circuitos e suas aplicações ele esta escrito em espanhol
mas é bem interessante e tem bastante conteudo interessante abaixo esta o  link para download
Microcontroladores PIC.pdf