Sari la conținut
ELFORUM - Forumul electronistilor

timer digital ciclic cu pic


quinn

Postări Recomandate

Păi am putea colabora - deși e crunt de lucrat pe codul altuia ! 

Dacă ai timp și chef , poți pune o variantă aici . Eu sunt relativ  modest la programare PIC dar la proiectul ăsta cred că mă descurc , totuși ajutorul unuia mai priceput e binevenit .

PS Eu lucrez doar în MikroC.

Link spre comentariu

Am facut eu o prima versiune, am atasat simularea in proteus cat si codul sursa in mikroC.

L-a pornire intra meniul de setare a intervalului ON ( OFF se calculeaza automat din moment ce ON+OFF = 1 ora) cu butonul 2 se incrementeaza minutele cu butonul 3 se incrementeaza secundele (pentru "pedalare" la valori mari de ex. 50s se tine butonul apasat")dupa ce setarea este facuta se apasa butonul 1 se afiseaza un mesaj de confirmare si incepe ciclul cu intervalul ON. Daca se doreste modificarea intervalului in timpul functionarii se apasa butonul 1 si se seteaza din nou ca la pornire.

 

Sensibilitatea butoanelor eu personal le prefer cu un delay de 250ms dar poate difera la alte persoane deci se pot ajusta dupa o testare efectiva in realitate.

 

 

 

Cateva poze in proteus.

 

Posted Image

Posted Image

Posted Image

TimerWithLCD.rar

Editat de bandi12
Link spre comentariu

M-am uitat peste cod și sunt convins că merge , mai ales că a fost și simulat . Eu nu pot încerca simularea , am doar versiunea 7.  Experiența se vede - eu mă chinuiam să implementez butoanele cu IOC , evident că e mai simplu și mai eficient așa cum ai făcut .

Deci, @quinn, de ce n-ai încerca , fără să mai stai două-trei zile după mine ? Plus minim o zi să testez eu . Dacă nu , mergem în paralel . 

Editat de UDAR
Link spre comentariu

Se poate adauga si ore in program?

 

Se poate modifica programul sa fie posibila si adaugarea orelor, dar atunci trebuie modificata si timpul de OFF findca este calculat automat din moment ce ON+OFF = 1 ora sau poate fi calculata din ore daca asa trebuie ceva gen ON+OFF = 24 ore in caz contrar trebuie modifiact astfel incat sa se seteze separat  On si Off.

Editat de bandi12
Link spre comentariu

@core are dreptate. Variabila msTime trebuie declarata ca "volatile".

Pe langa partea cu optimizarea compilatorului,  faptul ca de multe ori compilatorul ne salveaza din mici "greseli" nu trebuie sa ne faca sa nu urmam o cale a bunelor practici.

 

O variabila declarata ca "volatile" va fi stocata in RAM si nu va fi incarcata din registrii controller-ului. In acest fel compilatorul stie ca valoarea acstei variabile poate sa fie actualizata de evenimente in afara functiei main. Altfel, daca varibila este declarata simplu, atunci se poate ca atunci cand este folosita in program, sa se incarce valoarea prezenta in registru (o valoare precedenta) fara a se mai incarca din RAM in registru (se face un fel de shorcut, dar valoarea adevarata este cea din RAM in acest caz).

 

Ca si regula simpla, cand o variabila globala este modificata de o intrerupere (cum este cazul aici pentru msTime), ea trebuie declarata cu cuvantul cheie "volatile" pe langa tipul variabilei.

 

Ex:

// cand msTime este modificat de o intrerupere

int msTime; // WRONG

volatile int msTime;  // GOOD

Link spre comentariu

Am învățat ceva , mulțumesc.

Deși știam în principiu  chestia cu volatile , nu mi-am bătut capul cu ea , credeam că nu contează. De fapt n-am realizat că acțiunile compilatorul pot fi diferite de așteptările noastre , dacă nu este instruit corespunzător.

 

PS Am pus pe dreapta de o vreme un proiect cu mai multe întreruperi .... Poate asta era problema . O să verific cât de curând.

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