Ir ao conteúdo

Ligar e desligar sequência Atmega8


inacio1981

Posts recomendados

Postado

Ora boa tarde.

Eu quero fazer o nome da minha filha em leds smd 1210 (LARA).

neste projecto quero usar um atmega8 ou atiny2313 (tenho os 2), cada letra será comandada por um pin do microprocessador

(L - PB0 | A - PB1 |R - PB2 | A - PB3).

Será alimentado por 9 V e depois vai ter uma sequência a correr as varias letras.

Até aqui tudo bem, mas eu quero complicar mais um bocado, quero colocar um switch no PD2 (INT0) para ligar e desligar a sequência. Clicando uma vez, liga a sequência e ela fica a correr até clicar novamente no switch.

esse é o meu problema, ainda não sei trabalhar com as interrupts e flags e contadores, sei fazer o básico, ligar e desligar portas, definir como entradas e saídas, incluir as bibliotecas definir a velocidade do clock.

Cumprimentos,

Pedro Inácio

Postado

/*
* botão_21102012.c
*
* Created: 21-10-2012 17:10:42
* Author: inácio1981
*/

//define a velocidade do CPU
#define F_CPU 1000000UL

// inclui as bibliotecas
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

//defenir nomes das entradas e saidas
#define botao1 PD2
#define dataD DDRD
#define dataB DDRB
#define leds PORTB


int main(void)
{
DDRB = 0b11111111;
PORTB = 0b00000000;
DDRD &= ~(1 << DDD2); // Clear the PD2 pin
// PD2 (INT0 pin) is now an input

PORTD |= (0 << PORTD2); // turn On the Pull-up
// PD0 is now an input with pull-up enabled


MCUCR |= (1 << ISC00); // set INT0 to trigger on ANY logic change
GICR |= (1 << INT0); // Turns on INT0

sei(); // turn on interrupts

while(1)
{
leds = 0b11111111; /*main program loop here */
_delay_ms(250);
}
}



ISR (INT0_vect)
{
leds = 0b10101010;/* interrupt code here */
_delay_ms(250);
leds = 0b10101010;
_delay_ms(250);
leds = 0b10000000;
_delay_ms(250);
leds = 0b01000000;
_delay_ms(250);
leds = 0b00100000;
_delay_ms(250);
leds = 0b00010000;
_delay_ms(250);
leds = 0b00001000;
_delay_ms(250);
leds = 0b00000100;
_delay_ms(250);
leds = 0b00000010;
_delay_ms(250);
leds = 0b00000001;
_delay_ms(250);
leds = 0b11111111;
_delay_ms(250);
leds = 0b00000000;
_delay_ms(250);
leds = 0b11111111;
_delay_ms(250);
leds = 0b11001100;
_delay_ms(250);
leds = 0b00110011;
_delay_ms(250);
}

Este é um dos códigos que eu testei mas não está a correr bem.

eu queria que sempre que eu carregar no botão, a sequência ou liga ou desliga, consoante o estado.

/*
* botão_21102012.c
*
* Created: 21-10-2012 17:10:42
* Author: Thomson
*/

//define a velocidade do CPU
#define F_CPU 1000000UL

// inclui as bibliotecas
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

//defenir nomes das entradas e saidas
#define botao1 PD2
#define dataD DDRD
#define dataB DDRB
#define leds PORTB



int main(void)
{
DDRB = 0b11111111;
leds = 0b00000000;
DDRD = (0<<PD2);
int x=0;
sei();
while(1)
{
if (bit_is_set(PIND, PD2))
{
do
{x++;
leds = 0b10101010;
_delay_ms(250);
leds = 0b01010101;
_delay_ms(250);
leds = 0b10000000;
_delay_ms(250);
leds = 0b01000000;
_delay_ms(250);
leds = 0b00100000;
_delay_ms(250);
leds = 0b00010000;
_delay_ms(250);
leds = 0b00001000;
_delay_ms(250);
leds = 0b00000100;
_delay_ms(250);
leds = 0b00000010;
_delay_ms(250);
leds = 0b00000001;
_delay_ms(250);
} while (x<10);

}
else
{leds = 0b00010001;
(250);
x=0;
}

}
}

Para mim este é o que me funciona melhor, mas não está a trabalhar como eu quero.

neste programa eu coloquei um estado normal, depois se clicar no switch, vai iniciar uma sequência, depois de essa sequência acabar volta ai inicio a espera de novo clic no switch.

mas não faz o que eu quero!!!!!!!!!!!!!!!!!!!!

ligar e desligar a sequência quando eu quiser.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!