Sari la conținut
ELFORUM - Forumul electronistilor

Lucreaza cineva cu FLOWCODE ?


Postări Recomandate

ca si incepatorintr-ale flowcode-ului, mentor: bericioiu,

iti pot spune bun venit in familia utilizatorilor de flowcode.

 

De cand asteptam sa spuna cineva asta :53 .

Acum 3 saptamani mi-era si frica sa alimentez un mcu si azi deja am reusit sa implementez un program in proportie de20%(afisare mesaje,protectii,indexare,contor volumetric,ciclul de preparare) ce simuleaza un automat de cafea.

Spun 20% pentru ca restul ar insemna sisteme de plata,calibrari, layout ,comunicare cu pc si altele.Nici nu imi trebuie mai mult pentru ceea ce vreau sa fac.

Nu stiu Bericioiu cum a facut dar dupa cateva "sedinte" am reusit sa fac lucruri pe care nu credeam ca le voi putea pune in practica vreodata.

 

Rama am "procurat-o" chiar de pe un aparat de cafea.

Link spre comentariu
  • 2 săptămâni mai târziu...

na ca a re-venit si randul meu sa-mi prind urechile(pentru a nu stiu cata oara) :

vreau sa activez pull-up-urile pe anumiti pini ai unui 16LF1824....pinii 4&5 ai portului C.

am tot incercat variantele:

WPUC = 001100000;

.. adica pe pinii 5&4 ai portului C...

pe urma am citit prin dartasheet ca trebuie sa resetez bitul WPUEN al registrului OPTION si am adaugat asta: option_reg=0000000;

 

ce mickey mouse o avea ca nu imi "ia" in considerare acele linii de cod C....

precizez ca aceste linii pentru activarea pull upului le-am adaugat sub liniile in care Bericioiu m-a invatat sa le adaug pentru setarea oscilatorului...pentru ca 16LF1824 sunt ceva mai pretentioase...

Link spre comentariu

Pentru a activa pull-up-urile interne,stergi bitul 7 al registrului Option. Nu este nevoie neaparat sa "nominalizezi" pe ce pini sa fie active pull-up-urile, In momentul in care un pin este folosit ca iesire, pull-up-ul se dezactiveaza automat pentru acel pin.

In FLowcode, pui in cod C:

clear_bit(option_reg , 7);// Activezi toate pull-upswpua = 0x00; //  Calculezi ce pini pe portul Awpuc = 0X30; //  Calculezi ce pini pe portul C

Eu am pus in hexa, dar poti pune si in binar cum ai pus tu, doar ca wpuc trebuie scris cu litere mici, iar ordinea bitilor este de la dreapta spre stanga, adica ce ai scris tu acolo "001100000" inseamna bitii 5 si 6, nu 4 si 5, pentru bitii 4 si 5, pui 

wpuc = 001100000;

Succes!

Editat de moduino
Link spre comentariu

LE: am modificat asa cum a exemplificat colegul Elison:

clear_bit(option_reg , 7);wpuc = 0b00110000;

si merge!

 

cum a exemplificat colegul moduino:

clear_bit(option_reg , 7);wpuc = 0x30;

si merge!

ambele exemplificari sunt bune!

multumesc amandurora!

Editat de ardiles
Link spre comentariu
  • 4 săptămâni mai târziu...

off mintea de acum si anii de atunci....

intrebare(nici nu stiu cum sa formulez intrebarea):

daca am o situatie in care am active intreruperile: IOC-portA, TMR0 si TMR1, ele sunt independente intre ele?

adica am vazut ca IOC, atunci cand am modificare pe acel port, imi trateaza si rutina de la TMR0... ele sunt independente? sau asa am eu in creieri, ca sunt legate intre ele?....

 

ideea care este:

am o situatie in care masor o frecventa pe un pin al microcontrolerului si: asa cum am gasit eu exemplele(si altfel nici nu-mi merge mintea sa incerc), in bucla main am doua bucle, una in care imi interogheaza intrarea si sta blocat pana cand apoi cat timp este 1, imediat dupa ea am o bucla in care sta blocat cat timp intrarea este 0, dupa ce intrarea de frecventa a parcurs o perioada completa,1-0, imi adua un counter si merge mai departe;

in paralel, odata la o secunda, TMR0 imi "sunteaza" "linia" in care microcontrolerul trateaza intrarea 1-0-1-0 pentru a-mi masura frecventa, si imi compara variabila numarata pe intrare cu o variabila adunata odata la o secunda... in felul acesta imi masoara frecventa..... si mai departe am adaugat niste decizii care daca numarul(frecventa), este <40 sa aprinda un led, >41 sa stinga led-ul respectiv....

 

de ce intreb de IOC & TMR0, pentru ca atunci cand frecventa este 0, microcontrolerul meu este practiv inactiv, pentru ca sta blocat in bucla main, in mini-bucla in care interogheaza intrarea, daca intrarea de frecventa este 0, sta in acea bucla pana cand apare schimbare(respectiv 1 apoi 0 apoi 1).... cum sa fac sa fac aceasta interogare de intrare frecventa in rutina de tratareIOC port A, dar sa fie independenta de TMR0? mentionez ca IOC il folosesc la intrarea de la un encoder, dar si o intrare de "dublu click" ce-mi activeaza niste iesiri.

 

