Você está na página 1de 6

OBJETIVOS

Utilizando o Software Atmel Studio 7.0 e o microcontrolador Atmega8:

Programar o Atmega8 para executar o controle de operao de uma


prensa, movida por um cilindro pneumtico, e com comando atravs de
dois botes.

Realizar a montagem do circuito em uma Protoboar, simular a operao


da prensa para confirmar o bom funcionamento do programa.

Por questo de segurana a prensa s deve ser acionada quando


pressionados os dois botes simultaneamente, e casa o operador solte
algum dos botes a prensa desligada.

DESCRITIVO
Inicialmente partimos do princpio de funcionamento da prensa
pneumtica, que possui os seguintes requisitos de funcionamento com
segurana:
1- Pressionado somente um boto, a prensa no dever funcionar.
2- Se ambos os botes forem pressionados dentro de um intervalo de 5
segundos, a prensa dever ser acionada.
3- Se um boto pressionado, mas o outro tardar mais do que 5 segundos
para ser pressionado, uma indicao de alarme dever ser acesa, e a
prensa no poder ser acionada.
4- Caso o item 3 ocorra, ser necessrio soltar os dois botes para apagar
a indicao de alarme, e reiniciar o processo.
5- Uma vez que a prensa esteja funcionando, e um dos botes seja
liberado, a prensa dever ser desativada.
6- Caso o item 5 ocorra, e o outro boto seja pressionado novamente
dentro de um intervalo de 5 segundos, a prensa voltar a funcionar.
7- Caso contrrio a indicao de emergncia dever ser acesa, sendo
necessrio soltar os dois botes para reiniciar o processo.

Para a realizao do projeto, utilizamos uma protoboard, um micro


controlador Atmega8, resistores, um capacitor, dois LEDs (para indicao de
prensa ligada/desligada), e dois botes para acionamento da prensa.
Utilizamos como sada s portas PC0 para acionar a prensa, e PC1 para
acionar o alarme, e como entrada utilizamos as PB0 e PB1 para os respectivos
botes 1 e 2.
Como o funcionamento do programa necessitava de uma contagem de
tempo para verificar o intervalo em que os botes eram pressionados, houve a
necessidade de utilizarmos os TIMERS e as Interrupes do microcontrolador
AVR. Sendo assim, par desenvolvermos a programao utilizamos os
mtodos apresentado em sala de aula.
O funcionamento do programa esta detalhadamente descrito nos
comentrios das linhas de programao, e sero apresentados posteriormente
na Figura1.
A configurao do TIMER0 realizada atravs das seguintes instrues:

TCCR0 = 0b00000101; Habilita o timer 0 com prescaller 1024.


TIMSK |= (1 << TOIE0); Habilita interrupo do timer 0.
TCNT0=12; Inicia a contagem do contador em 12.
sei(); Habilita as interrupes.

Para a ajustar a contagem do tempo em 5 segundos com uma frequncia


de 1Mhz, e levando em considerao que o contador estoura a sua contagem
em 256, foi necessrio iniciar com o valor de 12 e repetir a contagem 20 vezes.
Esse valor inicial de contagem foi encontrado da seguinte maneira e de numero
de repeties foi obtido da seguinte maneira:

 =


     
  

 = 4882 $%&'(

Como o contador conta somente at 256, ento:

)=

**
+

) 20 .'/'0'(

 =

  


Como o numero de repeties s um valor aproximado, para resultar em uma


contagem mais precisa, iniciamos a contagem com um valor maior que zero,
sendo assim:
0 = .'/'0'( 3 '(4. $%5. $
0 = 20 3 256 4882
0=

9*
   : 

0 = 12  00$0%. $%&'< '< 12

CDIGO
/*
* PRENSA_FINAL.cpp
*
* Created: 21/04/2016 09:21:40
* Author: Mauricio Bonadiman, Gabriel Centenaro , Mateus Tognon
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
int x=0;
int cont=0;
ISR(TIMER0_OVF_vect )
{
cont++;
TCNT0=12;
}
int main()
{
DDRC=0b00000011;
TCCR0=0b00000101;
PORTB=0b11111111;
sei();
TIMSK|=(1<<TOIE0);
TCNT0=12;
int x=0;

// Interrupo por estouro de contagem do TIMER0


// Incrementa 1 na contagem
// reinicia a contagem em 19

// define PC0 e PC1 como sada


// Habilita o timer 0 com prescaler 1024
// Habilita Pull-Up

while(1)
{
if((PINB==0b11111110) | (PINB==0b11111101) )
{TCCR0|=(1<<CS02) | (1<<CS00);
PORTC&=~0b00000001;
if(cont >20) PORTC|=0b00000010;

// Se qualquer um dos botes forem pressionados...


// Habilita a interrupo do timer 0
// desliga prensa
// Se a contagem for maior que 20(5 segundos) LIGA
Alarme

}
if((PINB==0b11111100) )
{ if(cont > 20)
{ PORTC|=0b00000010;
TCCR0=0;cont=0;
x=1; }

// Se os dois forem pressionados...


// Se a contagem for maior que 20(5 segundos):
// LIGA Alarme
// ZERA o contador
// "x=1" garante que a prensa no volte a funcionar
depois de acionado o alarme

if( (cont < 20) && (x==0) )

// Se a contagem for menor que 20(5 segundos) e "x


diferente de Zero":
// Aciona prensa
// Desliga Alarme

{ PORTC|=0b00000001;
PORTC&=~0b00000010;TCCR0=0;cont=0; }
}
if(PINB==0b11111111)
{PORTC&=~0b00000011;
TCCR0=0;
cont=0;
TCNT0=12;
x=0; }
}
}

//
//
//
//
//

Se nunhum dos botes estiverem pressionados...


Desliga Alarme e prensa
Desabilita a interrupo do timer 0
Zera contador
reinicia a contagem em 12

SIMULAO PROTEUS

Figura 1- Simulao prensa ligada

Figura 2- Simulao alarme ligado

PROJETO NA PROTOBOARD.

- imagens

Você também pode gostar