Jump to content

Controlar tensão saída no Pic


Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.