Jump to content
Sign in to follow this  
clau_diu

Control intensitate LED folosind potentiometru

Recommended Posts

Salut,

 

Incerc sa citesc valoarea unui potentiometru si sa o folosesc intr-un PWM ca sa reglez intensitatea luminoasa a unui LED, dar ceva nu functioneaza...

Stiu ca valoarea citita de potentiometru ia valori intre 0 si 1023, iar valoarea lui Duty al PWM-ului este intre 0 si 255, am incercat sa impart la 4 valoarea citita din potentiometru dar tot nu functioneaza. HELP !!!

 

Multumesc anticipat !

 

Codul este:

 

unsigned int valPot; //variabila care "citeste" potentiometrul
void main() {
 TRISA.F0 = 1; //intrare analog potentiometru
 TRISC.F2 = 0; //iesire LED
 PWM1_Init(500); //initializare PWM la 5Hz
 PWM1_Start();  //star PWM
 while(1){
  valPot = ADC_Read(0); //Analog/Digital Converter
  PWM1_Set_Duty(valPot);
}
}

Share this post


Link to post
Share on other sites

In primul rand as dori sa va spun ca nu m-am axat pe PIC-uri, ci pe microcontrolere AVR si ceva ARM-uri STM. Deci, nu prea sunt familiarizat cu programul microC for PIC, dar cred ca veti putea face usor o analogie, avand in vedere ca ceea ce voi prezenta mai jos este compatibil cu microC for AVR iar diferenta dintre soft-uri nu este foarte mare.

Asa cum ati scris codul de mai sus, variabila valPot va citi valori mai mari de 255, ceea ce nu este bine, deoarece nu va fi corect intelese de rutina PWM1_Set_Duty.

In al doilea rand, codul prezentat de dvs. are mai multe lacune.

 

O posibila solutie sau rezolvare ar arata asa:

 

char PWM_duty;
unsigned int i;
unsigned long adc;
 
void main() {
 
DDB2_bit = 0;  // Setez PORTB pin 2 ca intrare ADC - verificati daca portul PB2 este intrare ADC - MCU.
 
PWM_duty = 127;  // valoarea initiala a factorului de umplere PWM - ajustati aceasta valoare daca led-ul doriti sa fie aprins mai mult sau mai putin - depinde foarte mult de tipul de tranzistor de c-da LED folosit
 
DDB0_bit = 1;  // Setez PORTB pin 0 ca iesire PWM pentru control LED printr-un tranzistor (depinde de puterea LED-ului) - verificati daca PB0 poate fi iesire PWM
  
PWM1_Init(_PWM1_FAST_MODE, _PWM1_PRESCALER_8, _PWM1_NON_INVERTED, PWM_duty);  // initializeaza PWM
 
ADC_Init();    // Initializeaza ADC
 
i = 0; adc = 0;  // reseteaza variabilele
 
do  {
      //aplicam un mic oversampling pentru o mai buna rezolutie de masura cu atat mai mult cu cat domeniul de reglaj PWM a luminozitatii LED-ului, daca vom folosi un tranzistor extern, se rezuma la o parte din domeniul de variabile: 0...255;
      
      adc = 0;
      for(i=0;i
                           {
                           adc = adc + ADC_read(1); // citeste si aduna de 256 ori valoarea adc de la canalul 1 adc
                           }
      adc = adc / 16;
      if(adc > 16431)  adc = 16431; // anuleaza "overflow"
 
   // Regleaza factorul de umplere PWM pe led
 
      if (adc++) {    // detecteaza daca valoarea adc creste
      Delay_ms(40);                             
      PWM_duty--;                           
      PWM1_Set_Duty(PWM_duty);               
       }
       else
               if (adc--) {   // detecteaza daca valoarea adc scade
                   Delay_ms(40);                           
                   PWM_duty++;                         
                   PWM1_Set_Duty(PWM_duty);             
                   }
 
   // Asteapta
    Delay_ms(200);
 
  } while(1);
 
}
 

Mai ramane sa transpuneti codul in microC for PIC, facand ajustarile necesare.

 

Numai bine

Share this post


Link to post
Share on other sites

ok, multumesc, mi-a fost de ajutor ! :) 

Share this post


Link to post
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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We use cookies and related technologies to improve your experience on this website to give you personalized content and ads, and to analyze the traffic and audience of your website. Before continuing to browse www.tehnium-azi.ro, please agree to: Terms of Use.