sau mai este o varianta:

sa activez si TMR2, acesta sa-mi schimbe o variabila odata la 2 secunde care daca variabila schimbata de TMR2, sa pun in bucla main o decizie care doata la doua secunde(nu stiu de ce doua), sa imi masoare frecventa, in felul asta, timp de doua secunde cand microcontrolerul nu mai este ocupat cu masurarea frecventei sa execute celellalte operatiuni?

 

multumesc!

Link spre comentariu

daca am o situatie in care am active intreruperile: IOC-portA, TMR0 si TMR1, ele sunt independente intre ele?

Da si nu.Fiecare intrerupere in sine e independenta de celelalte si e generata de perifericul "atasat".Tratarea intreruperilor, pe de alta parte, se face "la gramada", adica exista o singura "functie" care e apelata de toate intreruperile *). In cadrul Este treaba programatorului sa se ocupe de intreruperi in mod corespunzator, testand flagurile pentru intreruperile pe care le-a activat.*) Ma rog, asta la seria 16F, ca seria 18F are doua "functii", iar la seriile mai mari n-am idee.Nu stiu cum se face in flowcode, in XC8 functia de tratare a intreruperilor pentru TMR0 si TMR1 de mai sus se scrie cam:
void interrupt functie_intreruperi(){   if(TRM0IF && TMR0IE) { //daca intreruperea e activa si flagul corespunzator e 1      ... //prelucrari intrerupere TMR0      TMR0IF = 0; //reseteaza flagul, ca sa nu reintre in intrerupere fara motiv   }   if(TRM1IF && TMR1IE) { //daca intreruperea e activa si flagul corespunzator e 1      ... //prelucrari intrerupere TMR1      TMR1IF = 0; //reseteaza flagul, ca sa nu reintre in intrerupere fara motiv   }}
Din cauza de if-uri, functia prelucreaza doar intreruperile "active", fara if-uri la fiecare intrerupere s-ar prelucra toate modulele.Din restul intrebarilor n-am inteles nimic.
Link spre comentariu

IOC in Flowcode, intreruperile nu trebuie sa aiba treaba cu bucla principala, pentru fiecare intrerupere in parte, trebuie sa creezi cate un macro separat, macro ce va fi tratat in momentul "decalnsarii" intreruperii respective. Pentru IOC, nu trebuie sa interoghezi intrarea in bucla principala, tot ce trebuie sa faci este sa filtrezi in macroul IOC-ului portul pentru a detecta ce pin a fost activat. In fuctie de pic, poti seta in intrerupere la ce pini sa reactioneze intreruperea pe port. Nu are nicio legatura (in sensul in care ai prezentat tu) IOC cu niciun TMR sau RB0.

Daca tu interoghezi portul in bucla principala, ce rost mai are intreruperea?

Link spre comentariu

@vezi muti, eu sunt ELECTRICIAN, lucrez in instalatii de MT-asta este baza la mine... ca ma JOC de-a electronica, flowcode este exact ceea ce trebuie...

si colegul bericioiu, in postarea 44, are MARE DREPTATE, se poate face orice, capul sa iti mearga...

chiar cu spusele de mai sus despre cu ce ma ocup, tot voi cumpara versiunea profesionala de flowcode, pentru ca acest program merita atentie si trebuie sustinut.

revenind la oile noastre,

@bericioiu cu privire la postarea 42:

nestiind sa explic in termeni explic ce am pe viu:

pentru IOC, am  o intrare de "dublu click"(la al doilea click - schimba variabila si activeaza o iesire), intrare dublu click pe RA3; tot IOC am pe RA4  si RA5 unde am conectat un encoder! deci pentru intreruperea IOC, am un macro in care am facut jocul de variabile pentru encoder, dar si acel dublu click pe RA3...

TMR0 am macro separat unde am responsabil timpi(de resetare, de revenire click la 0 daca am apasat doar un click si al doilea nu a mai venit-pe RA3)

 

intrebarea vine dupa ce am constat ca in timpul simularii din flowcode, daca am schimbare pe oricare dintre pinii unde am ioc activ, dupa ce trece prin macroul intreruperii IOC, imediat dupa asta imi trateaza macroul TMR0...

indiferent de prescalerul TMR0...

 

avand nevoie si de TMR1, voiam sa stiu daca acesti registri TMR0/TMR1/IOC, au vreo legatura intre ei, adica daca am IOC pe un pin, automat dupa ce trateaza macro IOC, imi va trece si prin macro TMR0/1/2...

@LiviuM, cand spui reseteaza flag-ul, ca sa nu mai reintre in intrerupere fara motiv, practic dezactivezi intreruperea respectiva?

 

am mai avut tentative de a ma juca de-a programarea insa pana nu mi-a pus in program colegul bericioiu, Flowcode, nu s-a legat mai nimic...intuneric...

ei bine, noroc cu colegul Bericioiu, inca odata pe aceasta cale ii multumesc, a mai aprins un bec acolo...acum la mine e treaba cu mentinutul becului aprins mai intens sau mai putin intens.

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