segunda-feira, 10 de dezembro de 2012

Desafio 4.0


Desafio 4.0 é o programa de uma panificadora

Link do desafio: http://www.4shared.com/office/SLHLW3-A/desafio4.html?

Link de exemplo: http://www.4shared.com/rar/-kNV9Lz1/exemplo_parte_des4.html?



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

#define liga_desliga (1<<13)
#define porta_aberta (1<<14)
#define motor_liga IOSET1 =(1<<24)
#define motor_desliga IOCLR1 =(1<<24)
#define resistencia_liga IOSET1 =(1<<23)
#define resistencia_desliga IOCLR1 =(1<<23)
#define programa_1 (1<<10)
#define programa_2 (1<<11)
#define programa_3 (1<<12)

unsigned int val;


__irq void EINT0_IRQHandler (void)
{
lcd_gotoxy (1,0); lcd_puts ("tampa aberta");
resistencia_desliga;
motor_desliga;
EXTINT = 1;
VICVectAddr = 0;
}

__irq void EINT1_IRQHandler (void)
{
EXTINT = 2;
VICVectAddr = 0;
}

__irq void DefISR (void) {
}
int tempo () {int t;for(t=0;t<100;t++);}
int atualiza (void)
{
ADCR |= 0x01000000;
while((ADDR & 0x80000000)==0);
val = ((ADDR >>6) & 0x03FF);
}
int tempo_1 (void)
{
int d;
for (d=0;d<1000000;d++);
}

int main (void)
{
IODIR0=0xFFFF83FF;
IODIR1=0xFFFFFFFF;
init_lcd ();
lcd_clr();
lcd_puts("PANIFICADORA");
PINSEL1 = 0x400001;
VPBDIV = 0x02;
ADCR = 0x00210601;
EXTMODE = 0x00;
EXTPOLAR = 0x00;
EXTINT = 0x03;

VICVectAddr0 = (unsigned long) EINT0_IRQHandler;
VICVectCntl0 = (0x20|14);
VICIntEnable|= ((unsigned long)1<<14);

VICVectAddr1 = (unsigned long) EINT1_IRQHandler;
VICVectCntl1 = (0x20|15);
VICIntEnable|= ((unsigned long)1<<15);

VICDefVectAddr = (unsigned long) DefISR;

while(1)
{
{
if (val>=100) (IOPIN0& programa_1);
lcd_clr ();
lcd_gotoxy(1,0);
lcd_puts("programa 1");
motor_liga;
tempo_1();
lcd_clr ();
lcd_gotoxy(1,0);
lcd_puts("misturando");
motor_desliga;
tempo_1();
resistencia_liga;
tempo_1();
lcd_clr ();
lcd_gotoxy(1,0);
lcd_puts("Assando");
resistencia_desliga;
lcd_clr ();
lcd_gotoxy(1,0);
lcd_puts("programa 1 fim");
while(1);
}
{
if (IOPIN0& (programa_2))
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("programa 2");
motor_liga;
tempo_1();
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("misturando");
motor_desliga;
tempo_1();
tempo_1();
resistencia_liga;
tempo_1();
tempo_1();
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("Assando");
resistencia_desliga;
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("programa 2 fim");
while(1);
}

if (IOPIN0& (programa_3))
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("programa 3");
motor_liga;
tempo_1();
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("misturando");
 lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("misturando");
motor_desliga;
tempo_1();
tempo_1();
resistencia_liga;
tempo_1();
tempo_1();
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("Assando");
resistencia_desliga;
lcd_clr ();
lcd_gotoxy(1,2);
lcd_puts("programa 3 fim");
while(1);


}
}

Foto do programa no KEIL.









Foto do circuito no PROTEUS.




segunda-feira, 3 de dezembro de 2012

Desafio 3.1 conversor analógico / digital

Este é um conversor AD. Usamos um display digital de 7 segmentos para medir uma tensão variável.

link do desafio: http://www.4shared.com/office/tbdqlj-V/desafio31.html?


#include <lpc21xx.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 num1 IOSET1=b|c ; IOCLR1=a|d|e|f|g  // liga numero 1
#define num2 IOSET1=a|b|g|e|d ; IOCLR1=c|f  // liga numero 2
#define num3 IOSET1=a|b|c|d|g ; IOCLR1=e|f  // liga numero 3
#define num4 IOSET1=b|c|f|g ;  IOCLR1=a|d|e // liga numero 4
#define num5 IOSET1=a|c|d|f|g ; IOCLR1=b|e  // liga numero 5
#define apaga IOCLR1=a|b|c|d|e|f|g // desliga os sete segmentos

 unsigned int val;

int main (void)

{
IODIR0 = 0X0;
IODIR1 = 0XFFFFFFFF;
PINSEL1 = 0X400000;
VPBDIV = 0X02;
ADCR = 0X00210601;

num5;
while (1)
{
ADCR |=0X01000000;
while ((ADDR & 0X80000000) ==0);
val = ((ADDR >> 6) & 0X03FF);

if(val<200){num1;}
else if(val<500) {num2;}
else if(val<700) {num3;}
else if(val<850) {num4;}
else if(val<1100) {num5;}
}
}
  

criamos o projeto seguindo as informações deixadas pelos professores no blog.



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.