Malereis Posted March 19, 2012 at 02:24 AM Report #444560 Posted March 19, 2012 at 02:24 AM Boas amigos. Tenho cá um Pic 16F877 Minha intenção é ligar 3 leds, um em cada saída e mudar via software a tensão que aplico em cada led. Supor que um led consuma tensão de 2,2 a 2,4 volts, preciso ir baixando isso até 0 volts (apagado).... Esse efeito precisa ser feito em 3 leds, com controle individual. Sou iniciante na programação do PIC e fazer esse efeito, pesquisei muito e não consegui ainda. Já ouvi falar em PWM... Pesquisei e nada consegui a respeito de como posso fazer isso Pensei em utilizar muitas saídas e em cada uma delas colocar um resistor de valor diferente, mas não vai ficar bom. A descida de tensão tem que ser linear. Como tenho comunicação com a porta serial, minha gostaria de controlar pelo Delphi. Algum colega pode ajudar? Grato pela ajuda Alexandre
gadelhas Posted March 19, 2012 at 04:25 PM Report #444657 Posted March 19, 2012 at 04:25 PM Boas amigos. Tenho cá um Pic 16F877 Minha intenção é ligar 3 leds, um em cada saída e mudar via software a tensão que aplico em cada led. Supor que um led consuma tensão de 2,2 a 2,4 volts, preciso ir baixando isso até 0 volts (apagado).... Esse efeito precisa ser feito em 3 leds, com controle individual. Sou iniciante na programação do PIC e fazer esse efeito, pesquisei muito e não consegui ainda. Já ouvi falar em PWM... Pesquisei e nada consegui a respeito de como posso fazer isso Pensei em utilizar muitas saídas e em cada uma delas colocar um resistor de valor diferente, mas não vai ficar bom. A descida de tensão tem que ser linear. Como tenho comunicação com a porta serial, minha gostaria de controlar pelo Delphi. Algum colega pode ajudar? Grato pela ajuda Alexandre Viva; Em antes de mais tens de ter em consideração que os leds são componentes que dependem da corrente e não da tensão. Dito isto tens de calcular através da lei de ohm a resistencia em série a colocar com o led para não o danificar. Isto feito, só necessitas mesmo de controlar o led por PWM, contudo o PIC que utilizas apenas tem duas saídas PWM e tu queres controlar 3 leds. Posto isto, aconselho-te a utilizares PWM por software. Já agora que linguagem estás a utilizar para a programação do PIC? Pode ser que já exista bibliotecas PWM (software) para essa mesma linguagem, assim não tens de andar a inventar a roda. Abraço Gadelhas
bsccara Posted March 19, 2012 at 04:50 PM Report #444663 Posted March 19, 2012 at 04:50 PM O controlo de luminosidade por PWM baseia-se no mesmo fenômeno que te permite ver televisão: a persistência de visão. Se tiveres um LED ligado continuamente terás o máximo de luminosidade, mas se o ligares e desligares a uma velocidade tal que o período do ciclo seja menor que o tempo de persistência (~20 ms), o teu olho não consegue ver o LED a piscar, apenas vê que a luminosidade é menor. Uma questão que tens de definir é quantos passos queres ter para a luminosidade; como vais ter de implementar um CCP em software vais ter de ter um contador a gerar '50 x nº de passos' interrupções por segundo e existem limites ao tempo de resposta (e de processamento) do PIC. Supondo que queres 16 passos de luminosidade : 1. Inicializa a zero uma variável ('contagem') para controlar o ciclo PWM. 2. Inicializa três variáveis ('pwm1.. pwm3') com os limites de luminosidade de cada LED; 16 para 100%, 0 para 0%. 3. Activa os pinos dos LEDs, que tenham uma variável 'pwm' com um valor superior a 0. 4. Programa um contador do PIC para disparar 50 x 16 vezes por segundo, gerando interrupções. 5. Dentro da rotina de interrupção faz: 5.1 Incrementa a variável 'contagem' e faz um AND com um valor 0x0F, de modo a que a contagem seja feita de 0 a 15 apenas. 5.2 Compara a variável 'contagem' com cada uma das 'pwm'; se o valor de 'contagem' for igual ou superior desliga o pino a que o LED está ligado. 5.3 Se o valor actual da variável 'contagem' for 0 liga todos os pinos dos LEDs, que tenham uma variável 'pwm' com um valor superior a 0. Podes aumentar o nº de passos desde que a soma do tempo de resposta à interrupção + tempo de execução da rotina de interrupção seja menor que o período entre interrupções.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now