LusoRobótica - Robótica em Português

Software => C/C++ => Tópico iniciado por: paulogudes em 04 de Janeiro de 2012, 20:12

Título: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 20:12
Preciso acender uma sequencia de 7 leds com delay de 500ms que estão na porta b ao precionar uma chave e assim que VOLTAR a precioná-la, apagá-los na sequência inversa á que foram acesos.O pic que estou usando é o 16f873 Alguém pode me ajudar? Desde já agradeço
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: msr em 04 de Janeiro de 2012, 21:17
Quais são as duvidas em concreto que tens? O que é que já experimentaste fazer? Tens alguma experiência na programação de microcontroladores?
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: senso em 04 de Janeiro de 2012, 21:56
Um botão chega perfeitamente para isso, e o código é tambem muito simples, já tentas-te começar a escrever alguma coisa?
É que isto aqui não é os discos pedidos, e ninguem te vai dar um programa completo só porque sim, mostra o que já fizeste, e nós ajudamos-te a completar o teu programa.
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 21:59
Entendi. Bom segue o que consegui fazer

 
Código: [Seleccione]
#INCLUDE 16F887.H
#USE DELAY(CLOCK=8000000)
#FUSES HS, NOWDT, PUT, BROWNOUT, NOLVP

#USE FAST_IO(B)
#USE FAST_IO(D)



  VOID MAIN()
   {
         SET_TRIS_B(0B00000001);
         SET_TRIS_D(0B00000000);
   
          OUTPUT_D(0B00000000);
         
            WHILE(TRUE)
           
            {
                 
                  IF(!INPUT(PIN_B0))                 
                     {
                        OUTPUT_TOGGLE(PIN_D0);
                        DELAY_MS(500);
                        OUTPUT_TOGGLE(PIN_D1);
                        DELAY_MS(500);
                        OUTPUT_TOGGLE(PIN_D2);
                        DELAY_MS(500);
                        OUTPUT_TOGGLE(PIN_D3);
                        DELAY_MS(500);
                       
                       
                       
                       
                     }   
                 
                 
                 
           
            }
   }
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: maurosmartins em 04 de Janeiro de 2012, 22:15
Olá paulogudes,

antes de mais, k compilador é esse?

eis a minha ideia:

porque nao crias uma tabela onde tens a sequência dos leds a acender.
depois fazes por exemplo

Código: (C) [Seleccione]
PORTD=tabela[ i ];
quanto ao subir e descer era só incrementar ou decrementar o i (com as devidas proteções de máximos e minimos).

podes usar um timer, porque se não, só podes verificar o estado do botão de 500 em 500 milisegundos.

por outro lado como o botão esta ligado ao RB0 podes usar a interrupção externa.

Cumps, Mauro.
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 22:23
Estou usando o copilador ccs e quanto a esta tabela, me parece interessante. Como posso criá-la e usar já que a desconhecia até esta momento? Fico até constrangido pq apesar estar me interessando muito esta linguagem, ainda tenho muito a aprender.
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: maurosmartins em 04 de Janeiro de 2012, 22:38
a tabela é simples é algo do género

unsigned char tabela[4]; em que 4 é o numero de elementos

depois podes inicializar com por exemplo
Código: [Seleccione]
tabela[0] = 0b00000001;
tabela[1] = 0b00000010;
tabela[2] = 0b00000100;
tabela[3] = 0b00001000;
pelo que percebi é só um led  (nao mantem acesos os anteriores) outra opção é fazeres shifts:

por exemplo

Código: [Seleccione]
PORTD=0b00000001;

while(1){


PORTD=PORTD<<1;

}


isto não é para ser um programa funcional nem coisa que se pareça, mas pode-te dar ideias, existe shift para a esquerda e para a direita.

Cumps, Mauro.


Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 22:44
Nossa! Muito bom mesmo. E no caso da chave, como posso usá-la tanto pra acender quanto pra apagar neste caso?
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: maurosmartins em 04 de Janeiro de 2012, 22:46
nao percebi Paulo, podes reformular sff?
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 22:50
Sim, como posso usar o botão ligado a PORTB0 tanto pra acender quanto pra apagar os leds?Pode me dar um exemplo?
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: senso em 04 de Janeiro de 2012, 22:55
A primeira coisa que deves fazer antes de começar a programar é pegar numa folha de papel ou abrir o notepad ou o que gostares mais e pensares como é que o teu programa tem de funcionar, neste caso será algo assim:

inicio de loop infinito
ler botão e usar uma variavel para guardar o ultimo estado dos leds, se era acender ou apagar
se (acender)
acende
se não apaga
voltar ao inicio do loop infinito
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 04 de Janeiro de 2012, 23:17
Obrigado pela ajuda e em especial pela paciência. Me ajudou muito
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 05 de Janeiro de 2012, 19:21
Consegui resolver e esta funcionando 100%. Obrigado pela ajuda e agradeço os esclarecimentos. me ajudaram muito
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: maurosmartins em 05 de Janeiro de 2012, 20:04
Ainda bem Paulo, já agora, qual a solução implementada?

Cumps, Mauro.
Título: Re: MICROCONTROLADOR LINGUAGEM C
Enviado por: paulogudes em 06 de Janeiro de 2012, 11:03
Na verdade era bem mais simples que imaginei. Apenas criei uma variável y e dei o valor "0" a ela. As condições eram, "se B0 for "0" e y for "0" os leds deverão se acesos sequencialmente a partir de D0 e fazer y=1 e  se B0 for "0" e y for "1" os leds deverão se apagar sequencialmente a partir de D0 e fazer y=0." Sei que pra vcs que tem muita esperiência com isso é moleza, mas confeso que foi meio complicado pra mim com 2 semanas de curso. Valeu pela ajuda