Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
YODA.

RESOLVIDO Duvida! como controlar um led RGB com PWM?

Recommended Posts

Pessoal tinha achado no google um video que ensinava isso mais perdi e procurei ,procurei ...

mais tem hora que de tanto você fica no computador e não achar irrita ,

sei que o PWM funciona com o timer2 já é para mim um pequeno passo ,

se não fo incomodar , Alguem posta um exemplo desses pra mim por favor !!so pra alterar a luminozidade do led RGB

ou com três leds mesmo esta otimo!!

na verdade eu preferia com três leds coloridos OK!  e Obrigado!!

Editado por Bcpetronzio
Título irregular

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um pequeno problema... o PIC em geral possui 1 canal de saida PWM, 3 no máximo, porém se bem me lembro não da pra utilizar os três módulos CCP ao mesmo tempo no mesmo modo (ou seja os três em PWM).
 

Eu tenho uma nota de aplicação bem antiga da Microchip, que ensina a fazer PWM por software em PICs pequenos exclusivamente para Leds RGB, mas ja vou adiantando, terá que ler o documento de ponta a ponta, segue o link do PDF:
https://drive.google.com/file/d/0ByfGO_ITCy2tVk1oODc0NHZvNTg/edit?usp=sharing

Em caso de duvidas poste de volta.

Abs.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja tem um tempo que postei como fazer um PWM por software de 8 canais ou mais,que vão depender da velocidade do Micro,no caso foi usado um 16F628.

O exemplo foi feito para CCS,mas as rotinas e variáveis podem ser usadas em qualquer compilador.

Faça apenas os ajustes para o seu circuito.

http://www.4shared.com/rar/4tlfqjNN/8pwm_ccs.html

 

Vai junto com projeto do Proteus.

Como citou que vai usar led separados,escolha um canal para cada led e bole uma rotina de controle.

