Ir ao conteúdo
  • Cadastre-se
George Salvino

Programar Display 16x2 em assembly com PIC16F628A

Recommended Posts

Olá, estou fazendo um TCC de mecatrônica e gostaria de uma ajuda de vocês  pois não mexo com PIC a muito tempo

 

O TCC no caso, é de uma cafeteira. Eu gostaria de implementar um display para mostrar qual processo está sendo realizado no momento, porém eu não faço ideia de como funciona um display e como programá-lo.

 

O programa está logo abaixo, ele ainda está em fase inicial ( se perceberem algo errado nele, me digam por favor ). No caso, nas sub rotinas (CAFEP; CAFEG; etc.), enquanto estiverem sendo executadas, o display exibirá algo pré-determinado como: CAFÉ PEQUENO.

 

MAIN

CLRF PORTA ;CLEAR NO PORTA
CLRF PORTB ;CLEAR NO PORTB
BTFSS SENSORTEMP ;VERIFICA SE O SENSOR DE TEMPERATURA ESTÁ ATIVADO
GOTO TEMPERATURA ;CASO O SENSOR NÃO ESTEJA ACIONADO, SIGNIFICA QUE A ÁGUA ESTÁ EM UMA TEMPERATURA BAIXA. LOGO,CHAMA A ROTINA PARA AQUECER A ÁGUA
BTFSC NIVELBAIXO ;TESTA SENSOR DE NIVEL BAIXO DE ÁGUA
GOTO RESERVATORIOAGUA ;SE ELE ESTIVER ACIONADO, CHAMA A ROTINA PARA ENCHE-LO
BTFSS BOTAOP ;SE NÃO ESTIVER ACIONADO, TESTA O BOTÃO PARA "CAFÉ PEQUENO"
GOTO $+2 ;PULA 2 LINHAS SE O BOTÃO "CAFÉ PEQUENO" NÃO ESTIVER ACIONADO
GOTO $+4 ;PULA 4 LINHAS SE O BOTÃO "CAFÉ PEQUENO" ESTIVER ACIONADO
BTFSS BOTAOG ;TESTA BOTÃO "CAFÉ GRANDE" CASO O ANTERIOR NÃO TENHA SIDO ACIONADO
GOTO MAIN ;SE NÃO ESTIVER ACIONADO, TESTA TUDO NOVAMENTE
GOTO $+2 ;SE ESTIVER ACIONADO, PULA 2 LINHAS
GOTO CAFEP ;CHAMA ROTINA "CAFÉ PEQUENO"
GOTO CAFEG ;CHAMA ROTINA "CAFÉ GRANDE"

CAFEP ;CAFÉ PEQUENO
BSF LEDVERDE ;LIGA LED VERDE PARA INDICAR PROCESSO "CAFÉ PEQUENO"
BSF OPENAGUA ;LIGA BOMBA DE ÁGUA
CALL DELAY5S ;DELAY DE 5 SEGUNDOS
BCF OPENAGUA ;DESLIGA BOMBA D'ÁGUA
BCF LEDVERDE ;DESLIGA O LED VERDE
GOTO MAIN ;RETORNA PARA A PROGRAMA PRINCIPAL

CAFEG ;CAFÉ GRANDE
BSF LEDAMARELO ;LIGA O LED AMARELO INDICANDO PROCESSO "CAFÉ GRANDE"
BSF OPENAGUA ;LIGA BOMBA DE ÁGUA
CALL DELAY10S ;CONTINUA LIGADO POR 10 SEGUNDOS
BCF OPENAGUA ;DESLIGA BOMBA D'ÁGUA
BCF LEDAMARELO ;DESLIGA LED AMARELO
GOTO MAIN ;RETORNA PARA A PROGRAMA PRINCIPAL

RESERVATORIOAGUA ;ROTINA PARA ENCHER O RESERVATÓRIO DE ÁGUA CASO ESTEJA EM UM NÍVEL BAIXO
BSF LEDVERMELHO ;LIGA O LED VERMELHO PARA INDICAR PROCESSO DE ENCHIMENTO DO RESERVATÓRIO
BSF RESERVAAGUA ;LIGA BOMBA DE ÁGUA DO RESERVATÓRIO
AGUARDARDESLIGA ;MACRO INSTRUÇÃO PARA MANTER UM LOOP ESPERANDO QUE O SENSOR DE NÍVEL ALTO SEJA ACIONADO
BCF RESERVAAGUA ;QUANDO O NÍVEL ESTIVER ALTO, DESLIGA A BOMBA DE ÁGUA
BCF LEDVERMELHO ;DESLIGA LED VERMELHO
GOTO MAIN ;RETORNA PARA A PROGRAMA PRINCIPAL

