sábado, 15 de dezembro de 2012

Desafio 4 " A Panificadora"

Primeiramente gostaria de agradecer ao meu colega Anderson Castanho, pois sem ele não conseguiria realizar este desafio... Valeu Anderson.


Este desafio tinha como proposta desenvolver uma maquina panificadora, que iria fazer 3 tipos de pães diferentes.
Programa:


#include <lpc213x.h>                   
#include "C:\Keil\ARM\lcd.h"            
#define  liga (1<<17)   
#define  sensor (1<<16)             
#define  tipo1 (1<<20)
#define  tipo2 (1<<21)
#define  tipo3 (1<<22)
#define  misturar (1<<16)
#define  forno (1<<17) 

int tempo (int limite)
{
int t;0;                     
for (t=0;t<limite;t++);      
}
int main (void)
{                     
IODIR0 = 0xFFFCFFFF;    
IODIR1 = 0xFF8FFFFF;
init_lcd ();                   
if (!(IOPIN0 & (liga)))
{
lcd_clr();
lcd_puts("OFF");
}

 while (IOPIN0 & (liga))             
 {
  if (IOPIN0 & (sensor))       
{                                     
lcd_clr();
lcd_puts("ESCOLHA"); 
}
if (!(IOPIN0 & (sensor)))
    {
lcd_clr();
lcd_puts("TAMPA ABERTA");
IOCLR1 = (misturar);
IOCLR1 = (forno);
    }
while (IOPIN1 & (tipo1))
{
lcd_clr();
lcd_puts("TIPO1");
IOSET1 = (misturar);
tempo(300000);
IOCLR1 = (misturar);
lcd_clr();
lcd_puts("PAUSA");
tempo(3000000);
IOSET1 = (forno);
lcd_clr();
lcd_puts("ASSANDO");
tempo(3000000);
IOCLR1 = (forno);

while(IOPIN1 & (tipo1))
{
lcd_clr();
lcd_puts("PAO PRONTO"); 
}
}
}
}
while(IOPIN1&(tipo2))
{
lcd_clr();
lcd_puts("TIPO2");
IOSET1 = (misturar);
tempo(6000000);
IOCLR1 = (misturar);
lcd_clr();
lcd_puts("PAUSA");
tempo(6000000);
IOSET1 = (forno);
lcd_clr();
lcd_puts("ASSANDO");
tempo(6000000);
IOCLR1 = (forno);
}
while (IOPIN1 & (tipo2))
{
lcd_clr();
lcd_puts("PAO PRONTO"); 
}
while (IOPIN1 & (tipo3))
{
lcd_clr();
lcd_puts("TIPO3");
IOSET1 = (misturar);
  tempo(9000000);
IOCLR1 = (misturar);
lcd_clr();
lcd_puts("PAUSA");
  tempo(9000000);
IOSET1 = (forno);
lcd_clr();
lcd_puts("ASSANDO");
  tempo(9000000);
IOCLR1 = (forno);
while (IOPIN1 & (tipo3))
{
lcd_clr();
lcd_puts("PAO PRONTO");
}
}


Desafio 3.1 "Níveis de Temperatura"

Olá Pessoal, este desafio tinha como proposto criar 5 níveis de temperatura para conversão em um display de 7 segmentos.


Programa:



#include <lpc21xx.h>    
#include <stdio.h>
                                 
#define a (1<<16)    
#define b (1<<17)    
#define c (1<<18)    
#define d (1<<19)    
#define e (1<<20)    
#define f (1<<21)    
#define g (1<<22)
#define n1 IOSET1=b|c ; IOCLR1=a|d|e|f|g
#define n2 IOSET1=a|b|e|d|g ; IOCLR1=c|f
#define n3 IOSET1=a|b|c|d|g ; IOCLR1=e|f
#define n4 IOSET1=b|c|f|g ; IOCLR1=a|d|e
#define n5 IOSET1=a|c|d|f|g ; IOCLR1=b|e

unsigned int val;
unsigned char teste[];

