segunda-feira, 3 de dezembro de 2012

Desafio 3.0 Semaforo

Elaboramos um programa para controlar com semáforo o fluxo de carros de um cruzamento.

link do projeto: http://www.4shared.com/office/Q-oc7KGY/desafio_3.html?




#include <lpc213x.h>
#include "E:\Douglas\TEC. ELETRONICA\SISTEMAS MICROCONTROLADOS\KEIL\lcd.h"

#define vermelho_1 (1<<16)
#define amarelo_1 (1<<17)
#define verde_1  (1<<18)
#define vermelho_2 (1<<19)
#define amarelo_2 (1<<20)
#define verde_2 (1<<21)
#define botao_economia (1<<22)


int tempo_1 (void)
{
int d;
for (d=0;d<100000;d++);
}
int main (void)

{
IODIR0 = 0XFFFFFFFF;
IODIR1 = 0XFFBFFFFF;
init_lcd();

if (!(IOPIN1&(botao_economia)))

{
IOSET1 = amarelo_1;
IOSET1 = amarelo_2;
tempo_1 ();
IOCLR1 = amarelo_1;
IOCLR1 = amarelo_2;
lcd_clr(); 
lcd_puts("falta de luz");
}

else
while (1)
{
IOSET1 = vermelho_1;
IOSET1 = verde_2;
lcd_clr();
lcd_puts("rua 2 aberta");

IOSET1 = amarelo_2;
tempo_1 ();
IOCLR1 = amarelo_2;

IOCLR1 = vermelho_1;
IOCLR1 = verde_2;


IOSET1 = verde_1;
IOSET1 = vermelho_2;
lcd_clr(); 
lcd_puts("rua 1 aberta");

IOSET1 = amarelo_1;
tempo_1 ();
IOCLR1 = amarelo_1;

IOCLR1 = vermelho_2;
IOCLR1 = verde_1;
}
}



Desafio 2.0 Maquina de lavar

Neste desafio fizemos um programa completo de uma maquina de lavar roupas.

   

CRIAMOS O PROGRAMA NO KEIL.

#include <lpc213x.h>
#include "E:\Douglas\TEC. ELETRONICA\SISTEMAS MICROCONTROLADOS\KEIL\lcd.h"

#define botao_liga_desliga (1<<15)
#define valvula_admissao (1<<16)
#define sensor_porta (1<<16)
#define bomba_expurgo (1<<17)
#define motor_1 (1<<18)
#define motor_2 (1<<19)
#define sensor_nivel (1<<20)


int tempo (void)
{
int d;
for (d=0;d<100000;d++);
}
int main (void)

{

IODIR0 = 0XFFFEFFFF;
IODIR1 = 0XFFEFFFFF;
init_lcd();

if (IOPIN0&(botao_liga_desliga)) // liga a maquina
{
IOCLR1 = valvula_admissao; // desliga bomba de agua
lcd_clr(); //limpa tela do lcd
lcd_puts("maquina desligada"); //mensagem do lcd
}

if (!(IOPIN0&(sensor_porta))) // porta fechada a maquina liga
{
IOSET1 = valvula_admissao; // liga bomba de agua
lcd_clr (); // limpa a tela do lcd
 lcd_puts("admitindo agua"); // mensagem da tela
}
else
{
IOCLR1 = valvula_admissao; // desliga bomba de agua
lcd_clr(); //limpa tela do lcd
lcd_puts("porta aberta"); //mensagem do lcd
while (1);
}
if(!(IOPIN0&(sensor_porta)))
{
IOSET1 = valvula_admissao;
lcd_clr();
lcd_puts("Admitindo Agua");
IOCLR1 = valvula_admissao;
IOSET1 = motor_1;
lcd_clr();
lcd_puts("lavando para direita");
tempo();
IOCLR1 = motor_1;
IOSET1 = motor_2;
lcd_clr();
lcd_puts("lavando para esquerda");
tempo();
IOCLR1 = motor_2;
tempo();
IOCLR1 = motor_2;
IOSET1 = bomba_expurgo;
lcd_clr();
lcd_puts("esvaziando agua");
IOCLR1 = bomba_expurgo;
IOSET1 = valvula_admissao;
lcd_clr();
lcd_puts("enxaguando");
IOCLR1 = valvula_admissao;
IOSET1 = bomba_expurgo;
tempo();
IOCLR1 = bomba_expurgo;
IOSET1 = motor_1;
IOSET1 = motor_2;
lcd_clr();
lcd_puts("centrifugando");
IOCLR1 = motor_1;
IOCLR1 = motor_2;
lcd_clr();
lcd_puts("FIM DO CICLO");
while (1);
}
}

Após criar o programa no keil montamos o circuito no Proteus e verificamos o funcionamento conforme o vídeo.


imagem do circuito.



domingo, 28 de outubro de 2012

Desafio 1.2 Aprimoramento da caixa de água