Editado por vtrx

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • ///////////////////////////////////////////////////////////////////////////////// Definições de fusiveis da pic#include "16F628A.h"#FUSES NOWDT		   //No Watch Dog Timer#FUSES INTRC_IO	    //Internal RC Osc, no CLKOUT#FUSES PUT			 //Power Up Timer#FUSES NOPROTECT	   //Code not protected from reading#FUSES BROWNOUT	    //Reset when brownout detected#FUSES NOMCLR		  //Master Clear pin used for I/O#FUSES NOLVP		   //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NOCPD		  //No EE protection  ////#use delay(clock=4000)#use fast_io(b)/////////////////////////////////////////////////////////////////////////////#define trisb  0b00000000#define PW_Ini 210///////////////////////////////////////////////////////////////////////////// unsigned char		 	  PWM0,PWM1,PWM2,PWM3,	  PWM4,PWM5,PWM6,PWM7,	  PWM0_CNTR,PWM1_CNTR,PWM2_CNTR,PWM3_CNTR,	  PWM4_CNTR,PWM5_CNTR,PWM6_CNTR,PWM7_CNTR,	  AUXILIAR,ESTADO_PWM,	  LARGURA_PULSO;////////////////////////////////////////////////////	  //////////void Multi_PWM(void) {   LARGURA_PULSO--;if (LARGURA_PULSO == 0) {   PWM0_CNTR = PWM0;      PWM1_CNTR = PWM1;   PWM2_CNTR = PWM2;      PWM3_CNTR = PWM3;   PWM4_CNTR = PWM4;      PWM5_CNTR = PWM5;   PWM6_CNTR = PWM6;      PWM7_CNTR = PWM7;   LARGURA_PULSO = PW_Ini;   ESTADO_PWM = 255;   output_b(ESTADO_PWM); }else   {   AUXILIAR = 0;   PWM0_CNTR--;if (PWM0_CNTR == 0){PWM1_CNTR--;} else    {    AUXILIAR |= 0b00000001 ;    PWM1_CNTR--;    }if (PWM1_CNTR == 0){PWM2_CNTR--;} else   {    AUXILIAR |= 0b00000010 ;    PWM2_CNTR--;    }   if (PWM2_CNTR == 0)   {PWM3_CNTR--;} else   {    AUXILIAR |= 0b00000100 ;    PWM3_CNTR--;    }if (PWM3_CNTR == 0)   {PWM4_CNTR--;} else   {    AUXILIAR |=  0b00001000 ;    PWM4_CNTR--;   }if (PWM4_CNTR == 0)   {PWM5_CNTR--;} else   {    AUXILIAR |= 0b00010000 ;    PWM5_CNTR--;   }if (PWM5_CNTR == 0){PWM6_CNTR--;} else   {    AUXILIAR |= 0b00100000 ;    PWM6_CNTR--;   }if (PWM6_CNTR == 0){PWM7_CNTR--;} else   {    AUXILIAR |= 0b01000000 ;    PWM7_CNTR--;   }if (PWM7_CNTR == 0)   {    AUXILIAR &=ESTADO_PWM;    output_b(AUXILIAR);    ESTADO_PWM = AUXILIAR;   } else   {    AUXILIAR |= 0b10000000 ;   AUXILIAR &= ESTADO_PWM;   output_b(AUXILIAR);   ESTADO_PWM = AUXILIAR;   }    return; } }///////////////// VALORES POR CANAL ATÉ 255 [VALOR MÍNIMO É 1]//////////////////////////////////////////void main()	  {	  setup_comparator(NC_NC_NC_NC);	  set_tris_b( trisb );	  PWM0=1;	  PWM1=10;	  PWM2=40;	  PWM3=80;	  PWM4=160;	  PWM5=60;	  PWM6=80;

    Teria algo menor para o 16F84A apenas usando três leds

    tipo assim oh! codigo pequeno!

    tira o restante dos componentes dip switch , e fica apenas o pic e os três leds ,não precisa ser RGB não , apenas leds comuns mesmo!!

    34jd5wy.gif

    apenas utilizando o tmer2 duty ciclo simples mesmo, e acender os três leds ,sou principiante ,

    não precisa ser complexo não pessoal agradecido !

    Estou utilizando CCS C compiler!

    Editado por Bcpetronzio

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    O código não é grande não pois você só vai utilizar o trecho abaixo:

    ///////////////// VALORES POR CANAL ATÉ 255 [VALOR MÍNIMO É 1]//////////////////////////////////////////void main()      {      setup_comparator(NC_NC_NC_NC);      set_tris_b( trisb );      PWM0=1;      PWM1=10;      PWM2=40;      PWM3=80;      PWM4=160;      PWM5=60;      PWM6=80;      PWM7=100;///////////////////////////////////           while(true)      {         Multi_PWM();        //AQUI VOCE IMPLEMENTA LER AS CHAVES E ALTERAR APENAS 3 SAIDAS      }   }

    Explique melhor o que você quer fazer.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • mudar o brilho tipo aumenta diminui, la na imagem que postei só isso só dos três leds , isso ja ajuda a entender o PWM em programação 

     

    OK!!

     

    espera ai admitindo que não sei quase nada Rsrs ! para cada pino é um CCP Certo , e quanto no maximo eu posso usar ??????!!!!!!!!!!!

    Editado por TRACKS

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @,

     

    Não, o CCP só é usado para gerar a frequência básica do PWM. O que será controlado será a relação ALTO/BAIXO de cada um dos pinos que vai ao Led. Não é necessária usar o pino de saída do CCP, pode ser feito com qualquer pino de I/O.

     

    Só para ilustrar : suponha que o CCP foi configurado para gerar 320 interrupções por segundo.

     

    Se mantivermos a saída do Led em nivel alto durante todas as 320 interrupções, o brilho do Led será o máximo.

     

    Mas, se mantivermos em nivel alto apenas nas primeiras 160 interrupções, e nas próximas 160 deixarmos em nivel baixo, o brilho será a metade, pois o nivel é alto em apenas 50% do tempo total.

     

    Já se mantivermos em nível alto durante as primeiras 32 interrupções, o brilho será bem baixo, equivalente a 10% do máximo ( 32 equivale a 10% de 320, entendeu ? )

     

    O que fazemos é criar um contador diferente para cada pino de Led que queremos controlar, e uma variável onde definimos para qual valor do contador mudamos o nivel do pino do Led .

     

    Usando o exemplo que dei, quando ocorrer a ultima das 320 interrupções, zeramos todos os contadores, e começamos de novo !

     

    É simples, pode analisar os códigos que a maneira de se gerar PWM por software sempre segue esta mesma ideia geral.

     

    Na prática, o numero de interrupções é maior, e tentamos fazer o ciclo inteiro pelo menos 30 vezes por segundo, para que voce não perceba o "tremular" do brilho.

     

    Uma ideia de frequência é esta : imagine que voce queira controlar 32 níveis de brilho, para fazer todo o ciclo acontecer 30 vezes por segundo temos de configurar o CCP para gerar 32 x 30 = 960 interrupções por segundo.

     

    Paulo

    Editado por aphawk
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Obrigado aphawk ! :)

    Ai pessoal se tiver mais alguem , para contribuir ...

    mais para começar tudo isso preciso , esquecer o proteus 8 e começar procurando , algum site que tenha o proteus antigo mais porém completo dizem que

    tem a licença para testar qualquer micro controlador desde o 18F84 ao 18Fxxx .... vocês me entenderam!!

    aphawk , o modulo ccp de comparação e captura PWM é escencial por que é ele que determina o brilhos dos leds certo?

    posso usar o timer 1 também então ,yoda clonclui Rsrs!

    ele gera uma especie de tensão media ? entendi meditar sobre isso eu irei :eek: kkkkkkk

    Então quer dizer que se o tempo for o mesmo na onda quadrada tanto de pico e vale ou nivel logico 1 e nivel logico 0

    teremos uma tensão media , mais isto confunde um pouco o que você disse sobre o ccp ou é parecido ,confuso estou meditar sobre isso irei :):confused: kkkkkkkkkk !!

    Editado por Bcpetronzio

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @YODA.,

    É muito mais simples !

    Quando fazemos o PWM por software, precisamos apenas de algo que faça um bom número de interrupçōes em um segundo, e que essas interrupções ocorram sempre com o mesmo intervalo de tempo. Portanto, podemos usar um Timer, qualquer um deles para isso !

    Não é ele que determina o brilho dos leds, o brilho é determinado pelo numero de vezes que o pino ligado ao Led forneçe corrente para ele !

    Não pense em tensão média, pense em CORRENTE média, porque é exatamente isso !

    Vou te dar um exemplo : imagine que o seu Led consuma 40 mA . Imagine que vamos fazer uma experiência com um tempo determinado de 1 segundo.

    então, se voce deixar passar a corrente durante todo o 1 segundo, teremos uma corrente média de 40 mA, ok ?

    Agora, imagine que durante metade desse tempo, voce não vai fornecer nenhuma corrente. Qual é a sua corrente média ?

    40 x 1/2 = 20 mA !

    Vamos piorar : durante apenas 100 milisegundos voce vai fornecer corrente ao Led, e 900 milisegundos não vai fornecer nenhuma corrente . Qual a sua corrente média ?

    40 x 1/10 = 4 mA !

    Ou seja, voce vai perceber um brilho bem fraquinho no Led ....

    O brilho de um Led depende da corrente que o atravessa, então quanto mais corrente tem, mais ele brilha, e vice-versa !

    Este é o princípio do controle do brilho do Led, apenas controlamos o tempo que a corrente passa pelo Led em função de um determinado período de tempo.

    Se voce fizer um gráfico da corrente através do Led, vai perceber que é exatamente a mesma forma de onda de um controle PWM.

    Na prática, se fizermos essas mudanças de corrente em um período grande, vamos perceber que o Led está piscando.

    Para iludirmos nossos olhos, usamos o mesmo princípio do cinema : se fizermos esse liga/desliga mais de 30 vezes em um segundo, nosso olho irá "integrar" esse sinal luminoso, e perceberemos apenas uma mudança no brilho como se o Led estivesse sempre aceso !

    Paulo

    Editado por aphawk
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Yoda,

    Te reconheçi assim que lí você assumindo o Yoda kkkkkkkk ! O jeito de escrever te entrega kkkk !

    Só espero que voce aproveite esta segunda chance, ok ?

    No mais, sempre disse que todos aqui querem ajudar para que voce e todos os que nos procuram consigam de fato aprender !

    Conhecimento é um dom inútil se não for utilizado para ensinar a quem pede, certo ? Use a cabeça, sem brincadeiras, porque vontade voce tem, e isso pode te levar muito mais longe do que voce imagina, meu pequeno amigo kkkkkkk !

    Paulo

    Editado por aphawk

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Esta certo desta vez não vou decepciona-los e desculpas pelas brincadeira ,agora eu vou levar aserio ,serio mesmo

    então eu vou fechar o topico , moderador muito obrigado , o topico já pode ser fechado!! resolvido!!

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×