Escolar Documentos
Profissional Documentos
Cultura Documentos
ANSI
PARA
MICROCONTROLADOR
LINGUAGEM PIC18F4550
ANSI
PARA
MICROCONTROLADOR
Relatrio de
apresentado
PICMINAS
RESUMO
Este
projeto
tem
como
escopo como
principal, unidade
utilizao para
do o
microcontrolador
PIC18F4550
central
A aplicao reduz o custo final evitando a utilizao de micro controlador especficos. O circuito eletrnico adicional de baixo custo. O circuito eletrnico adicional de uso geral facilmente encontrado no mercado comercial. Os perifricos possuem uma rampa de mudana de estado de 23ns bem inferior a velocidade do PIC garantindo estabilidade ao sistema. A programao pode ser feita on board atravs de conectores USB1. Para mais de um elevador pode ser feito Softwares especficos para controle de trfego e at mesmo funes especiais de manobras via PC2
1 2
SUMRIO
1. INTRODUO 03 03 03 03 04 04 04 04 05 05 05 06 06
2 3
3.1
3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2
AMBIENTE DE TRABALHO PROTEUS 7.2 SP6. ARQUIVO DE COMANDO DE IMPRESSO COMANDOS DE EXPOSIO PRINCIPAIS COMANDOS ICONES DO DISPOSITIVO GRFICOS 2D FERRAMENTAS DO PROJETO EDIO DE COMANDOS ESPELHO E GIRAR ICONES INTRODUO DE OPERAO DO PROTEUS NO MODO ISIS COM
06 11 12 12 13 17 17 17
PLATAFORMAS DE PROGRAMAO C ANSI. 4.1 MPLAB 4.1.1 CARREGANDO PROJETOS NO MPLAB 4.2 MCC18
APRESENTAO DO 74HS594
5.1. 5.2. 6 7
ESQUEMA ELETRNICO
FUNCIONAMENTO. 18 18 18 19
18
ZERANDO VARIAVEIS, PORTAS E REGISTRADORES PARA INICIALIZAR COMANDOS. 19 PREPARA PORTA PARA POCICIONAR CABINE DO ELEVADOR NA PRIMEIRA PARADA 21 DETECTA FALHA AO FECHAR A PORTA PROCEDIMENTO PARA ASCENDER LED DE FALHA DENTRO DO WHILE STOP DA CABINE NA POSIO INFERIOR 22 22 23
PROCEDIMENTO PARA ASCENDER LED DE FALHA DENTRO DO WHILE STOP DA CABINE NA POSIO INFERIOR CABINE PARA POSIO DA PRIMEIRA PARADA
24 25 25 25 26 26
7.10 NIVELA A
7.12 DETECTA FALHA AO ABRIR A PORTA 7.13 PROCEDIMENTO PARA ASCENDER LED DE FALHA DENTRO DO WHILE
ANDAR
7.15 A FAZ VARREDURA NOS BOTES DE CHAMADA 7.16 TRANFERE ESPELHO DE CHAMADAS PARA VARIVEL DADOS 7.17 REGISTRA CHAMADAS DE CABINE 7.18 IDENTIFICA
DIREO DE CHAMADAS SUBIDA OU DESCIDA
7.19 COMANDO DE ALTA VELOCIDADE 7.20 PREPARA PARADA COM REVERSO DE DIREO DESCIDA OU SUBIDA 7.21 PREPARACAO_DE_PARADA NA MESMA DIREO 7.22 PARADA 7.23 CANCELANDO CHAMADA 7.24 ABRE PORTA 7.25 FECHA PORTA 7.26 CONFIGURA SISTEMA 8 9
CONSIDERAES FINAIS OU CONCLUSO REFERNCIAS BIBLIOGRFICAS
1. INTRODUO
O uso de microcontroladores especficos com grandes nmeros de sadas e entradas com gravao do programa off-board vem sendo largamente utilizado na rea de transporte vertical, no entanto possvel obter alm da possibilidade de gravao on-board. A idia central realizar pequenos protocolos de comunicao serial de forma a manter a velocidade de processamento vantajosa do PIC que mesmo com atrasos de leituras seriais ainda superior aos que hoje so utilizados. O projeto final apresentar recursos tcnicos capaz de comunicar e interagir com as portas do PIC de forma a multiplicar a sua gama de monitoramento e comando. 2 CONSIDERAES Para melhor apresentao deste relatrio as figuras sero apresentadas conforme desenvolvimento do documento e no em anexo conforme norma. o mesmo efeito com qualidade , confiabilidade e significativa reduo de custo, utilizando o PIC18F4550,
3 PLATAFORMAS DE SIMULAO O projeto ser simulado e processado com as seguintes ferramentas 3.1 PROTEUS 3 7.2 SP6
Esta plataforma permite a simulao de uma gama de circuitos eletrnicos com uma preciso de at 98% de confiabilidade depois de calculado as faixas de tolerncia dos componentes empregados. Em anexo 1 encontra-se passo a passo a utilizao do Proteus neste projeto.
3.1.1
Novo
Abrir
Salvar
Imprimir
rea de Impresso
Seo de Importao
Seo de Exportao
Refazer
Grade
Origem
Cursor
Bandeja
Aumentar
Diminuir
Visualizar
Lupa
Componente
Ponto de
Etiqueta
Certificado
Barra de
Circuito
Edio
Juno
Transporte
Secundrio
Terminais
Pino Dispositivo
Grfico
Fita Adesiva
Gerador
3.1.6 GRFICOS 2D
Linha
Caixa
Circulo
Arco
Trajeto 2D
Texto
Smbolo
Fio Roteador
Busca Pesquisa
Propriedade de Ferramentas
Nova Folha
Deletar
Folha Anterior
Desfazer Ao
Impossvel Desfazer
Valor do Material
Cpia Bloco
Movimenta Bloco
Deletar Bloco
Girar o Bloco
Fazer o Dispositivo
Decompor
Pacote de Ferramentas
Undo
Redo
Recortar
Cpia
Pasta
Girar Anti-Horrio
Linha central de X
3.2 Introduo de operao do Proteus no modo ISIS com microcontroladores Com o programa instalado v at o menu iniciar e clique sobre o cone ISIS
N Nesta tela selecione o formato da pagina ideal ao seu projeto e clique em OK.
Obs.: Pode-se aumentar visibilidade da rea de trabalho alterando o zoom com a movimentao do boto rotativo do mouse. Selecione Component Mode atravs do cone localizado na barra lateral direita da tela do programa clique em P para trabalhar em modo de manipulao de componentes e
Neste instante aparecer a seguinte tela: Nela digite o componente a ser utilizado, usando o campo Keywords (indicao 1), observe que o programa identificar o componente da biblioteca e o mostrar no campo Results (indicao 2) e entre parnteses na frente deste aparecer a quantidade de resultados encontrados (indicao 3), no PAD abaixo ser indicado a especificao detalhada dos componentes encontrados (indicao 4),. Neste momento identifique o componente a ser utilizado usando o campo quatro (4) e de dois clique sobre o mesmo.
Neste campo poder existir mais de um componente de acordo com a sua biblioteca
Observe agora que o componente selecionado ocupou o campo DEVICE e esta disponvel para ser utilizado. Repita os passos para adicionar ao DEVICE os outros componentes a serem utilizados durante a construo do projeto, em seguida clique em OK para retornar a tela de trabalho.
10
J na tela de trabalho sobre o campo DEVICE selecione com o mouse o componente a ser colocado na rea de trabalho
Logo em seguida d apenas um clique no boto direito do mouse sobre a rea de trabalho (figura acima). Observe que o escopo do componente aparecer na cor rosa e poder ser movimentado para qualquer lugar dentro desta rea, escolha o local e d mais um clique para fix-lo no ponto escolhido. Obs.: Para girar ou inverter os lados de um componente use os comandos localizados no rodap inferior direito do programa antes de coloc-lo na rea de trabalho, observando sua posio mostrada na caixa de visualizao
11
3.2.3 Carregar o programa com os dados . HEX gerados no MPLAB D dois clique sobre o microcontrolador que est na rea de trabalho e a seguinte 1 tela ser aberta: 4 2 3
3.3 MPLAB 8
1 Indica a nomenclatura do componente no projeto 2 Indica o modelo do microcontrolador utilizado 3 Indica o tipo de invlucro utilizado para confeco do circuito impresso no ARES 4 Indica o endereo da USB utilizada na simulao 5 local para selecionar o arquivo HEX a ser rodado na simulao 6 Campo para escolha da freqncia de simulao 7 Barra de rolagem para configurao extras do microcontrolador caso utilizadas no programa
12
8 Local para configurao de funcionamento do microcontrolador Para carregar o programa no microcontrolador clique sobre o cone de pasta no campo 5 ; da figura acima e d dois clique sobre o arquivo escolhido.
configure a
freqncia de operao do microcontrolador no campo 6 e clique em OK Pronto voc j pode montar o restante do circuito e simular o funcionamento do seu programa. 4 PLATAFORMAS DE PROGRAMAO C ANSI. 4.1 MPLAB O MPLAB um ambiente integrado para o estudo e desenvolvimento com a famlia PIC de microcontroladores.Sua principal caracterstica a total integrao de seus mdulos com o ambiente Windows, permitindo a fcil cpia de arquivos e trechos de arquivos de um aplicativo para outro. Esta poderosa ferramenta e capaz de transformar linguagem de baixo e alto nvel, juntamente com compiladores especficos para o cdigo Hexadecimal usado na gravao final do PIC.
13
Passo 1- Abra o bloco de nota e o salve como main.c em uma pasta onde ser aberto o novo projeto. Passo 2- Depois de abrir o programa selecione project wizard para carregar um projeto no MPLAB
Passo 5- Nesta pagina escolha o tipo de compilador e linguagem e clique em avanar no nosso caso MCC18 para linguagem C A ANSI
14
Passo 6 1- Clique em browse 2- Escolha a pasta o onde foi criado main.c 3- Digite um nome para o projeto
4- Clique em salvar
Passo 8- Esta tela permite inserir o main.c ao projeto no entanto faremos isto posteriormente a apenas clique em avanar
Passo 10- clique com o boto direito do mouse e v em A Add Files para inserir o main.c criado anteriormente
15
Passo 11- Na tela que se abrir selecione Project Directory e clique duas vezes sobre cone main no pad
Obs : Se o seu projeto conter um programa de boot-loader carregue-o usando o m mesmo procedimento que foi usado no main.
Passo 12- D dois clique sobre o cone main e digite o programa a ser rodado Digite aqui seu programa
16
P Passo 13- Depois de escrito o programava em Project depois em Build All. Se o programa estiver sem erro o arquivo .H
NOTA: Existe a possibilidade de simular o programa no ambiente MPLAB mas no abordaremos este tpico pois nossa simulao acontecer no PROTEUS
17
4.2 MCC18 Tambm conhecido como MPLAB C18 uma compilador C ANSI compatvel para a famlia PIC18 na plataforma Windows e um componente totalmente integrado a Microchip, permitindo a depurao da linguagem de nvel com MPLAB. Os Projetos, opes do compilador e vinculador personalizaes podem ser controladas completamente dentro do MPLAB IDE. 5 Apresentao do 74HS594
O circuito integrado 74HS595 um deslocador de movimento que utiliza oito flipflops que so responsveis pela memorizao de dados inseridos e manipulados de posio em posio atravs de duas entradas de clocks .Seu datasheet esta no anexo 2 (dois). Estes dispositivos cotem imunidade a rudos e baixo consumo de energia so de tecnologia CMOS e podem movimentar cargas TTL-LS. Todas as entradas so protegidas de dano devido descarga esttica interna Com barreiras de diodo para VCC Freqncia mudana Garantida: DC a 30 MHz. 5.1. Esquema eletrnico
18
5.2.
funcionamento.
O Programa trabalha com o deslocamento do dado inserido na entrada DS para isto ele colocar as duas entradas de clocks em nvel zero. Partindo deste momento a primeira entrada clock SH-CP ser levada em nvel alto com isto acontecer o deslocamento deste dado para o primeiro Flip-Flop ,no entanto cada sada e composta de dois flip-flops em serie e um buffer controlado pela entrada OE ,o que indica que o dado ainda no foi transferido para a sada com mais um clock agora em ST-CP o dado e transferido para a sada. Nota : Se a entrada OE estiver em nvel baixo o dado ser visualizado na sada, se caso o mesmo pino esteja em nvel alto esta leitura ser inibida.
Apresentao do projeto
Anexo trs (3) 7 Apresentao do programa escrito em linguagem C ANSI. 7.1 DEFINES
/** I N C L U D E S ************************************************************************************/ #include <p18cxxx.h> // Necessrio para que o compilador adicione a biblioteca // com as definies do PIC selecionado no projeto, neste //caso, o modelo 18F4550. #include <delays.h> // Biblioteca padro de rotinas de atraso do C18 Microchip
/** D E F I N E S **************************************************************************************/
// VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL
19
#define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define
INSERE_DADOS3 ST_CP3 LIBERA_DADOS3 CHAMADAS PARADA PREPARA_PARADA PORTA_ABERTA PORTA_FECHADA ABRE_PORTA FECHA_PORTA POSICAOA POSICAOB POSICAOC POSICAOD SINAL_DESCE SINAL_SOBE SINAL_ALTA SINAL_BAIXA LIMITE_DESCIDA LIMITE_SUBIDA NIVELAMENTO
PORTBbits.RB1 PORTBbits.RB2 PORTBbits.RB3 PORTAbits.RA4 PORTAbits.RA5 PORTBbits.RB5 PORTBbits.RB6 PORTBbits.RB7 PORTCbits.RC7 PORTEbits.RE2 PORTDbits.RD0 PORTDbits.RD1 PORTDbits.RD2 PORTDbits.RD3 PORTBbits.RB4 PORTDbits.RD5 PORTDbits.RD6 PORTDbits.RD7 PORTEbits.RE0 PORTEbits.RE1 PORTDbits.RD4
// VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARIVEL DE COMUNICAO SERIAL // VARREDURA PARA REGISTRO DAS CHAMADAS DE //CABINE, SUBIDA E DESCIDA // SINAL DE PARADA // DEFINE ONDE SERA INICIADO A PARADA // INDICAO DE PORTA ABERTA // INDICAO DE PORTA FECHADA // ACIONA CIRCUITO PARA ABRIR PORTA // ACIONA CIRCUITO PARA FECHAR PORTA // SINAL DOS SENSORES DE POSICIONAMENTO // SINAL DOS SENSORES DE POSICIONAMENTO // SINAL DOS SENSORES DE POSICIONAMENTO // SINAL DOS SENSORES DE POSICIONAMENTO // INDICA EXISTENCIA DE CHAMADAS DE DESCIDA // INDICA EXISTENCIA DE CHAMADAS DE SUBIDA // ACIONA A BAIXA VELOCIDADE DO ELEVADOR // ACIONA A ALTA VELOCIDADE DO ELEVADOR // LIMITE DE POSICIONAMENTO MAXIMO INFERIOR DA //CABINE // LIMITE DE POSICIONAMENTO MAXIMO SUPERIOR DA //CABINE // INDICA NIVELAMENTO DA CABINE COM O ANDAR
7.2 VARIVEIS
/** P R O T O T I P O S P R I V A D O S **************************************************************************************/
unsigned char chamadas_cab[10], chamadas_sub[10],AUX_CHAM_CAB_SOB ,AUX_CHAM_CAB_DES ,AUX_CHAM_SUB , AUX_CHAM_DES, i, chamadas_des[10],DADOS[32], ANDAR, FALHA_FECHAR_PORTA, FALHA, FALHA_ABRIR_PORTA , MAIOR, MENOR, AD, AS; unsigned long int INDEX, INDEX2;
20
void main(void) {
SH_CP2 = 0; INSERE_DADOS2 = 0; ST_CP2 = 0; LIBERA_DADOS2 = 0; PARADA = 0; SINAL_DESCE = 0; PREPARA_PARADA = 0; SH_CP = 0; INSERE_DADOS = 0; ST_CP = 0; LIBERA_DADOS = 0; ABRE_PORTA = 0; SINAL_SOBE = 0; SINAL_ALTA = 0; SINAL_BAIXA = 0; FECHA_PORTA = 0;
for(i = 0; i < 32; i++) { LIBERA_DADOS = 1; // INIBE A VISUALIZAO DAS SIDAS DO CI 74HC595 BLOCO 1
21
// Delay10KTCYx(18); SH_CP = 0; //Delay10KTCYx(18); ST_CP = 0; INSERE_DADOS = 0; SH_CP = 1; //Delay10KTCYx(18); //delay de 15ms ST_CP = 1; //Delay10KTCYx(18); //delay de 15ms } // DESLOCA BIT ATE A ULTIMA PORTA DO 74HC595 BLOCO 1 //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 BLOCO 1 //ISERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1
7.4 PREPARA PORTA PARA POCICIONAR CABINE DO ELEVADOR NA PRIMEIRA PARADA A primeira manobra que se realiza quando se liga o comando de um elevador garantir o fechamento das portas para que o mesmo se desloque dentro do poo. Nesta parte do programa utilizado uma tcnica diferente parecida com o delay , mas que cria um contador de ciclos (INDEX) dentro de uma funo do que permite um estouro de contagem ou a concluso da funo na ordem do que acontecer primeiro, ela utilizada para manter o motor ligado no menor intervalo de tempo possvel atrazando seu aquecimento durante a operao.
/** PREPARA ESTADO DE PORTA PARA REPOSICIONAMENTO DA CABINE **************************************/
ABRE_PORTA = 0; do { FECHA_PORTA = 1; INDEX ++; if(INDEX == 150000) { FECHA_PORTA = 0; //Delay10KTCYx(240); } //delay //EXECUTA TIPO UM DELAY QUE TER "off" QUANDO "do" FOR SATISFEITO OU FALHA NO ESTOURO DA //CONTAGEM
if(INDEX == 300000)
// EXECUTA TIPO UM DELAY QUE TER "off" QUANDO "do" FOR SATISFEITO OU FALHA NO ESTOURO //DA CONTAGEM
22
// EXECUTA TIPO UM DELAY QUE TER "off" QUANDO "do" FOR SATISFEITO OU FALHA NO ESTOURO //DA CONTAGEM
//delay
7.5 DETECTA FALHA AO FECHAR A PORTA Se durante o comando ocorrer o no fechamento da porta a mesma ser desligada por um intervalo de tempo (ajustado na obra de acordo com o operador de porta) tentando fechar novamente em seguida.
if(INDEX == 600000) { FALHA_FECHAR_PORTA = 4; FECHA_PORTA = 0; while(1) { FECHA_PORTA = 0; ABRE_PORTA = 0; SINAL_SOBE = 0; SINAL_DESCE = 0; SINAL_ALTA = 0; SINAL_BAIXA = 0; DADOS[31] = 1;
// EXECUTA TIPO UM DELAY QUE TER "off" QUANDO "do" FOR SATISFEITO OU FALHA NO ESTOURO //DA CONTAGEM
23
7.6 PROCEDIMENTO PARA ASCENDER LED DE FALHA DENTRO DO WHILE A tentativa para fechar a porta se repetira por trs vezes ao final de todas as tentativas o elevador ira para um loop infinito que mantm um LED de falha acesso at a interveno tcnica no equipamento.
/**PROCEDIMENTO PARA ASCENDER LEDS DE FALHA DENTRO DO WHILE ******************************************* */ for(i = 0; i <= 32; i++) { LIBERA_DADOS = 1; // Delay10KTCYx(18); SH_CP = 0; //Delay10KTCYx(18); ST_CP = 0; //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 BLOCO 1 // INIBE A VISUALIZAO DAS SIDAS DO CI 74HC595 BLOCO 1
// CONDIO // INSERE VALOR DO BIT QUE IR SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1 // OU // INSERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1
LIBERA_DADOS = 0;
//Delay10KTCYx(18);
FECHA_PORTA = 0;
24
7.7 STOP DA CABINE NA POSIO INFERIOR Depois que as portas so fechadas o elevador deve se dirigir para o curso inferior do poo, no intuito de se posicionar para inicio de atendimento das chamadas. A tcnica utilizada aqui idntica ao do fechamento de porta a criao da varivel (INDEX) Conta o nmero de ciclos dentro do do para o estouro ou a satisfao da funo, visando proteger o motor de trao na ordem do que acontecer primeiro e ter que ser regulado de acordo com o tamanho do percurso maximo do poo do elevador.
if( INDEX == 4000000) DA CONTAGEM while(1) { FECHA_PORTA = 0; ABRE_PORTA = 0; SINAL_SOBE = 0; SINAL_DESCE = 0; SINAL_ALTA = 0; SINAL_BAIXA = 0; DADOS[21] = 1;
// EXECUTA TIPO UM DELAY QUE TER "off" QUANDO "do" FOR SATISFEITO OU FALHA NO ESTOURO
// ESTE TIPO DE DELAY GARANTE A MANUTENO DO COMANDO CONTRA //FALHAS QUE PODEM OCORRER COM TRANSIENTES INDUZIDOS PELA FIAO DE POO
for(i = 0; i <= 32; i++) { LIBERA_DADOS = 1; //Delay10KTCYx(18); SH_CP = 0; //Delay10KTCYx(18); ST_CP = 0; if(DADOS[i] == 1) INSERE_DADOS = 1; else INSERE_DADOS = 0; //Delay10KTCYx(18); //ISERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1 // OU //ISERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1 //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 BLOCO 1 // INIBE A VISUALIZAO DAS SIDAS DO CI 74HC595 BLOCO 1
25
SINAL_DESCE = 0; SINAL_BAIXA = 0;
7.10
Depois de atingido o limite inferior do curso da cabine dentro do poo, o mesmo deve parar e contar um tempo para reverter a direo do motor de trao sem causar impacto sobre o mesmo. importante perceber que o elevador passou do nvel da porta do primeiro andar por isto necessrio subir a cabine e nivela-la sem que haja formao de degraus ao abrir a porta
//** NIVELA A CABINE PARA POSIO DA PRIMEIRA PARADA **************************************************** */ //Delay10KTCYx(180); //delay de 150ms
7.11
26
Nesta parte do programa utilizado novamente a tcnica do contador de ciclos (INDEX) dentro de uma funo do que permite um estouro de contagem ou a concluso da funo na ordem do que acontecer primeiro, ela utilizada para manter o motor ligado no menor intervalo de tempo possvel atrazando seu aquecimento durante a operao.
/** PREPARA ESTADO DE PORTA PARA REPOSICIONAMENTO DA CABINE ***************************************************/
FECHA_PORTA = 0;
do { ABRE_PORTA = 1; INDEX++; // CONTA TEMPO ENCREMENTANDO INDEX PARA INDENTIFICAR FALHA DE PORTA FECHANDO
if(INDEX== 150000) { FALHA_ABRIR_PORTA = 1; ABRE_PORTA = 0; Delay10KTCYx(240); //delay } /** TENTATIVA 2 DE FECHAR A PORTA ******************************************************************************/
7.12
if(INDEX == 600000) {
27
FALHA_ABRIR_PORTA = 4; ABRE_PORTA = 0;
7.13
WHILE
/**PROCEDIMENTO PARA ASCENDER LED DE FALHA *****************************************************************************/
for(i = 0; i <= 32; i++) { LIBERA_DADOS = 1; // Delay10KTCYx(18); SH_CP = 0; //Delay10KTCYx(18); ST_CP = 0; //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 BLOCO 1 // INIBE A VISUALIZAO DAS SAIDAS DO CI 74HC595 BLOCO 1
if( DADOS[i] == 1) INSERE_DADOS = 1; // INSERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1
else INSERE_DADOS = 0;
//OU // INSERE VALOR DO BIT QUE IRA SE DESLOCAR NAS PORTA DO 74HC595 BLOCO 1
ABRE_PORTA = 0;
28
7.14
PARA IDENTIFICAO DE ANDAR O elevador utilizar esta funo para armazenar na memria ao posio em que se encontra dentro do poo.
//** EXECUTA LAO DE PROGRAMAO ******************************************************************************/
while(1) {
7.15
Esta parte do programa utiliza um protocolo de varredura serial, auxiliada por um deslocador de movimento denominado 74HC595, onde um pulso alto atinge um nico boto externo de cada vez em tempos distintos e monitorados pelo programa. Isto permite um retorno e identificao do boto pressionado e o mapeamento de uma varivel de acordo com estes . Vide funcionamento em anexo dois (2)
/** FAZ VARREDURA NOS BOTES DE CHAMADA ****************************************************/
INSERE_DADOS2 = 1;
for(i= 0; i < 32; i++) { LIBERA_DADOS2 =1; SH_CP2 = 0; //Delay10KTCYx(18); ST_CP2 = 0; //Delay1KTCYx(18); SH_CP2 = 1; //Delay1KTCYx(18); ST_CP2 = 1; //Delay1KTCYx(18); LIBERA_DADOS2 = 0; //SETA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 DA VARREDURA DE BOTES //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 DA VARREDURA DE BOTES
if(CHAMADAS == 1 && i < 10) chamadas_cab[i] = 1; //ISERE VALOR NA MEMORIA DE CHAMADA DE CABINE
29
if(CHAMADAS == 1 && i >= 10 && i < 20) chamadas_sub[i-10] = 1; if(CHAMADAS == 1 && i >= 20 && i < 30) chamadas_des[i-20] = 1; //ISERE VALOR NA MEMORIA DE CHAMADA DE CABINE //ISERE VALOR NA MEMORIA DE CHAMADA DE SUBIDA
INSERE_DADOS2 = 0; }
//RETORNA ESTADO ZERO PARA DESLOCAR O PRIMEIRO DADO (NIVEL ALTO) AT A ULTIMA PORTA
LIBERA_DADOS2 = 1;
7.16
for(i= 0; i < 32; i++) { if(i < 10) DADOS[i] = chamadas_cab[i]; if(i > 9 && i < 20) DADOS[i] = chamadas_sub[i-10]; if(i > 19 && i < 30) DADOS[i] = chamadas_des[i-20]; }
7.17
Esta parte do programa transfere o sinal de solicitao de chamadas para as sadas do 74HC595 iluminando os LEDS correspondentes aos botes pressionados
/** REGISTRA CHAMADAS DE CABINE ****************************************************/
for(i= 0; i < 32; i++) { LIBERA_DADOS = 1; // Delay10KTCYx(18); SH_CP = 0; //Delay10KTCYx(18); ST_CP = 0; //ZERA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 BLOCO 1 // INIBE A VISUALIZAO DAS SAIDAS DO CI 74HC595 BLOCO 1
if(DADOS[i] == 1) INSERE_DADOS = 1; else INSERE_DADOS = 0; // INSERE VALOR NA VARIAVEL DADOS PARA APAGAR O LED DO BOTO no pressionado SH_CP = 1; //Delay10KTCYx(18); ST_CP = 1; //Delay10KTCYx(18); //SETA OS CLOCK'S DE DESLOCAMENTO DO 74HC595 // INSERE VALOR NA VARIAVEL DADOS PARA ASCENDER O LED DO BOTO RESPECTIVO
30
LIBERA_DADOS = 0; //Delay10KTCYx(18);
7.18
for(i = 0; i < 10; i++) { if((chamadas_sub[i] || chamadas_cab[i] || chamadas_des[i] ) && ANDAR < i) { AUX_CHAM_SUB = 1; break ; } else AUX_CHAM_SUB = 0; }
for(i = 0; i < 10; i++) { if((chamadas_des[i] || chamadas_cab[i] || chamadas_sub[i] ) && ANDAR > i) { AUX_CHAM_DES = 1; break ; } else AUX_CHAM_DES = 0; }
31
7.19
if((SINAL_DESCE || SINAL_SOBE ) && SINAL_BAIXA == 0 && ABRE_PORTA == 0 && PORTA_FECHADA == 1 ) SINAL_ALTA = 1; else SINAL_ALTA = 0;
7.20
SUBIDA Estaciona o elevador para atender a ultima ou a nica chamada existente, com a cabine movimentando em sentido contrario a chamada solicitada. Ex: Uma nica chamada de descida no 4 andar com a cabine estacionada no 2
/** PREPARA PARADA COM REVERSO DE DIREO DESCIDA *********************************************************** */
for(i = 0; i < 10; i++) if(chamadas_des[i] == 1) { AD = 1;//AD = 1 >>> ha chamadas de descida; AD = 0 >>> nao ha chamandas de descida break; }
for(i = 0; i < 10; i++) if(chamadas_cab[i] || chamadas_des[i] || chamadas_sub[i] && i > MAIOR) MAIOR = i;
for(i = 0; i < 10; i++) if(chamadas_sub[i]) { AS = 1;//AS = 1 >>> ha chamadas de subida; AS = 0 >>> nao ha chamandas de subida
32
break; }
for(i = 0; i < 10; i++) if(chamadas_cab[i] ||chamadas_sub[i] || chamadas_des[i] && i < MENOR) MENOR = i;
7.21
for(i = 0; i < 10; i++) { if((chamadas_cab[i] || chamadas_des[i] ) && PREPARA_PARADA && ANDAR - i == 1 && SINAL_DESCE) { SINAL_BAIXA = 1; SINAL_ALTA = 0; break; } if((chamadas_cab[i] || chamadas_sub[i]) && PREPARA_PARADA && i - ANDAR == 1 && SINAL_SOBE) { SINAL_BAIXA = 1; SINAL_ALTA = 0; break; } }
7.22
PARADA
/** PARADA***************************************************************************************************************************/
for(i = 0; i < 10; i++) { if(NIVELAMENTO && ANDAR == i && SINAL_BAIXA) { SINAL_BAIXA = 0;
if(PORTA_ABERTA == 0)
33
PARADA = 1; }
7.23
CANCELANDO CHAMADA
for(i = 0; i < 10; i++) if(SINAL_SOBE == 0 && SINAL_DESCE == 0 && i == ANDAR) { chamadas_cab[ANDAR] = 0; chamadas_sub[ANDAR] = 0; chamadas_des[ANDAR] = 0; }
7.24
ABRE PORTA
7.25
FECHA PORTA
for(i=0; i<10; i++) { if((chamadas_cab[i] || chamadas_des[i] || chamadas_sub[i]) && PORTA_FECHADA == 0) { FECHA_PORTA = 1; break; } else
34
7.26
{
CONFIGURA SISTEMA
void ConfiguraSistema (void) /** Configura todas as 13 portas analgicas ANx (portas do conversor A/D) como pinos digitais*******************************************/
ADCON1 |= 0x0F;
//ENTRADA
TRISAbits.TRISA4 = 1; TRISDbits.TRISD0 = 1; TRISDbits.TRISD1 = 1; TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISDbits.TRISD4 = 1; TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; TRISBbits.TRISB2 = 1; TRISBbits.TRISB3 = 1; TRISBbits.TRISB6 = 1; TRISBbits.TRISB7 = 1; TRISCbits.TRISC6 = 1; TRISEbits.TRISE0 = 1; TRISEbits.TRISE1 = 1;
// CHAMADAS // BIT A DA POSIO // BIT B DA POSIO // BIT C DA POSIO // BIT D DA POSIO // SENSOR DE NIVELAMENTO DE ANDARES // VA // VB // VC // VD // INDICAO DE PORTA ABERTA // INDICAO DE PORTA FECHADA // SENSOR DE PORTA FECHADA // SENSOR LIMITE DE DESCIDA // SENSOR LIMITE DE SUBIDA
/***********************************************************************************************/
//SAIDAS
TRISDbits.TRISD5 = 0; TRISDbits.TRISD6 = 0; TRISDbits.TRISD7 = 0; TRISEbits.TRISE2 = 0; TRISAbits.TRISA0 = 0; TRISAbits.TRISA1 = 0; TRISAbits.TRISA2 = 0; TRISAbits.TRISA3 = 0; TRISAbits.TRISA5 = 0; TRISCbits.TRISC7 = 0; TRISCbits.TRISC0 = 0; TRISCbits.TRISC1 = 0; TRISCbits.TRISC2 = 0; TRISCbits.TRISC6 = 0; TRISBbits.TRISB4 = 0; TRISBbits.TRISB5 = 0;
// SINAL_SOBE // SINAL_ALTA // SINAL_BAIXA // FECHA PORTA // SH_CP2 // INSERE_DADOS2 // ST_CP2 // LIBERA_DADOS2 // PARADA // ABRE PORTA // SH_CP // DATA // ST_CP // LIBERA_DADOS // SINAL DESCE // PREPARAO DE PARADA
35
}//end ConfiguraSistema
/** V E C T O R R E M A P P I N G ***********************************************************/ // Seo necessria para informar ao compilador C18 onde so os novos endereos //da memria de programa que ele deve alocar as rotinas de tratamento do evento //de "reset" do microcontrolador. // //ATENO: COPIAR ESTA SEO DO CODIGO PARA TODO ARQUIVO "main.c" DOS PROJETOS //QUE UTILIZAM O BOOTLOADER PARA GRAVAO IN-CIRCUIT.
extern void _startup (void); void _reset (void) { _asm goto _startup _endasm } #pragma code
8 CONSIDERAES FINAIS OU CONCLUSO Diego Corradi O curso de PIC foi de grande importncia, a partir dele adquiri uma viso melhor sobre microcontroladores e melhorei meu raciocnio com lgica digital. E ainda tive a oportunidade de conhecer o Luiz que me ensinou muitas coisas na rea de eltrica e eletrnica, ampliando minha viso na rea. Com o projeto de concluso de curso obtive conhecimentos do funcionamento do elevador, parte de sensoriamento, prioridades, alm de conhecer novos dispositivos eletrnicos e otimizar um projeto a partir de portas lgicas, flip flop's, e melhorar meu raciocnio com programao de computadores, linguagem C. Luiz Cludio Ao participar do curso da PICMINAS no primeiro dia de aula senti dificuldades para realizar um programa que ascendesse apenas um LED, sem conhecimento nenhum para tal. Acho que o programa acima diz por si prprio a evoluo que o curso proporcionou em minha vida em apenas duas semanas.
36
REFERNCIAS BIBLIOGRFICAS
EBAH!, Pedro. MANUAL PROTEUS EM PORTUGUS. Disponvel Em:<http//:www.prdf.mpf.gov.br/~gazoto/monograf/revfranc> Acesso em: 04 Abr. 2010.