Chaveador de vídeo automático

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Chaveador de vídeo automático

Mensagempor starker » 08 Jul 2010 22:47

Pessoal....

Tenho uma dúvida na programação em basic para o chaveador que pretendo montar:

O chaveador vai ter 4 entradas e uma saída!
Ele serve para ligar os vários aparelhos que temos em casa, de forma automática, sem precisarmos ir até a estante onde está a TV e mudar a chave seletora (que é o que acontece hoje com esses chaveadores de audio e vídeo existentes no mercado).
Talvez eu desista de montar se alguém aqui disser que já existe para comprar! :)
Mas mesmo assim, ficarei curioso em saber como fazer acontecer o chaveamento de forma automática e segura!

Vamos supor que eu tenho os seguintes aparelhos:
1 - DVD
1 - k-7
1 - Video-game
1 - Parabólica

Vamos supor que eu vou colocar no chaveador na seguinte ordem:
entrada 1 = DVD = PORTB = 1
entrada 2 = k-7 = PORTB = 2
entrada 3 = Video-game = PORTB = 4
entrada 4 = Parabólica = PORTB = 8

Se eu ligar o DVD primeiro (por exemplo), a porta responsável por detectar isso será ativada e ela vai dizer ao micro ligar o 4066 responsável pelo chaveamento DVD -> saída !

Até aqui é fácil de fazer, e da mesma forma se eu desligar o DVD o micro também vai desligar o 4066 sem problemas!

O micro que estou usando é o ATtiny2313 e 3 CD4066.

O problema para o software que eu não consigo fazer, (tentei algumas formas mas sem sucesso), é se o DVD permanecer ligado e eu ligar também qualquer outro aparelho, como por exemplo, a parabólica!

Eu quero que se o DVD está ligado e eu estou assistindo um filme e quero dar uma espiadinha no que está passando na parabólica, que o chaveador ligue a parabólica até que eu a desligue ou eu desligue o DVD.

A intenção é que sempre o último aparelho ligado tenha a vez na saída!

Eu acho que isso não é um bicho de 7 cabeças para fazer e quero que seja assim pela praticidade que vai ser. Não há necessidade de se desligar um aparelho quando se quer espiar outro. hehehe

E no máximo serão 4 aparelhos ligados ao mesmo tempo e são apenas 4 pinos de controle de entrada para serem analisadas!

só DVD ligado = PORTB = 1
só k-7 ligado = PORTB = 2

mas DVD e k-7 ligados juntos o PORTB será = 3 !

Quando for igual a 3, vemos que teremos duas entradas ativas e eu tenho que saber qual delas estava ligada antes. Só consigo fazer isso usando "IF" ou "SELECT CASE" e é muito desgastante fazer assim visto que serão muitas as possibilidades!

Eu criei uma variável chamada "Entrada" e outra chamada "Ultima_entrada", assim, quando elas forem diferentes entre si, o programa executa os "IFs" e no final dessa fileira enorme de "IFs" eu escrevo: "Ultima_entrada = Entrada", assim, o programa não executa mais os "IFs" até que a variável "Entrada" seja modificada novamente!

Não sei se me lembrei de escrever todos os detalhes e se não os deixei confusos, mas posso tentar esclarecer melhor se for necessário.

Tenho um amigo que programa em basic e em C que disse que seria bem simples o programa usando "fila" para empilhar as saídas, mas não me disse como filtrar as entradas!

Alguém teria uma idéia de como fazer?

No aguardo,

Edson
starker
Bit
 
Mensagens: 40
Registrado em: 02 Dez 2006 12:14

Mensagempor RobL » 09 Jul 2010 22:27

Uma entrada subiu.
Gera uma interrupção.
Baixa todas as entradas no 4066.
Verifica qual foi a porta e aciona o pino do 4066 correspondente

Outra porta subiu
Gera uma interrupção
Verifica qual foi a porta
Baixa todas as entradas no 4066.
Verifica qual foi a porta e aciona o pino do 4066 correspondente

Todas as n entradas podem estar alta, mas somente a última vai acionar o pino correspondente do 4066.

Pode memorizar a seqüência das entradas para restaurar os estados anteriores.

Sempre a última que entrou gera a int.

Não entendí por que usar potência de 2 nas saidas, já que o 4066 necessita de 4 sinais. um para cada chave. Salvo se não entendí a finalidade.

As portas que descem (aparelhos desligados) não geram interrupção.
Nos atuais ATmega 48,88, 168 todos tem essa possibilidade de setar as ints em todas as portas na subida ou na descida ou na mudança.
Mas se não tiver nesse chip dá para contornar, perguntando qual porta mudou? Ou fazendo todos gerar um int externa e perguntar quem foi.

Sem interrupção:

Le porta e compara com a leitura anterior.

Variável PortaAnterior e PortaAutal.
Faz um XOR entre as duas e veja quem mudou.
(O bit que mudou estará alto).
PortaAnterior = PortaAtual

Nova leitura...

Liçao de casa:
Resolva o problema ao desligar uma das entradas.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor starker » 10 Jul 2010 00:28

Obrigado por responder RobL !!

Queria mesmo é fazer com o XOR, mas não me lembrava como fazer! hehehe

Mas essa parte eu resolvi de outra forma, mas a tua dica está anotada!

posso carregar o estado do PORTB em uma variável e usar a função ON no bascom.

Ele verifica se ouve uma mudança na variável e salta para a rotina definida!
Essa parte eu descobri hoje que está funcionando, inclusive mais de uma opção de programação, o problema está em retirar "1" (um) da pilha ou fila!!!

Eu faço com peso 2 pelo seguinte:

preciso para cada entrada, 3 chaves analógicas para:
1 - vídeo
2 - audio L
3 - audio R

Cada 4066 tem 4 chaves logo, como são 4 entradas eu preciso de 3 CD4066 porque: 3 x 4 = 12 chaves

No portb.0 eu tenho ligado 3 gates das 3 chaves do primeiro 4066, no portb.1 eu tenho o gate da última chave do primeiro 4066 e mais os 2 primeiros do segundo 4066 e assim por diante!

Vou tentar o que postou e fazer a lição de casa :)

Obrigado.
starker
Bit
 
Mensagens: 40
Registrado em: 02 Dez 2006 12:14

Mensagempor Djalma Toledo Rodrigues » 12 Jul 2010 21:11

A cada novo aparelho ligado :

Desliga tudo ( por segurança ) e

liga este último .

É assim que uma pessoa faria .

Só que essa pessoa teria que lembrar o que estava ligado anteriormente
para restabelecer caso este último aparelho seja desligado, sucessivamente.

E assim temos a lógica do problema

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x