Sari la conținut
ELFORUM - Forumul electronistilor

PIC12F629


Vizitator DanielZamfir

Postări Recomandate

Vizitator DanielZamfir

#define on 1#define off 0void main() { int i=1; TRISIO=0; delay_ms(3000); GPIO.GP0=on; delay_ms(200); GPIO.GP0=off; delay_ms(200); GPIO.GP0=on; delay_ms(200); GPIO.GP0=off; delay_ms(10000); while(i<=8) {      //blinking led on pin7   GPIO.GP0=on;   delay_ms(1000);   GPIO.GP0=off;   delay_ms(2500);   GPIO.GP0=on;   delay_ms(1000);   GPIO.GP0=off;   if(i%2==0)    delay_ms(7000);   else    delay_ms(14000);   i++; } while(1)          //signaling for shutdown  {   GPIO.GP0=on;   delay_ms(250);   GPIO.GP0=off;  }}
As vrea sa stiu cum introduc fade in/out in tranzitia on/off din prima structura repetitiva(while(i<=8)).

Adica:fade in timp de 500ms->led on->mentine 1000ms->fade out timp de 500ms->led off.

 

 

Mentionez ca este prima incercare de a programa un microcontroller. Folosesc compilatorul mikroC de la mikroElektronika. Cat de curand trebuie sa primesc si programatorul ca sa pot implementa programul.

Link spre comentariu
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nooob64

    2

  • ducu

    1

Top autori în acest subiect

Din cite am vazut acest pic nu are hardware pwm , deci pentru fade in/out va trebuii sa iti faci un soft PWM altfel nu vei putea . Problema cu soft PWM este ca trebuie sa folosesti un timer si sa simulezi un PWM hardware, sau cel mai simplu iti faci niste loop-uri si pui 2 delay-uri intre care aprinzi/stingi ledul , modificind cele 2 delay-uri poti obtine un rezultat asemanator , valoarea intarzaierilor daca nu mai insel este in jurul 500us -> 10ms totul se rezuma la cit de repede aprinzi si stingi ledul si timpul de on/off

Link spre comentariu
Vizitator DanielZamfir

Din cite am vazut acest pic nu are hardware pwm , deci pentru fade in/out va trebuii sa iti faci un soft PWM altfel nu vei putea . Problema cu soft PWM este ca trebuie sa folosesti un timer si sa simulezi un PWM hardware, sau cel mai simplu iti faci niste loop-uri si pui 2 delay-uri intre care aprinzi/stingi ledul , modificind cele 2 delay-uri poti obtine un rezultat asemanator , valoarea intarzaierilor daca nu mai insel este in jurul 500us -> 10ms totul se rezuma la cit de repede aprinzi si stingi ledul si timpul de on/off

Multumesc pentru raspuns.Cred ca o sa raman cu cele 2 loop-uri:-pentru fade in delay-ul pentru ON incepe de la 500us si se termina la 10ms;in acelasi timp cel pentru OFF incepe la 10ms si se termina la 500us-pentru fade out exact inversTrebuie doar sa vad cum scriu ca aceste doua modificari de delay sa se petreaca pe parcusul a 1000ms. La prima incercare ar fi asa: se modifica cele 2 delay-uri->astept 1ms->inca 2 modificari->astept 1ms->si tot asa pana in total se acumuleaza delay de 1000ms (pasul nu cred ca o sa fie pana la urma de 1ms)
Link spre comentariu

Ai grija cum iti calculezi timpii , nu e musai sa incepi de la 500us pentru ca o sa te incurce la functii delay_us / delay_ms , ai grija ca functia delay_ms nu accepta variabila , doar vdelay_ms accepta.

Link spre comentariu
Vizitator DanielZamfir

Ai grija cum iti calculezi timpii , nu e musai sa incepi de la 500us pentru ca o sa te incurce la functii delay_us / delay_ms , ai grija ca functia delay_ms nu accepta variabila , doar vdelay_ms accepta.

Da, tocmai citeam in help despre vdelay deoarece initial voiam un delay variabil(cu un numar obtinut aleator) in loc de cele 2 IF-uri.Acum am modificat. Dupa ce o sa ajung la varianta finala a programului o voi posta aici.
Link spre comentariu
Vizitator DanielZamfir

Cam asta ar fi :

