Sari la conținut
ELFORUM - Forumul electronistilor

Lucreaza cineva cu FLOWCODE ?


bercioiu

Postări Recomandate

Am vazut ca s-a mai intrebat despre WATCHDOG TIMER si nu s-a lamurit treaba. Din ce am priceput eu se poate implementa un prescaler  care da un interval de 2.2sec. Ce facem cand avem un delay in bucla principala de 2 sec(in cazul meu) plus ceva delay la start signal. Cu ptiunea "auto clear watchdog" cand are loc resetarea wdt? Cica asta se foloseste cand ai delayuri in program.  Daca pun wdt enable si bifez si auto clear watchdog compileaza si functioneaza programul. Se poate verifica daca are efect aceasta optiune in timpul functionarii fizice a picului? Daca bag o casuta cu cod C  clear_wdt(); si asociez un prescaler 1:128 porneste programul apuca sa afiseze temperatura si umiditatea apoi reseteaza picul. Rog pe cei care stiu cum sta treaba cu wdt poate ma lamuresc si pe mine cum sa il folosesc.

Link spre comentariu

In urmatorul link se explica foarte clar ce te intereseaza:

http://www.matrixtsl.com/mmforums/viewtopic.php?f=7&t=11684#p43525

sau aici:

http://www.matrixtsl.com/mmforums/viewtopic.php?f=54&t=15264&p=62475&hilit=clear+wdt#p62475

 

In rezumat, pentru cei care nu cunosc foarte bine lb engleza:

- daca folositi delay-uri in program si bifati optiunea "auto clear watchdog" atunci timer-ul watchdog va fi resetat chiar de blocul de delay

- daca nu folositi varianta de mai sus atunci trebuie sa introduceti C code block cu instructiunea: 

MX_CLEAR_WATCHDOG;
Editat de mars01
Link spre comentariu
  • 1 lună mai târziu...

Cum fac un delay de ordinul minutelor fără a folosi iconta de delay? Am încercat sa fac un numarator cu timer2 care face +1la fiecare secunda, si sa fac o bucla care se termina când numaratorul ajunge la o anumita valoare( {}while numarator<60 ). In cazul acesta nu mai executa întreruperea la tinere si rămâne blocat programul in bucla. Mai sunt si alte metode de a executa un delay si in acelasi timp sa citesc adc-ul?

Link spre comentariu

In macroul interuperii nu are ce sa caute bucla... Posteaza fisierul sa iti adaug delay-ul.

Nu-i mare lucru, faci o intrerupere cu o frecventa x, adica programul va trece prin macroul intreruperii de x ori/sec. De fiecare data cand trece prin intrerupere, incrementezi o variabila i (i=i+1), daca i=x, a trecut secunda, resetezi i=0 si incrementezi o variabila pentru secunde sec=sec+1 si tot asa, pana obtii ce valoare ai nevoie pentru sec. Daca ai nevoie de timp mai mult, treci la urmatorul ordin, la 60 sec, incrementezi minut etc.

Link spre comentariu

Se pare ca nu m-am facut inteles. Stiu cum sa fac fac sa număr timpul, nu asta e problema. Bucla nu am in macroul cu întreruperea ci in alt macrou care este accesat la un moment dat in program. Acea bucla are rulează pana un anumit timp este incrementat in macroul cu întreruperea. Buba este ca programul intra in bucla si nu mai executa întreruperea, drept urmare timpul nu mai este măsurat si programul rulează on bucla la nesfârșit. Momentan postez de pe telefon si nu pot adăuga flowchartul,mai pe seara îl postez.

Link spre comentariu

Ia vezi, gasesti cele 4 diferente intre al tau si al meu?  :56

Astazi am testat in soare plin trackerul si mi sa parut  prea insensibil.ca sa functioneze tebuie sa acoper complet fotorezistenta. e problema de montaj cumva?

Link spre comentariu