Neste desafio aprimoramos a caixa de água dos desafios anteriores com um lcd. Ele mostrará mensagens de caixa cheia, vazia ou falta de água.

link do desafio
http://www.4shared.com/office/MNc-89Rd/desafio12.html?
OBS: nao usar o pino 0.14 pois este não funcionará corretamente, usar o 0.21.

link para download do arquivo lcd.h
http://www.4shared.com/file/QZIoHjW8/lcd.html?
este arquivo é programa do lcd que já está pronto.

O programa não é muito diferente do anterior, o que muda é somente os comandos do lcd que vou destacar em amarelo.

#include <lpc213x.h>
#include "E:\Douglas\TEC. ELETRONICA\SISTEMAS MICROCONTROLADOS\lcd\3_LCD 2X 16\lcd.h"

#define maximo (1<<16)
#define minimo (1<<17)
#define bomba (1<<18)
#define dmae (1<<21)

int main (void)
{

IODIR0 = 0XFFFFDFFF;
IODIR1 = 0XFFDCFFFF;
init_lcd();
while(1)
{

if (!(IOPIN1&(dmae)))
{
IOCLR1 = bomba;
lcd_clr (); // LIMPA A TELA
lcd_puts ("falta de agua"); // MENSAGEM DA TELA
}

        else

{
        if (IOPIN1&(maximo))
        {
IOCLR1 = bomba;
lcd_clr (); // LIMPA A TELA
lcd_puts ("nivel alto"); // MENSAGEM DA TELA
}

else

if(!(IOPIN1&(minimo)))
{
IOSET1 = bomba;
lcd_clr (); // LIMPA A TELA
lcd_puts ("nivel baixo"); // MENSAGEM DA TELA
        }
}
}
}

Após criar todo o programa, criamos o arquivo .hex e começamos a montar o circuito no Proteus para testar o funcionamento do programa.



Após a montagem do circuito passamos o programa do Keil para o proteus. Para isto basta clicar duas vezes em cima do microcontrolador. Vai abrir uma caixa onde deve ser  colocado o endereço de onde está o  programa no Keil e pronto.





segunda-feira, 24 de setembro de 2012

Criar um arquivo .hex

O Arquivo .hex é usado para passar o programa criado no Keil para o Proteus.

Depois de criado todo o programa como fizemos no primeiro post. Vamos criar o arquivo .hex
Pressione as teclas Alt + F7, vai abrir o menu Options for Target lá vc encontra aba output clique nela e selecione a opção creat HEX file. Após feito isso clique em rebuild para gerar o arquivo e pronto.

domingo, 16 de setembro de 2012

Desafio 1.1

Desafio 1.1 é uma melhoria do 1.0.
Colocamos um sensor antes da bomba que enche a caixa de água, assim quando falta água a bomba é desligada.

Link do desafio 1.1
http://www.4shared.com/office/kzMn6I-t/desafio_11.html?



#include <lpc213x.h>
#define maximo (1<<2)
#define minimo (1<<3)
#define bomba (1<<7)
#define dmae (1<<14)
int main (void)
{
IODIR0 = 0XFFFFBFF3;
if (!(IOPIN0&(dmae)))
{
IOCLR0 = bomba;
}
else
{
if (IOPIN0&(maximo))
{
IOCLR0 = bomba;
}
else
if(!(IOPIN0&(minimo)))
{
IOSET0 = bomba;
}
}
}

Identificamos aqui que se o P0.14 estiver ligado quando o nível da caixa estiver baixo a bomba ligará automaticamente, porém se eu desligar o P0.14 e o nível da caixa estiver baixo, ele não ligará a bomba para evitar a queima.

Desafio 1.0

Conforme desafio 1.0 iremos colocar um controlador de nível em uma caixa de água, quando o nível esta baixo o microcontrolador ligará a bomba até encher.

Link do Desafio para quem tiver a curiosidade e vontade de fazer.
http://www.4shared.com/office/neEOuc_k/desafio_10_2.html?



  • Como já vimos anteriormente iremos abrir um novo projeto.
  • Após aberto escrever os seguintes comandos.
#include <lpc213x.h>
#define maximo (1<<2)
#define minimo (1<<3)
#define bomba (1<<7)

int main (void)
{
IODIR0 = 0XFFFFFFF3;
if (IOPIN0&(maximo))
{
IOCLR0 = bomba;
}
else
{
if(!(IOPIN0&(minimo)))
{
IOSET0 = bomba;
}
}
}

Após digitar, abra o simulador e teste o funcionamento.
Será visto que o P0.2 será o sensor máximo da caixa, se ele estiver desligado a caixa está esvaziando, quando  o P0.3 desligar também o P0.7 liga a bomba de água enchendo a caixa novamente. Quando o nível de água atingir o sensor máximo o P0.2 vai ligar novamente e o P0.7 desligará.