Desenvolver estudos sobre microcontroladores, elaborar e realizar testes utilizando programas como o keil.
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.
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;
}
}
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.
download do desafio: http://www.4shared.com/office/smNmEAtl/desafio_2_unico.html?
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.
Assinar:
Postagens (Atom)