Astazi am testat in soare plin trackerul si mi sa parut  prea insensibil.ca sa functioneze tebuie sa acoper complet fotorezistenta. e problema de montaj cumva?

 

Intre cele doua fotorezistente se monteaza un "perete" despartitor astfel cand nu este rotit drept spre soare acel perete o sa tina umbra la una dintre fotorezistente.

 

Uite cam asa.

 

Posted Image

Editat de bandi12
Link spre comentariu

Asa am facut dar oricum nu e ok Peretele meu e si mai mare, 30 cm. Fotorezistentele sunt noi (14kom la intuneric)

 

Am si eu unul facut de mine, nu stiu ce valori au fotorezistentele ( l-am recuperat din lampi solare sparte). Incearca sa masori cu multimetru diferenta de voltaj intre cele doua fotorezistente cand ambele sunt acoperite si cand unul primeste soare si celalalt are umbra de la acel perete. Eu in plin soare am in jur de 4.8V si cel acoperit de perete are undeva la 4.5-4.6 ( rezistenta in plin soare undeva la 170 ohm si cel acoperit in jur de 380ohm). Diferenta nu este mare dar de ajuns incat ADC-ul sa indice diferenta. Azi la mine nu a fost soare de loc si totusi panoul este rotit spre norii in care se ascunde soarele.  Daca exista diferenta intre cele doua fotorez. atunci inseamna ca in soft e problema si adc-ul nu indica diferenta. Sau diferenta este mai mica ca punctul e histerezis, eu am pus 25 valori ADC.

Editat de bandi12
Link spre comentariu

Se pare ca nu m-am facut inteles. Stiu cum sa fac fac sa număr timpul, nu asta e problema. Bucla nu am in macroul cu întreruperea ci in alt macrou care este accesat la un moment dat in program. Acea bucla are rulează pana un anumit timp este incrementat in macroul cu întreruperea. Buba este ca programul intra in bucla si nu mai executa întreruperea, drept urmare timpul nu mai este măsurat si programul rulează on bucla la nesfârșit. Momentan postez de pe telefon si nu pot adăuga flowchartul,mai pe seara îl postez.

 

Chestia este cat se poate de simpla. Se numeste lucru cu "flag-uri" (sau semafoare, daca iti place traducerea, mie nu, asa ca raman flag-uri).

Cum s-a spus mai sus.

 

Ex. Ai o intrerupere data de un timer, care iti apeleaza functia de intrerupere sa zicem la fiecare 1ms.

 

Declari o variabila globala de tip unsigned int, sa zicem numita TIMP. Aceasta va fi incrementata pana ajunge la valoarea dorita. Sa zicem o secunda, deci valoarea variabilei TIMP este atunci 1000 (1000ms = 1sec).

Mai declari o variabila tip boolean, tot globala (adica in programul principal), numita FLAG si o initializezi cu 0.

 

Inainte de fiecare incrementare testezi daca este >= 1000. Foarte important sa fie >= si nu simplu =.

Daca este >= 1000 atunci TIMP ia valoarea 0 si FLAG ia valoarea 1.

Daca nu este >= 1000 atunci TIMP = TIMP +1

 

In programul principal faci o bucla care se executa cat timp FLAG = 0.

Cand FLAG = 1 se va iesi din bucla care se executa cat timp FLAG = 0, deci a trecut 1 secunda si, atentie, vei face o initializare FLAG = 0.  Apoi faci ce vrei tu.

Daca nu initializezi FLAG = 0 imediat dupa ce iese din bucla, atunci programul nu va functiona cum trebuie.

Editat de mars01
Link spre comentariu

Eram la servici si nu aveam cum posta. Il postez acuma, sa nu dati cu pietre daca sunt multe greseli! In macro Mod aprindere prima bucla ramane blocat si nu mai face intrerupere. Programul se vrea a fi un controler pentru soba cu peleti si momentan este in faza de schita si nu varianta finala.

peleti.txt

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