Você está na página 1de 20

Fundamentos de Microprocessadores

2015/2016

Trabalho prático nº 2
“Sistema de rega”

Trabalho realizado por: Constantin Zamfirov


Nº21406600
Fundamentos de Microprocessadores

Índice
Índice ............................................................................................................................................................................................................... 2
1. Introdução ................................................................................................................................................................................................. 3
2. Procedimento Experimental .............................................................................................................................................................. 4
5. Conclusões ............................................................................................................................................................................................... 5

2 / 20
Fundamentos de Microprocessadores

1. Introdução
O objetivo principal do projeto foi desenvolver um sistema de rega automatizado que pudesse
agregar várias tecnologias e colocasse em prática o conhecimento adquirido ao longo das aulas,
com o objetivo de tornar a vida do pequeno agricultor mais simples e contribuísse para o uso mais
racional da água. O sistema usa um sensor de umidade do solo que capta essa umidade e é capaz de
dizer se o solo está seco ou molhado, fazendo com que o mesmo só seja regado caso necessite
realmente de água.
O sistema faz a rega sempre que Sh1 estiver desligado e apenas a partir da água do depósito. Uma
das tarefas do controlador será manter o depósito cheio. A existência de dois sensores S1 e S2 é
para poupar o funcionamento do Motor. Supõe-se que quando a Válvula é aberta Sh2 é
imediatamente activado. Verifica-se assim o bom funcionamento da válvula. Existem três Leds de
Status no painel de modo a poder ser visualizado um código de erro (ver descrição das saídas).

Entradas:
S1, S2 – Sensores de água no depósito (activos a “1”)
SC – Sensor de Chuva (activo a “1”)
Sh1, Sh2 – Sensores de Humidade (activos a “0”). Sh2 vai a “0” imediatamente se correr água no
tubo
Quando Sh1 = “0” - a horta está regada.
MSA – Motor sem água no Furo (não pode trabalhar)

Saídas:
M – Motor de tirar a água para o depósito (activo a “1”) a partir do furo
V – válvula – abre a torneira para regar
ST2, ST1, ST0 – Status segundo a tabela seguinte:

3 / 20
Fundamentos de Microprocessadores

2. Procedimento Experimental
Pretende-se utilizar um pequeno microcontrolador comercial para realizar um dado eletrónico.

Lista de Material:
 7 Resistências de valores:
o 1 x 12k Ohm
o 6 x 270 Ohm
 BreadBoard
 Fonte de alimentação variável 5 Vdc
 1 PIC 16F628A
 PIC KIT 2
 6 LEDs
 6 BT

4 / 20
Fundamentos de Microprocessadores

Diagrama

5 / 20
Fundamentos de Microprocessadores

6 / 20
Fundamentos de Microprocessadores

7 / 20
Fundamentos de Microprocessadores

; Trabalho 2 (Horta) 2015/2016

; Constantin Zamfirov nº21406600

; 13/07/2016

; PIC16F627

list p=16F627

include p16f627.inc

__CONFIG (_LVP_OFF & _INTRC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _CP_OFF & _MCLRE_ON &
_BODEN_OFF)

radix dec

; PORTA bits - Definição do porto A

; Bit(0) IN - Sh1 - Sensor Humidade da Horta ("0" - húmido)

; Bit(1) IN - Sh2 - Sensor Humidade da Válvula ("0" - passa água)

; Bit(2) IN - SC - Sensor de Chuva ("1" - a chover)

; Bit(3) IN - MSA - Furo não tem água - Motor não pode funcionar

; PORTB bits - Definicao do porto B

; Bit(0) OUT - ST0

; Bit(1) OUT - ST1

; Bit(2) OUT - ST2

; Bit(3) OUT – M

8 / 20
Fundamentos de Microprocessadores

; Bit(4) OUT - V

; Bit(5) IN - S1 - Nível Superior do depósito ("1" - água)

; Bit(6) IN - S2 - Nivel Inferior do depósito

; Bit(7) OUT - PISCA - Comuta a 0,5 Hz

DATAEE ORG 0x2100

DE "cHorta V1.0" ; Place at address 0,1,2,3...

ORG 0x2110

DE 0x00, 0x00 ; parâmetros nesta posição

; Definições

; Saídas para cada estado:

#define OUT0 b'00000000'; 0x00

#define OUT1 b'00000100';

#define OUT2 b'00001011';

#define OUT3 b'00010001';

#define OUT4 b'00000100';

#define OUT5 b'00000101';

#define OUT6 b'00010001';

#define OUT7 b'00000100';

9 / 20
Fundamentos de Microprocessadores

; Entradas:

#define Sh1 PORTA, 0

#define Sh2 PORTA, 1

#define SC PORTA, 2

#define MSA PORTA, 3

#define S1 PORTB, 5

#define S2 PORTB, 6

BIT_PISCA EQU b'00010000' ; bit 4 do PORTB

cblock 0x20 ;inicio de um bloco de memória

WREG_TEMP ;storage for WREG during interrupt

STATUS_TEMP ;storage for STATUS during interrupt

t_seg ; contagem dos segundos

reg_10ms ; contagem de interrupções

cont ; variáveis

cont2

cont3