#define on 1#define off 0int random_gen(int mood) { int mood; srand(mood); mood=rand()%9+7; return mood;}void main()  {  int i=1,mood=1,j,k,offc;              //offc=number of steps used for fade in LED OFF part and fade out LED ON part  TRISIO=0;  while(i<=15)   {    offc=950;    for(j=1;j<=1000;j++)                //begin of led fade in sequence     {      k=2;      GPIO.GP0=on;      delay_us(500);      if(j>1)       while(k<=j)        {         delay_us(10);         k++;        }      k=1;      GPIO.GP0=off;      delay_us(500);      while(k<=offc)       {        delay_us(10);        k++;       }      offc--;      delay_ms(1);     }                      //end of fade in led sequence    delay_ms(1500);    offc=950;    for(j=1;j<=1000;j++)    //begin of fade out led sequence     {      k=1;      GPIO.GP0=on;      delay_us(500);      while(k<=offc)       {        delay_us(10);        k++;       }      offc--;      k=2;      GPIO.GP0=off;      delay_us(500);      if(j>1)       while(k<=j)        {         delay_us(10);         k++;        }      delay_ms(1);     }                     //end of fade out led sequence    delay_ms(750);           //delay between the two sequences    offc=950;    for(j=1;j<=1000;j++)                //begin of led fade in sequence     {      k=2;      GPIO.GP0=on;      delay_us(500);      if(j>1)       while(k<=j)        {         delay_us(10);         k++;        }      k=1;      GPIO.GP0=off;      delay_us(500);      while(k<=offc)       {        delay_us(10);        k++;       }      offc--;      delay_ms(1);     }                      //end of fade in led sequence    delay_ms(1500);    offc=950;    for(j=1;j<=1000;j++)    //begin of fade out led sequence     {      k=1;      GPIO.GP0=on;      delay_us(500);      while(k<=offc)       {        delay_us(10);        k++;       }      offc--;      k=2;      GPIO.GP0=off;      delay_us(500);      if(j>1)       while(k<=j)        {         delay_us(10);         k++;        }      delay_ms(1);     }                     //end of fade out led sequence    mood=random_gen(mood);    vdelay_ms(mood);    i++;   }  while(1)         //begin of shutdown notice   {    GPIO.GP0=on;    delay_ms(250);    GPIO.GP0=off;   } }

 

sper sa si mearga

Link spre comentariu
Vizitator DanielZamfir

Am mai modificat cate ceva ca sa ocupe mai putin spatiu ,iar secventele FOR au fost editate putin(contorul nu mai ajunge pana la 1000 deoarece offc devena negativ dupa 951 de cicluri)

//FIREFLY SIMULATOR//CODE BY ZAMFIR DANIEL//FIREFLY PROJECT#define on 1#define off 0void led_fade_in() {  int j,k,offc;  offc=950;  for(j=1;j<=949;j++)                //begin of led fade in sequence   {    k=2;    GPIO.GP0=on;    delay_us(500);    if(j>1)    while(k<=j)     {      delay_us(10);      k++;     }     k=1;     GPIO.GP0=off;     delay_us(500);     while(k<=offc)      {       delay_us(10);       k++;      }     offc--;     delay_ms(1);    }                      //end of fade in led sequence   GPIO.GP0=on; }void led_fade_out() {  int j,k,offc;  offc=950;  for(j=1;j<=949;j++)    //begin of fade out led sequence   {    k=1;    GPIO.GP0=on;    delay_us(500);    while(k<=offc)     {      delay_us(10);      k++;     }     offc--;     k=2;     GPIO.GP0=off;     delay_us(500);     if(j>1)      while(k<=j)       {        delay_us(10);        k++;       }     delay_ms(1);    }                     //end of fade out led sequence   GPIO.GP0=off; }void shutdown_notice() {  while(1)         //begin of shutdown notice   {    GPIO.GP0=on;    delay_ms(250);    GPIO.GP0=off;   } }void main() {  int i=1,mood=1;  TRISIO=0;  delay_ms(1500);  GPIO.GP0=on;  delay_ms(250);  GPIO.GP0=off;  delay_ms(10000);  while(i<=15)   {    led_fade_in();    delay_ms(500);    led_fade_out();    delay_ms(750);    led_fade_in();    delay_ms(1000);    led_fade_out();    if(i>1)     mood=mood/1000;    srand(mood);    mood=rand()%9+7;  //random from 7 to 15(7+9-1)    mood=mood*1000;   //transform mood to milliseconds    vdelay_ms(mood);    i++;   }  shutdown_notice(); }
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări