Sari la conținut
ELFORUM - Forumul electronistilor

sursa cu pic


aetius

Postări Recomandate

Programarea este un mare hazard si de fapt programatorul trebuie sa determine ce vrea sistemul ca sa functioneze corect.

Din pacate, uneori, aceasta se face prin multe teste, tinand seama de anumite indicii, bazate pe o experienta dobandita personal sau de alti programatori.

La proiectele cu MikroC si Proteus este mai simplu si mai rapid, deoarece rezultatul se vede imediat si astfel productivitatea creste.

Bazat pe munca si priceperea lui @aetius, am modificat codul din MikroC si schema din Proteus astfel incat sa functioneze destul de bine.

Seteaza 12V si 50V si face pasi de tensiune de 0,2V in sus si in jos si ambele proiecte MikroC si Proteus sunt fisierul RAR numit test1.

Schema este simplificata, deoarece filtrajul era prea mare si astfel intarzia modificarea tensiunii continue de iesire, am luat valorile de la proiectul

  descris si realizat de @radhoo

Click pentru marire.

553882981_SursacuPIC16F877Atest1.thumb.png.b641d62a302054c78877de3a6364a575.png

Daca credeti ca este bine, puteti trece mai departe la completarea etajelor de iesire, la bucla de stabilizare, la setarea curentului,

 si la memorarea tensiunii in EPROM, astfel incat ultimul reglaj al sursei sa poata fi pastrat la o noua pornire, v-am schitat cateva randuri in program.

 

Succes!

PS. Daca am redus numarul de citiri la 3 asa cum ati descoperit, functioneaza perfect, chiar si la apasare continua.

 

@gsabac

Sursa cu PIC16F877A test 1.rar

Editat de gsabac
Link spre comentariu

am facut pentru in singur buton si pare ok ...

in limita timpului o sa incerc s-a modific programul si s-a vedem ce iese...

       bit oldstate;

       if (Button(&PORTD, 3, 1, 1)) {
           oldstate = 1;
           }
       if (oldstate && Button(&PORTD, 3, 1, 0)) {
           oldstate = 0;
            current_duty_2++;
            PWM2_Set_Duty(current_duty_2);

astept pareri daca este ok liniile scrise ...

multumesc.

Link spre comentariu

Pai si unde tratezi overflow-ul?

 

Asta ai vazut-o (avea o greseala pe pagina precedenta)? Este in Basic, dar o transformi tu in C:

in caz de overflow, nu vrei sa se reseteze la 0, ci sa stea la 255

  if steps > 254 then
     steps = 255
  end if

in caz de overflow, nu vrei sa se reseteze la 255, ci sa stea la 0

  if steps < 0 then
     steps = 0
  end if

 

 

Editat de Thunderer
Link spre comentariu

@Thunderer este profesorul meu la sectiunea microcontrolere, el m-a incurajat si mi-a dat sfaturi ca sa pricep ce si cum, acum vreo 2 ani

 si cu timpul am devenit independent si cu ajutorul altor useri pasionati si amabili, la multe tipuri de aplicatii care m-au pasionat.

Eu va propun urmatorul cod:

Adaugati variabila TensiuneMax ca "int" in linia de cod:   unsigned int Tensiune, TensiuneMax;

 si modificati codul ca mai jos;

if (!RD2_bit)     // if button on RD2 pressed
    {
      //Delay_ms(10);
      if (Tensiune < TensiuneMax) current_duty_2++;    // increment current_duty_2
      PWM2_Set_Duty(current_duty_2);
       Delay_ms(30);
     }

    if (!RD3_bit)       //if button on RD3 pressed
    {
      //Delay_ms(10);
      if (Tensiune > 0.1) current_duty_2--;   // decrement current_duty_2
      PWM2_Set_Duty(current_duty_2);
      Delay_ms(30);
     }

 

De fapt proiectul este al dvs. si poate reusiti sa il finalizati cu succes fie la nivel de simulare fie chiar ca aparat, depinde ce v-ati propus.

 

@gsabac

Editat de gsabac
Link spre comentariu

Proiectul nu este al meu, este in proiect comun, nu se vrea a fi unul comercial....produsul final , va fi construit  si lasat aici pe forum  vazut si poate construit de alti useri.

Sunt idei bune si o s-a le aplic si in functie de simulare raman sau nu si trec mai departe, oricine poate aduce o inbunatatire.

Multumesc.

 

P.S.

 cu schema am ajuns aici...fisier .rar

hexul e facut "varza" momentan tre sa-l curat...si il atasez daca se doreste.

0.2.rar

Editat de aetius
Link spre comentariu
Acum 17 minute, gsabac a spus:

TensiuneMax =26;  //tensiunea maxima 26V sau atat cat o doriti

Este o variabila deoarece poate se doresc diverse setari. 0-12V sau 0-50V, etc.

O observatie: in masura posibilului incercati sa nu definiti variabile pt. valori care nu se modifica in timpul rularii programului... ca nu-s propriu zis variabile si-i ineficient.

STIU ca asta nu-i un cod complex dar e bine sa facem lucrurile bine, pt. obisnuinta. :)

Definiti-le ca si constante sau folositi directive de compilare.

De ex.:

#define TENS_MAX	26
...
if(i >= TENS_MAX) {
...
}

 

Link spre comentariu

@aetius, schema functioneaza perfect si trebuie doar setata tensiunea presetata de 12V si tensiunea maxima.

Am rearanjat putin schema si am marit formatul la A3, am pus condensator pe iesire si rezistenta de sarcina.

Click pentru marire.

 image.thumb.png.2919c589fd857ce3e37bfb9c07077f8b.png

Computerul meu este cam slabut si este cam la 60%

 

@gsabac

Sursa cu PIC16F877A @aetius ver2.pdsprj

Editat de gsabac
Link spre comentariu

Acum studiez owerflow-ul.

ajunge la 255 si acol ramine blocat...

cand ajung la 0 nu se opreste , si trece mai departe la 255 si scade...

(imi cer scuze daca nu ma explic cum trebuie)

 //in caz de overflow, nu vrei sa se reseteze la 0, ci sa stea la 255

           if ((current_duty_2) > 254 )
           {
            current_duty_2 = 255 ;
            PWM2_Set_Duty(current_duty_2);
            break;

           }

           //in caz de overflow, nu vrei sa se reseteze la 255, ci sa stea la 0

           if ((current_duty_2) < 0 )
           {
            current_duty_2 = 0 ;
            PWM2_Set_Duty(current_duty_2);
            break;
            }

Dupa revin si trec la ideeile lui @gsabac si @informer

Editat de aetius
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