Ir ao conteúdo
  • Cadastre-se

Programar Display 16x2 em assembly com PIC16F628A


Posts recomendados

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

Link para o comentário
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
Link para o comentário
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
Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...