int main(void)      
{
IODIR1 = 0xffffffff;
PINSEL1 = 0x400000;
VPBDIV = 0x02;              
ADCR   = 0x00210601;

while(1)
{
atualiza:
ADCR  |= 0x01000000;              
while ((ADDR & 0x80000000) == 0);  
val = ((ADDR >> 6) & 0x03FF);

if (val<204)
{
 IOSET1=(n1);
 goto atualiza;
}
else if (val>204 & val<408)
{
 IOSET1=(n2);
 goto atualiza;
}
else if (val>408 & val<612)
{
 IOSET1=(n3);
 goto atualiza;
}
else if (val>612 & val<816)
{
 IOSET1=(n4);
 goto atualiza;
}
else if (val>816 & val<1023)
{
 IOSET1=(n5);
 goto atualiza;
}
}
}


Isso é tudo Pessoal

terça-feira, 11 de dezembro de 2012

Desafio 3.0 " Semáforos"

Este desafio consiste em controlar duas sinaleiras de ruas diferentes, mostrando no display seus estados ( se aberta ou fechada).


Meu Programa:



#include <lpc213x.h>
#include <C:\Keil\ARM\lcd.h>
#define vms1 (1<<16)
#define ams1 (1<<17)
#define vds1 (1<<18)
#define vms2 (1<<19)
#define ams2 (1<<20)
#define vds2 (1<<21)

void tempo (int limite)
{
int t=0;
for (t=0;t<limite;t++);//Função para chamar Tempo//
}

int main (void)
{
IODIR0=0xffffffff;
init_lcd();
while(1)
{
IOSET0=(vds1);
IOSET0=(vms2);
lcd_clr();
lcd_gotoxy(0,0);
lcd_puts("Rua 1 Aberta");
lcd_gotoxy(1,0);
lcd_puts("Rua 2 Fechada");
tempo(10000000);
IOCLR0=(vds1);
IOCLR0=(vms2);
IOSET0=(ams1);
IOSET0=(ams2);
tempo(10000000);
IOCLR0=(ams1);
IOCLR0=(ams2);
IOSET0=(vms1);
IOSET0=(vds2);
lcd_clr();
lcd_gotoxy(0,0);
lcd_puts("Rua 1 Fechada");
lcd_gotoxy(1,0);
lcd_puts("Rua 2 Aberta");
tempo(10000000);
IOCLR0=(vms1);
IOCLR0=(vds2);
IOSET0=(ams1);
IOSET0=(ams2);
tempo(10000000);
IOCLR0=(ams1);
IOCLR0=(ams2);
}
}

O Circuito no Proteus ficou assim:



Desafio 2.0 " A Maquina de Lavar"

Bom pessoal... aí vai minha tarefa 2.0, que consistia em realizar as funções de uma maquina de lavar roupas, Admitindo água, lavando, enxaguando e enfim centrifugando.


Meu programa é o seguinte:



#include <lpc213x.h>
#include <C:\Keil\ARM\lcd.h>
#define chave (1<<22)
#define sensorn (1<<20)
#define sensorp (1<<21)
#define valvula (1<<16)
#define expurgo (1<<17)
#define motor1 (1<<18)
#define motor2 (1<<19)
void tempo (int limite)
{
int t=0;
for (t=0;t<limite;t++);//Função para chamar Tempo//
}
void main (void)
{
IODIR1=0xff8fffff;
init_lcd();
while(1)
{
if(!(IOPIN1&(chave))) // Se chave for 0//
{
IOCLR1=(valvula);//Não liga água//
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Ligue a Maquina");
}
else
{
if(!(IOPIN1&(sensorp)))//Se a cahve for 1 ele verifica a porta//
{
IOCLR1=(valvula);//Não liga a admissão se a porta for 0//
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Feche a Porta");
}
else
{
IOSET1=(valvula);//Se a for 1 liga a admissao de água//
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Admitindo Agua");
if(!(IOPIN1&(sensorn)))//Se o sensor for 0 continua ligado a valvula//
{
IOSET1=(valvula);
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Admitindo Agua");
}
else
{
IOCLR1=(valvula);
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Lavando");
IOSET1=(motor1);
tempo(10000000);
IOCLR1=(motor1);
IOSET1=(motor2);
tempo(10000000);
IOCLR1=(motor2);
IOSET1=(motor1);
tempo(10000000);
IOCLR1=(motor1);
IOSET1=(motor2);
tempo(10000000);
IOCLR1=(motor2);
      IOSET1=(motor1);
tempo(10000000);
IOCLR1=(motor1);
IOSET1=(motor2);
tempo(10000000);
IOCLR1=(motor2);
IOSET1=(expurgo);//Liga o expurgo e a agua desce do nivel//
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Enxaguando");
tempo(10000000);
IOCLR1=(expurgo);
IOSET1=(valvula);
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Agua Novamente");
while(IOPIN1&(valvula))
{
if(!(IOPIN1&(sensorn)))//Se sensor de nivel 0 continua ligada a valvula//
{
IOSET1=(valvula);
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Agua Novamente");
while(!(IOPIN1&(sensorn)))
{
IOSET1=(valvula);
}
IOCLR1=(valvula);
IOSET1=(expurgo);
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Centrifugando");
tempo(10000000);
IOSET1=(motor1);
IOSET1=(motor2);
tempo(10000000);
IOCLR1=(motor1);
IOCLR1=(motor2);
lcd_clr();
lcd_gotoxy(1,1);
IOCLR1=(expurgo);
lcd_puts("Fim de Ciclo");
}
while(1)
{
lcd_clr();
lcd_gotoxy(1,1);
lcd_puts("Fim de Ciclo");
}
}
}
}
}
}
}

Depois de programar este ciclo testei no Proteus. Funcionouu Perfeitamente.

O circuito ficou assim:



Isso é tudo Pessoal!!!!!!

terça-feira, 9 de outubro de 2012

Desafio 1.2 (Concluído)!!!!!

Ai Pessoal vai meu desafio 1.2 resolvido...


Bom esse desafio nada mais era que adicionar um display de LCD ao programa do desafio1.1.

Programa realizado no Keil...

#include <lpc213x.h>
#include <C:\Keil\ARM\lcd.h>
#define monitor1 (1<<17)
#define monitor2 (1<<18)
#define bomba (1<<20)
#define DMAE (1<<19)

void main(void)
{
IODIR1 = 0xfff1ffff;
init_lcd();
while(1)
{
if(!(IOPIN1&(DMAE))) // Se não tiver água no DMAE, a bomba será desligada//
{
IOCLR1 = (bomba);
lcd_clr();
lcd_gotoxy(1,2);
lcd_puts("Falta de Agua");
}
else
{
if(!(IOPIN1&(monitor1))) // Se tiver água no DMAE, será verificado o monitor minimo//
{
IOSET1 = (bomba); // Se não tiver água no monitor minimo a bomba é ligada//
lcd_clr();
lcd_gotoxy(0,0);
lcd_puts("Caixa Enchendo");
}
else
{
if(IOPIN1&(monitor2)) // Se tiver água no monitor minimo, então é verificado o monitor máximo//
{
IOCLR1 = (bomba); // Se o monitor máximo também tiver água a bomba é desligada//
lcd_clr();
lcd_gotoxy(0,2);
lcd_puts("Caixa Cheia");
}
else
{
lcd_clr();
lcd_gotoxy(0,2);
lcd_puts("Caixa Metade");
}
}
}
}
}


Nota-se que eu utilizei novos comandos neste programa...

utilizei os comandos que iram definir as funções do display de LCD, as funções são as seguintes:

init_lcd();  - Este comando irá iniciar o LCD;


lcd_clr(); - Neste comando o LCD será apagado para iniciar sua mensagem;


lcd_gotoxy(x,y); - Aqui você seleciona onde vai começar seu texto, dentro do parenteses você seleciona a coluna e a linha que estará a primeira letra da mensagem;


