Então Galera.. O Desafio 4 foi o Ultimo para mim.. foi até onde consegui fazer.
Mas pretendendo utilizar o Blog para ir postando coisas que vou desenvolvendo no curso, coisas sobre a eletrônica Também!!
Em seguida postarei uma projeto desenvolvido na matéria de Eletrônica Digital.. Com o professor Fernando.
Abraço!!
Eron Bitencourt CTE Parobé 632M1 - ARM7
Blog criado para publicação de tarefas e trabalhos realizados na disciplina de Sistemas Microprocessador.
sábado, 22 de dezembro de 2012
domingo, 9 de dezembro de 2012
Desafio 4.0 - Panificadora
Essa Desafio Foi bem difícil, é o ante penúltimo e estamos com pouco tempo pra terminar o que esta faltando, então vou postar esse, e se der tudo certo, postarei o ultimo.
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.
O meu programa ficou da seguinte maneira:
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!!!!
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!!!!
sábado, 8 de dezembro de 2012
Desafio 3.0 Semaforo
Nesse desafio devíamos fazer um semáforo pra 2 ruas, um pra cada. Enquanto uma tivesse aberta a outra taria fechada, e enquanto isso informações vão sendo escritas no LCD, dizendo qual rua esta aberta e qual esta fechada!
Diretrizes:
O meu programa ficou da seguinte forma:
#include <LPC213X.H>
#include "C:\Keil\ARM\lcd.h"
#define S1_VERM (1<<16)
#define S1_AM (1<<17)
#define S1_VERDE (1<<18)
#define S2_VERM (1<<19)
#define S2_AM (1<<20)
#define S2_VERDE (1<<21)
#define CEEE (1<<22)
int d;
int i;
lcd_init();
void ceee (void)
{
IOCLR1 = (S1_VERM);
IOCLR1 = (S1_AM);
IOCLR1 = (S1_VERDE);
IOCLR1 = (S2_VERM);
IOCLR1 = (S2_AM);
IOCLR1 = (S2_VERDE);
lcd_puts("Falta de Energia");
IOSET1 = (S1_AM);
IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);
IOCLR1 = (S2_AM);
}
void main (void)
{
while (1)
{
IODIR0 = 0xFFFFFFFF;
IODIR1 = 0xFFBFFFFF;
lcd_puts("Rua 1 Fechada, Rua 2 OK");
IOSET1 = S1_VERM;
IOCLR1 = S2_VERM;
IOSET1 = S2_VERDE;
for (d=0; d<100000; d++);
IOCLR1 = (S2_VERDE);
if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}
IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S2_AM);
IOSET1 = (S2_VERM);
IOCLR1 = (S1_VERM);
IOSET1 = (S1_VERDE);
lcd_puts("Rua 1 OK, Rua 2 Fechada");
for (d=0; d<100000; d++);
if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}
IOCLR1 = (S1_VERDE);
IOSET1 = (S1_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);
}
}
Imagem demonstrativa do Proteus:
Diretrizes:
O meu programa ficou da seguinte forma:
#include <LPC213X.H>
#include "C:\Keil\ARM\lcd.h"
#define S1_VERM (1<<16)
#define S1_AM (1<<17)
#define S1_VERDE (1<<18)
#define S2_VERM (1<<19)
#define S2_AM (1<<20)
#define S2_VERDE (1<<21)
#define CEEE (1<<22)
int d;
int i;
lcd_init();
void ceee (void)
{
IOCLR1 = (S1_VERM);
IOCLR1 = (S1_AM);
IOCLR1 = (S1_VERDE);
IOCLR1 = (S2_VERM);
IOCLR1 = (S2_AM);
IOCLR1 = (S2_VERDE);
lcd_puts("Falta de Energia");
IOSET1 = (S1_AM);
IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);
IOCLR1 = (S2_AM);
}
void main (void)
{
while (1)
{
IODIR0 = 0xFFFFFFFF;
IODIR1 = 0xFFBFFFFF;
lcd_puts("Rua 1 Fechada, Rua 2 OK");
IOSET1 = S1_VERM;
IOCLR1 = S2_VERM;
IOSET1 = S2_VERDE;
for (d=0; d<100000; d++);
IOCLR1 = (S2_VERDE);
if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}
IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S2_AM);
IOSET1 = (S2_VERM);
IOCLR1 = (S1_VERM);
IOSET1 = (S1_VERDE);
lcd_puts("Rua 1 OK, Rua 2 Fechada");
for (d=0; d<100000; d++);
if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}
IOCLR1 = (S1_VERDE);
IOSET1 = (S1_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);
}
}
Imagem demonstrativa do Proteus:
terça-feira, 4 de dezembro de 2012
Desafio 2.0 - Maquina de Lavar
Diretrizes : A seguir esta anexados as diretrizes Proposta pelos professores, nosso programa da maquina de lavar deveria conter todas as características a seguir, exceto a chave liga/desliga que é opcional. E uma rotina de tempo.
...
...
Meu programa ficou o seguinte:
#include <lpc213x.h>
#include "C:\Keil\ARM\lcd.h" // Ajuda para escrever no display//
#define valvulaadmissao (1<<16)
#define bombaexpurgo (1<<17)
#define sensornivel (1<<20)
#define sensorporta (1<<16)
#define motor_direita (1<<18)
#define motor_esquerda (1<<19)
// aqui é a rotina de tempo//
int tempo (void)
{
int d;
for(d=0;d<1000;d++);
}
//inicio da função main//
int main (void)
{
IODIR0 = 0XFFFEFFFF;
IODIR1 = 0XFFEFFFFF;
init_lcd();
if(IOPIN0&(sensorporta))
{
IOCLR1 = valvulaadmissao;
lcd_clr(); // esse comando zera o display//
lcd_puts("Porta Aberta"); //essa função serva para escrever no display//
while(1);
}
if(IOPIN1&(sensornivel))
{
lcd_clr();
lcd_puts("Iniciando");
}
else
{
IOCLR1 = valvulaadmissao;
lcd_clr();
lcd_puts("Falta Agua");
while(1);
}
if(!(IOPIN0&(sensorporta)))
{
IOSET1 = valvulaadmissao;
lcd_clr();
lcd_puts("Admitindo Agua");
IOCLR1 = valvulaadmissao;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = bombaexpurgo;
lcd_clr();
lcd_puts("Enxaguando");
IOCLR1 = bombaexpurgo;
IOSET1 = valvulaadmissao;
lcd_clr();
lcd_puts("Admitindo agua");
IOCLR1 = valvulaadmissao;
IOSET1 = bombaexpurgo;
lcd_clr();
lcd_puts("Evacuando agua");
tempo();
IOCLR1 = bombaexpurgo;
IOSET1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Centrifugando");
tempo();
IOCLR1 = motor_direita;
IOCLR1 = motor_esquerda;
lcd_clr();
lcd_puts("Roupa Limpa");
while (1);
}
}
Demonstração no Proteus:
...
...
Meu programa ficou o seguinte:
#include <lpc213x.h>
#include "C:\Keil\ARM\lcd.h" // Ajuda para escrever no display//
#define valvulaadmissao (1<<16)
#define bombaexpurgo (1<<17)
#define sensornivel (1<<20)
#define sensorporta (1<<16)
#define motor_direita (1<<18)
#define motor_esquerda (1<<19)
// aqui é a rotina de tempo//
int tempo (void)
{
int d;
for(d=0;d<1000;d++);
}
//inicio da função main//
int main (void)
{
IODIR0 = 0XFFFEFFFF;
IODIR1 = 0XFFEFFFFF;
init_lcd();
if(IOPIN0&(sensorporta))
{
IOCLR1 = valvulaadmissao;
lcd_clr(); // esse comando zera o display//
lcd_puts("Porta Aberta"); //essa função serva para escrever no display//
while(1);
}
if(IOPIN1&(sensornivel))
{
lcd_clr();
lcd_puts("Iniciando");
}
else
{
IOCLR1 = valvulaadmissao;
lcd_clr();
lcd_puts("Falta Agua");
while(1);
}
if(!(IOPIN0&(sensorporta)))
{
IOSET1 = valvulaadmissao;
lcd_clr();
lcd_puts("Admitindo Agua");
IOCLR1 = valvulaadmissao;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = motor_direita;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Lavando");
tempo();
IOCLR1 = motor_esquerda;
IOSET1 = bombaexpurgo;
lcd_clr();
lcd_puts("Enxaguando");
IOCLR1 = bombaexpurgo;
IOSET1 = valvulaadmissao;
lcd_clr();
lcd_puts("Admitindo agua");
IOCLR1 = valvulaadmissao;
IOSET1 = bombaexpurgo;
lcd_clr();
lcd_puts("Evacuando agua");
tempo();
IOCLR1 = bombaexpurgo;
IOSET1 = motor_direita;
IOSET1 = motor_esquerda;
lcd_clr();
lcd_puts("Centrifugando");
tempo();
IOCLR1 = motor_direita;
IOCLR1 = motor_esquerda;
lcd_clr();
lcd_puts("Roupa Limpa");
while (1);
}
}
Demonstração no Proteus:
segunda-feira, 3 de dezembro de 2012
Desafio 1.2 Caixa D'agua com Display
Bom, o Desafio 1.2 consiste na continuação do primeira da caixa d'agua, nesse implementamos um display, no qual ira aparecendo as condições da caixa, se esta cheia, vazia, se esta enchendo, e assim por diante.
O Programa ficou da Seguinte maneira..
#define max (1<<16)
#define min (1<<17)
#define bomba (1<<18)
#define corsan (1<<21)
int main (void)
{
init_lcd();
IODIR0 = 0xFFFFFFFF;
IODIR1 = 0xFFDCFFFF;
if(!(IOPIN1 & (corsan)))
{
IOCLR1 = bomba;
lcd_clr();
lcd_gotoxy(1,5);
lcd_puts("Falta_agua");
}
else
{
if(IOPIN1 & (max))
{
IOCLR1 = bomba;
lcd_clr();
lcd_gotoxy(0,5);
lcd_puts("Caixa_Cheia");
}
else
{
if(!(IOPIN1 & (min)))
{
IOSET1 = bomba;
lcd_clr();
lcd_gotoxy(0,0);
lcd_puts("Caixa_Enchendo");
}
}
}
}
A foto a seguir mostra somente a ilustração da descrição da caixa enchendo, mas o ideia é que quando se tem a realiadade de cada situação nos comandos acima. apareça o que esta escrito entre parenteses depois de lcd_puts.
E assim se Segue o programa..
O Programa ficou da Seguinte maneira..
#define max (1<<16)
#define min (1<<17)
#define bomba (1<<18)
#define corsan (1<<21)
int main (void)
{
init_lcd();
IODIR0 = 0xFFFFFFFF;
IODIR1 = 0xFFDCFFFF;
if(!(IOPIN1 & (corsan)))
{
IOCLR1 = bomba;
lcd_clr();
lcd_gotoxy(1,5);
lcd_puts("Falta_agua");
}
else
{
if(IOPIN1 & (max))
{
IOCLR1 = bomba;
lcd_clr();
lcd_gotoxy(0,5);
lcd_puts("Caixa_Cheia");
}
else
{
if(!(IOPIN1 & (min)))
{
IOSET1 = bomba;
lcd_clr();
lcd_gotoxy(0,0);
lcd_puts("Caixa_Enchendo");
}
}
}
}
A foto a seguir mostra somente a ilustração da descrição da caixa enchendo, mas o ideia é que quando se tem a realiadade de cada situação nos comandos acima. apareça o que esta escrito entre parenteses depois de lcd_puts.
E assim se Segue o programa..
Resgistradores Para Seleção de Funções dos Pinos do Port0 - PINSEL
Os pinos do Microcontrolador que utilizamos há varias Funções..
O PINSEL, nos permite selecionarmos então quais dessas aplicações utilizaremos.
Tabela:
O PINSEL, nos permite selecionarmos então quais dessas aplicações utilizaremos.
Tabela:
|
PINSEL 0
|
PINO 0.0
|
PINO 0.1
|
PINO 0.2
|
....
|
PINO 0.15
|
|||||
|
|
0
|
1
|
2
|
3
|
4
|
5
|
|
30
|
31
|
|
|
0
|
0
|
0
|
0
|
0
|
0
|
|
0
|
0
|
||
|
|
0
|
1
|
0
|
1
|
0
|
1
|
|
0
|
1
|
|
|
|
1
|
0
|
1
|
0
|
1
|
0
|
|
1
|
0
|
|
|
|
1
|
1
|
1
|
1
|
1
|
1
|
|
1
|
1
|
|
|
|
P0.0
|
P0.1
|
P0.2
|
|
P0.15
|
|||||
|
PINSEL 1
|
PINO 0.16
|
PINO 0.17
|
PINO 0.18
|
....
|
PINO 0.31
|
|||||
|
|
0
|
1
|
2
|
3
|
4
|
5
|
|
30
|
31
|
|
|
0
|
0
|
0
|
0
|
0
|
0
|
|
0
|
0
|
||
|
|
0
|
1
|
0
|
1
|
0
|
1
|
|
0
|
1
|
|
|
|
1
|
0
|
1
|
0
|
1
|
0
|
|
1
|
0
|
|
|
|
1
|
1
|
1
|
1
|
1
|
1
|
|
1
|
1
|
|
|
|
P0.16
|
P0.17
|
P0.18
|
|
P0.31
|
|||||
quinta-feira, 27 de setembro de 2012
Elaboração do Desafio 1.1
O desafio 1.1, é nada mais que a incrementação do 1.0.
Então, como foi descrito todo o processo de desenvolvimento do desafio 1.0 na postagem anterior, essa postagens sera descrito apenas o que foi adicionado a mais.
O pinos P0.2 P0.3 são os que controlam a bomba, um é o nível máximo e o outro o minimo, então incluímos um pino a mais o P0.14, que vai ser o pino que controlara se há presença de água ou não para encher a caixa d'água como se fosse a concessionária que distribui água encanada, ou seja, se este pino estiver em nível logico 1, quer dizer que há água.. assim se o nível de água na caixa for baixo a bomba se ligara, se o nível logico for 0, representando assim a falta d'água, a bomba não liga, evitando o desperdício de energia, e também a possibilidade de danificação da bomba.
Dei ao pino P0.14 o nome de Corsan.
Comandos:
#include (lpc213x.h>
#define max (1<<2)
#define min (1<<3)
#define bomba (1<<7)
#define corsan (1<<14)
int main (void)
iodir0 = 0xFFFFbFF3;
if(!(iopin0 & (corsan)))
{
IOCLR0 = bomba;
}
else
{
if(IOPIN0 & (max))
{
IOCLR0 = bomba;
}
else
{
if(!(IOPIN0 & (min)))
{
IOSET0 = bomba;
}
}
}
}
Ilustração do funcionamento.
Como podemos ver, o pino 14 esta acionado, representando assim a presença de água, mas a bomba não esta ligada porque o nivel máximo já foi atingido.
-Nesse, os controladores de nível max e min não estão ativos, ou seja, caixa fazia, a bomba esta ligada pois como podemos ver o pino 14 que representando a presença d'água, esta ativo.
- Nesse ultimo então, mesmo que os pinos max e min estejam representando que não há água na caixa, a bomba não ligará, pois o pino 14 acusa a falta d'água.
Então, como foi descrito todo o processo de desenvolvimento do desafio 1.0 na postagem anterior, essa postagens sera descrito apenas o que foi adicionado a mais.
O pinos P0.2 P0.3 são os que controlam a bomba, um é o nível máximo e o outro o minimo, então incluímos um pino a mais o P0.14, que vai ser o pino que controlara se há presença de água ou não para encher a caixa d'água como se fosse a concessionária que distribui água encanada, ou seja, se este pino estiver em nível logico 1, quer dizer que há água.. assim se o nível de água na caixa for baixo a bomba se ligara, se o nível logico for 0, representando assim a falta d'água, a bomba não liga, evitando o desperdício de energia, e também a possibilidade de danificação da bomba.
Dei ao pino P0.14 o nome de Corsan.
Comandos:
#include (lpc213x.h>
#define max (1<<2)
#define min (1<<3)
#define bomba (1<<7)
#define corsan (1<<14)
int main (void)
iodir0 = 0xFFFFbFF3;
if(!(iopin0 & (corsan)))
{
IOCLR0 = bomba;
}
else
{
if(IOPIN0 & (max))
{
IOCLR0 = bomba;
}
else
{
if(!(IOPIN0 & (min)))
{
IOSET0 = bomba;
}
}
}
}
Ilustração do funcionamento.
Como podemos ver, o pino 14 esta acionado, representando assim a presença de água, mas a bomba não esta ligada porque o nivel máximo já foi atingido.
-Nesse, os controladores de nível max e min não estão ativos, ou seja, caixa fazia, a bomba esta ligada pois como podemos ver o pino 14 que representando a presença d'água, esta ativo.
- Nesse ultimo então, mesmo que os pinos max e min estejam representando que não há água na caixa, a bomba não ligará, pois o pino 14 acusa a falta d'água.
Assinar:
Comentários (Atom)