cont4

end

10 / 20
Fundamentos de Microprocessadores

;Macros para selecionar o register bank

;Many bank changes can be optimized when only one STATUS bit changes

Bank0 MACRO ;macro to select data RAM bank 0

bcf STATUS,RP0

ENDM

Bank1 MACRO ;macro to select data RAM bank 1

bsf STATUS,RP0

ENDM

org 0x0000

clrf PCLATH ;select program memory page 0

goto inicio ; reset vector address

; testes para o MPLAB "View Program Memory"

xorwf 0x20,0

bcf STATUS,Z

goto my_int

my_int

; int bate de 10 mS em 10 mS (@ 4Mhz ...10 no OPTION)

11 / 20
Fundamentos de Microprocessadores

Bank0 ;select bank0

movwf WREG_TEMP ;save WREG

movf STATUS,W ;store STATUS in WREG

clrf STATUS ;select file register bank0

movwf STATUS_TEMP ;save STATUS value

nop

nop ; acerto do relógio

nop

movlw .100 ; ajuste para 10 ms (4 Mhz - prescaler at 1:64) - ...11 no OPTION

movwf TMR0

Bank0

; tmo

incf reg_10ms, F

movlw .100 ; 100 x 10 mS = 1 seg

xorwf reg_10ms, W

btfss STATUS, Z

goto my_int_out

inc_seg

clrf reg_10ms ; limpa contador de 10 mseg

12 / 20
Fundamentos de Microprocessadores

incf t_seg, F

movlw BIT_PISCA

xorwf PORTA, F ; toggle bit 7 - PISCA - troca bit 4 do PORTA todos os segundos

my_int_out

Bank0 ;select bank 0

movf STATUS_TEMP,W ;get saved STATUS value

movwf STATUS ;restore STATUS

swapf WREG_TEMP,F ;prepare WREG to be restored

swapf WREG_TEMP,W ;restore WREG without affecting STATUS

bcf INTCON, T0IF ; limpa bit, permite próxima interrupção do TMR0

retfie ;return from interrupt

inicio

movlw 0x07

movwf CMCON ; to activate RA pins for IO

clrf TMR0

movlw b'11111111' ; não interessa - tudo IN's

movwf PORTA ; default bit programming

13 / 20
Fundamentos de Microprocessadores

movlw b'01100000' ; tudo desligado

movwf PORTB ; default bit programming

Bank1 ; change to register bank 1

movlw b'00001111' ; Port A configuration byte. All Ins, excpt 4

movwf TRISA ; setup port A

movlw b'01100000' ; Port B configuration byte. All Outs, 6,5 In's

movwf TRISB ; setup port B

movlw b'01010101' ; Prepara RTCC para 1:64 presc, rising edge; weak pull ups on PortB

movwf OPTION_REG ; Escreve no registo OPTION

Bank0 ; back to register bank 0

clrf reg_10ms

bsf INTCON, T0IE ; ativa interrupção do TMR0

bsf INTCON, GIE ; ativa interrupções GERAL

clrf t_seg ; limpa var

loop_p ; teste à rotina de interrupção - espera 10 segundos

14 / 20
Fundamentos de Microprocessadores

estado_0

movlw OUT0

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

btfss MSA

goto estado_1 ; se IN = 0

goto test_S1 ; se IN = 1

test_S1

btfss S1

goto estado_2 ; se IN = 0

goto test_SC ; se IN = 1

test_SC

btfss SC

goto test_Sh1 ; se IN = 0

goto estado_0 ; se IN = 1

test_Sh1

btfss Sh1

15 / 20
Fundamentos de Microprocessadores

goto estado_0 ; se IN = 0

goto estado_3 ; se IN = 1

estado_1

movlw OUT1

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

goto estado_0 ; se IN = 1

estado_2

movlw OUT2

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

btfss S2

goto test_MSA1 ; se IN = 0

goto test_S11 ; se IN = 1

test_S11

btfss S1

goto test_MSA1 ; se IN = 0

goto test_SC ; se IN = 1

16 / 20
Fundamentos de Microprocessadores

test_MSA1

btfss MSA

goto estado_4 ; se IN = 0

goto estado_2 ; se IN = 1

estado_3

movlw OUT3

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

btfss Sh2

goto estado_5

goto estado_6 ; se IN = 1

estado_4

movlw OUT4

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

btfss Sh2

goto test_MSA1

17 / 20
Fundamentos de Microprocessadores

estado_5

movlw OUT5

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

goto estado_5

estado_6

movlw OUT6

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

btfss S2

goto estado_7

goto test_Sh1

estado_7

movlw OUT7

movwf PORTB ; definir OUT

call delay_125mS ; para se ver as saidas

goto test_S11

delay_500uS

18 / 20
Fundamentos de Microprocessadores

movlw 0xa5

movwf cont

del1 decfsz cont,1 ; back to cont

goto del1

retlw 0

delay_125mS

movlw .249 ; 0xFA

movwf cont2

del2 call delay_500uS

decfsz cont2,1 ; back to cont

goto del2

retlw 0

end

19 / 20
Fundamentos de Microprocessadores

5. Conclusões

O trabalho laboratorial correu bem.

20 / 20