Diretrizes:
Nas diretrizes Consta como saída um Display Grafico, que deveria ser escrito o que diz nas diretrizes da segunda imagem, só que não é obrigatório usa-lo.
Nessa primeira imagem esta descrito o que é entra e o que é saída.
Nessa imagem tem o que deve aparecer no display e o que cada função faz. Como disse antes, o display Gráfico não precisamos utiliza-lo.
O meu programa ficou da seguinte maneira:
#include <lpc21xx.h>
#include "C:\Keil\ARM\lcd.h"
#define liga_des (1<<24)
#define prog_1 (1<<25)
#define prog_2 (1<<26)
#define prog_3 (1<<27)
#define resistencia (1<<28)
#define motor (1<<29)
unsigned int val;
__irq void EINT0_IRQHandler(void)
{
IOCLR1 = motor;
lcd_clr();
lcd_gotoxy(1,0);
lcd_puts("fechar a tampa");
EXTINT = 1;
VICVectAddr = 0;
}
__irq void DefISR (void) {
}
int tempo (int limite)
{
int t;
for(t=0;t<limite;t++);
}
int mistura_massa (void)
{
IOSET1 = motor;
tempo(5000000);
IOCLR1 = motor;
}
int atualiza (void)
{
ADCR |= 0x01000000;
while ((ADDR & 0x80000000) == 0);
val = ((ADDR >> 6) & 0x03FF);
}
int main(void)
{
IODIR0 = 0XF7FEFFFF;
IODIR1 = 0XF0FFFFFF;
init_lcd();
lcd_clr();
lcd_puts("PANIFICADORA 4.0");
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);
VICDefVectAddr = (unsigned long) DefISR;
while(1)
{
atualiza();
while ((IOPIN1&(liga_des)))
{
lcd_clr();
lcd_puts("DESLIGADA");
}
lcd_clr();
lcd_puts("LIGADA");
while(1)
{
lcd_clr();
lcd_gotoxy (0,3);
lcd_puts("SELECIONE");
lcd_gotoxy (1,3);
lcd_puts("PROGRAMA");
if (!(IOPIN1&(prog_1)))
{
lcd_clr();
lcd_gotoxy (0,3);
lcd_puts("Selecionado");
lcd_gotoxy (1,5);
lcd_puts("PAO");
goto prog1;
}
if (!(IOPIN1&(prog_2)))
{
lcd_clr();
lcd_gotoxy (0,3);
lcd_puts("SELECIONADO");
lcd_gotoxy (1,5);
lcd_puts ("BOLO");
goto prog2;
}
if (!(IOPIN1&(prog_3)))
{
lcd_clr();
lcd_gotoxy (0,3);
lcd_puts("SELECIONADO");
lcd_gotoxy (1,3);
lcd_puts ("PAO SOVADO");
goto prog3;
}
}
prog1:
{
while (!(IOPIN1&(prog_1)))
{
lcd_clr();
lcd_puts("Misturando massa");
mistura_massa();
lcd_clr();
lcd_puts("Massa em repouso");
tempo(5000000);
goto cozinha1;
}
cozinha1:
if (val<200)
{
IOSET1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(80000000);
}
else if (val>200)
{
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(80000000);
goto fim1;
}
fim1:
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("PRONTO");
while(1);
}
prog2:
{
while (!(IOPIN1&(prog_2)))
{
lcd_clr();
lcd_puts("Misturando massa");
mistura_massa();
lcd_clr();
lcd_puts("Massa em repouso");
tempo(5000000);
goto cozinha2;
}
cozinha2:
if (val<250)
{
IOSET1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(5000000);
}
else if (val>400)
{
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(6500000);
goto fim2;
}
fim2:
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("PRONTO");
while(1);
}
prog3:
{
while (!(IOPIN1&(prog_3)))
{
lcd_clr();
lcd_puts("Misturando massa");
mistura_massa();
lcd_clr();
lcd_puts("Massa em repouso");
tempo(5000000);
goto cozinha3;
}
cozinha3:
if (val<400)
{
IOSET1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(6000000);
}
else if (val>600)
{
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("ASSANDO");
tempo(5000000);
goto fim3;
}
fim3:
IOCLR1 = resistencia;
lcd_clr();
lcd_puts("PRONTO");
while(1);
}
}
}
Bom, as características da minha panificadora, não são muito diferentes das dos demais alunos, Ela tem uma chave de interrupção, para que se a tampa estiver aberta ou for aberta durante o processo, a panificadora pare de trabalhar, contem também uma chave de liga e desliga, e outras três chaves, uma para cada programa, ou seja, há três tipos de pão que podem ser feitos, que são: Pão, Bolo, Pão Sovado.
Há também uma resistência, para poder assar o alimento, e um motor, para mexer a massa, a resistência é acionada por um Relé.
-FOTO:
Vídeo do Funcionamento:
O vídeo a Seguir mostra o funcionamento do programa, Se acompanharmos o display, veremos que ele descreve o que esta acontecendo, primeiro ele avisa que esta desligada, quando pressionamos o botão de liga e desliga ele escreve Ligada, e Pede para selecionar o Programa, o primeiro que escolho é o Bolo, então ele mistura a massa e logo a deixa em repouso, por fim o assa, termina o processo. Depois escolho o Programa Pão. Note que ele demora mais, pois o tempo que escolhi para cada programa é diferente.
E o próximo vídeo, demonstra como funciona a interrupção, note que ao pressionar a chave da tampa, imediatamente o programa para e escreve no display para fechar a tampa, e quando pressionada novamente ela volta para onde estava.
Então.. Esse foi meu desafio 4.0, espero que o post tenha sido claro, e que possa ser entendido com facilidade. Agora vou correr para Fazer o desafio 5.0, espero que consiga termina- lo.
Abraço!!!!



Nenhum comentário:
Postar um comentário