lcd_puts("Falta de Agua"); - Agora você vai escrever a mensagem a ser apresentada no display, o texto deve ser escrito dentro das aspas.

Após escrever...

Utilizei uma ferramenta chamada Proteus(ISIS), para testar meu circuito.


O circuito ficou como a imagem de cima mostra.



Acima estão todos os componentes do circuito.



Aqui encontram-se as chaves que simulam os sensores de nível de água. Quando acionadas como na imagem acima o nível lógico é 0(zero).



Com todas as minhas entradas em 0(zero), o display apresenta "Falta de Agua" e podemos ver que o LED da bomba d'água não liga.



Quando apenas a minha entrada de falta de água está em 1 o LED da bomba liga, fazendo com que meu display apresente "Caixa Enchendo".



Quando a entrada do sensor minimo esta em 1 também a bomba continua ligada e a mensagem agora é "Caixa Metade".



Quando todas as entradas forem 1, o display indica "Caixa Cheia" e a bomba desliga.



Mesmo que o sensor de máximo for desligado a bomba não liga apenas ligando quando a água passar do nível minimo.

Isso é tudo pessoal....

sábado, 29 de setembro de 2012

Desafio 1.1

Mais um desafio superado!!!

Hoje eu conclui o desafio 1.1, que consistia em em por mais um sensor para monitor nossa caixa d'água, porém desta vez o sensor irá monitorar se a estação de distribuição de água(DMAE) tem água ou não.

Bom, ai vai o programa...

#include <lpc213x.h>
#define monitor1 (1<<2)
#define monitor2 (1<<3)
#define bomba (1<<7)
#define DMAE (1<<14)

void main (void)
{
while(1)
{
IODIR0 = 0xffffbff3;
if(!(IOPIN0&(DMAE))) // Se não tiver água no DMAE, a bomba será desligada//
{
IOCLR0 = (bomba);
}
else
{
if(!(IOPIN0&(monitor1))) // Se tiver água no DMAE, será verificado o monitor minimo//
{
IOSET0 = (bomba); // Se não tiver água no monitor minimo a bomba é ligada//
}
else
{
if(IOPIN0&(monitor2)) // Se tiver água no monitor minimo, então é verificado o monitor máximo//
{
IOCLR0 = (bomba); // Se o monitor máximo também tiver água a bomba é desligada//
}
}
}
}
}

Até a próxima pessoal...

quinta-feira, 20 de setembro de 2012

Criando um projeto no Keil

Eai pessoal, meio atrasado eu vou postar aqui como se cria um projeto no programa Keil uVision.

São 10 passos muito simples, porém sem conhece-los não há com começar a sua programação...



Passo 1 - Se na abertura do Keil tiver algum projeto ja aberto
clicar em PROJECT + CLOSE PROJECT

Passo 2 - Ir em PROJECT + NEW uVISION PROJECT

Passo 3 - O programa vai pedir que faca uma Pasta para salvar as configuracoes do projeto

Passo 4 - Dentro desta pasta salve seu projeto aqui.

Passo 5 - Selecionar o processador que será usado : Nós usamos o NPX(founded by Philips)
clique na pasta e escolha LPC 2138

Passo 6 - O programa vai perguntar (copy'startup'to Project Folder and File to Project) = YES

Passo 7 - Vá em FILE + NEW para cria um novo arquivo

Passo 8 - Após vá na aba FILE e SALVE AS seu arquivo na pasta que criou exemplo: programa_keil.c(importante: salvar sua programação com um nome sem acento e sem espaços)

Passo 9 - Adicione seu arquivo na pasta Source Group ao lado esquerdo da Tela
Clicando com o botao direito e selecionar (ADD FILES TO 'SOURCE GROUP 1'...)

Passo 10 - Vai aparecer seu o arquivo salvo como meu exemplo ''programa_keil.c'' ADD seu programa depois CLOSE e inicie sua programação.


Isso é tudo pessoal!!!!