TEMPERATURA ;ROTINA PARA AQUECIMENTO DA ÁGUA NO RESERVATÓRIO
BSF RESISTENCIA ;LIGA RESISTENCIA
MACROTEMP ;LOOP ATÉ QUE O SENSOR DE TEMPERATURA FOR ACIONADO INDICANDO QUE A TEMPERATURA ESTÁ IDEAL
BCF RESISTENCIA ;DESLIGAR RESISTENCIA
GOTO MAIN ;RETORNA PARA PROGRAMA PRINCIPAL

DISPLAY

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja esse datasheet: 

http://www.xmocular.com/Upload/Character/GDM1602BFLRFBS-19063720136.pdf

#DEFINE E         PORTA,0#DEFINE RS        PORTA,1#DEFINE RW        PORTA,2#DEFINE DADOS_LCD PORTB                CBLOCK H'20'                       TEMP_NIBBLE                ENDCINICIA_LCD				CALL	DELAY_2mSEG				BCF		RS             				MOVLW	H'28'											MOVWF	DADOS_LCD								CALL	PULSO				CALL	DELAY_2mSEG				MOVLW	H'28'										CALL	ENVIA_NIBBLE_CMD							MOVLW	H'0C'				CALL	ENVIA_NIBBLE_CMD            				MOVLW	H'06'				CALL	ENVIA_NIBBLE_CMD				MOVLW	H'01'				CALL	ENVIA_NIBBLE_CMD				CALL	DELAY_2mSEG				RETURN                                                 ENVIA_NIBBLE_CMD                 BCF      RS                 GOTO     ENVIA_NIBBLEENVIA_NIBBLE_WRT                 BSF      RSENVIA_NIBBLE                 MOVWF    TEMP_NIBBLE                 MOVLW    H'0F'                 ANDWF    DADOS_LCD,F    	         MOVF     TEMP_NIBBLE,W    	         ANDLW    H'F0'    	         IORWF    DADOS_LCD,F    	         CALL     PULSO    	         SWAPF    TEMP_NIBBLE,F    	         MOVLW    H'0F'    	         ANDWF    DADOS_LCD,F    	         MOVF     TEMP_NIBBLE,W    	         ANDLW    H'F0'    	         IORWF    DADOS_LCD,F   	             CALL     PULSO    	         RETURN    	         DELAY_50uSEG                 MOVLW    .38                 MOVWF    TEMP1REPEAT                 DECFSZ   TEMP1,F                 GOTO     REPEAT                 RETURNDELAY_2mSEG				CLRF	DELAY_2mSAGUARDA_2mS				MOVLW	.10				XORWF	DELAY_2mS,W				BTFSS	STATUS,Z				GOTO		AGUARDA_2mS				RETURN				PULSO				CALL     DELAY_50uSEG				BSF      E				NOP				NOP				NOP                				CALL     DELAY_50uSEG				BCF      E				RETURN

Esse código acima é um genérico que eu uso.

 

Estude o datasheet e o código.

Esse código é para um lcd usando 4 vias, 4 bits.

 

nibble_wrt -> indica escrita

nibble_cmd -> indica comando

lcd conectado no portB 4,5,6,7 pinos

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a linguagem Assembly é de baixo nível, sugiro que antes faças um fluxograma do programa, com blocos de mais alto nível. Assim vai poder visualizar melhor o programa.

Em meus projetos com Assembly, faço assim. Somente após definir o fluxograma é que eu parto para a linguagem Assembly.

Dificilmente esqueço de colocar algum trecho do programa.

MOR_AL

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendo muito sobre linguagem assembly. para conseguir entender bem o funcionamento do display LCD sugiro que você leia o Datasheet do integrado que geralmente é utilizado nesses displays(hd44780). Também sugiro que escreva a própria biblioteca, ela não é muito difíci. Depois de uns 2 dias estudando ela você consegue desenvolver algo bacana. a dica do fluxograma também é muito boa, desde que comecei a fazer meus projetos utilizando o fluxograma e máquina de estados nuca mais tive problemas de esquecer alguma parte de código, geralmente é rodar e partir pro abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×