Sari la conținut
ELFORUM - Forumul electronistilor

Lucreaza cineva cu FLOWCODE ?


bercioiu

Postări Recomandate

Cum pot afisa ca in linkul atasat? Stiu cum sa creez caracterul bucata cu bucata si apoi sa in scriu in ramul lcd. Daca ar fi sa afisez doar un numar fix pe lcd ma descurc, folosind comenzile print "ascii" si "cursor" problema este ca eu vreau sa afisez valoarea unei variabile cu fontul ca in link. Va rog daca poate cineva sa ma indrume cu o ideie de pornire macar.

  https://www.google.com.cy/search?q=16x2+lcd+large+font&sa=X&biw=1301&bih=641&tbm=isch&tbo=u&source=univ&ved=0ahUKEwj8o6_gtKLLAhWHj3IKHU2_AX4QsAQIIw#imgrc=VyNnEXvyQYsLSM%3A

Link spre comentariu

Unele afisoare ofera posibilitatea de a defini caractere personalizate. Ce vezi in linkul pe care l-ai postat sunt probabil astfel de caractere.

Link spre comentariu

Exact, iar un caracter mare este format din mai multe caractere mai mici. Cum ar fi segmentele de la un afisaj cu 7 segmente, si le combini pentru a forma un întreg. Da cum sa combin aceste bucati pentru a le folosi ca unul singur?

Link spre comentariu

Habar n-am de FlowCode dar , în principiu, memoria RAM-CG  a LCD-ului fiind limitată, reții acolo doar caracterele primare ( 8*5) pe care ți le-ai definit și apoi scrii cîte un macro sau funcție sau ce-o fi pentru fiecare caracter mare . 

Exemplu : O mare - Scrie 1,1 ( colt_stanga_sus, linie_sus, colt_dreapta_sus) ; Scrie 2,1 ( colt_stanga_jos,linie_jos,colt_dreapta_jos) denumirile din paranteze referindu-se la caracterele pe care ți le-ai definit . 

 

E doar o idee, nu știu dacă merge ! 

Link spre comentariu

Cam asa ar trebui sa fie. Dar cum asociez toate comenzile alea cu o cifra. Adica daca valoarea variabilei este 1 cum afisez acel 1. Plus ca valoarea afisata se schimba mereu. Sa scriu un macro pentru fiecare cifra?

Link spre comentariu

@mikella, pentru inspiratie ai un exemplu de scriere pe LCD cu font custom.

Eu am definit doar cifrele zero,unu si doi, ramane sa le definesti tu pe restul.

Mai ai de facut o functie care sa detemine caracterele care trebuie afisate si pozitia lor pe display.

Variabila poz. o pasezi cu prefixul "FCV_" (ex:zero(FCV_POZITIE0) neaparat scrise cu litere mari, altfel ai eroare la compilare.

Functiile sunt definite in zona de cod suplimentar C, e mai putin de scris, scapi de multe macro si codul este mai usor de urmarit.

Dupa cum ai vazut, pe display se pot scrie doar patru caractere in acelasi timp.

Pentru primul caracter pozitia este 0, pentru al doilea este 8 s.a.m.d.Poti sa modifici functiile ca sa ai pozitii de la zero la patru.

CustomFont.rar

Link spre comentariu

Exact asta aveam nevoie! Sa iti dea Dumnezeu sanatate ca ti-ai facut timp sa ma ajuti. Completez eu mai departe restul de caractere. Daca mai am nelamuriri o sa revin, dar sper sa ma descurc si singur.

Link spre comentariu

Hai ca m-am impotmolit. Cum asociez variabila "pozitie0" cu numarul care il scriu pe lcd? Adica pozitie0=2 scrie 2, pozitie0=3 scrie3 ....si tot asa. Proiectul meu final ar fi un vitezometru care afiseaza doar doua cifre (10km/h de exemplu). Am reusit sa fac citirea senzorului si pot sa afisez cu font normal, dar nu se va vedea foarte bine din mers, de asta am nevoie de fontul mare.

Link spre comentariu

E simplu, o sa vezi in arhiva atasata cum se face afisarea valorii citite de pe  un canal analogic.E testat pe o placa de dezvoltare si caracterele arata mult mai bine ca in simulare.Inlocuieste variabila nr cu variabila ta.Daca nu te descurci, pune codul tau aici si ma ocup eu de partea de afisare.

BigFontE.rar

post-179738-0-91539900-1457117482_thumb.jpg

Editat de Elison
Link spre comentariu

Poate pare complicat, dar nu este chiar asa.

Exista functiile de tip void, care sunt facute sa printeze un caracter mare format din caracterele mici(8x5), definite la inceput si scrise in memoria RAM a LCD-ului prin intermediul functiei scrie_ram.

Functia de printare a unui caracter mare are si un parametru de tip char (poz) prin care i se transmite in ce pozitie trebuie sa inceapa scrierea caracterului pe display.

In partea de calcul se determina care sunt cifrele (denumite SEG0,SEG1,SEG2,SEG3) din care este formata variabila, la mine "nr", la tine turatie.

Cand se cunosc aceste cifre, se determina pozitia in care se va afisa fiecare cifra pe display.

Asta se face cu o instructiune switch, sunt patru  instructiuni pentru ca eu aveam de afisat patru caractere.

Tu ai nevoie doar de doua, spuneai ca variabila ta are doar doua caractere.

Eu am scris cea mai mare parte a codului in C, se putea face si altfel, de fapt intotdeauna exista mai multe cai de a rezolva o problema, poate eu nu am ales-o pe cea mai simpla si in mod sigur se mai poate simplifica mult, insa trebuie sa ai chef si timp pentru asta.

Mai exista pe acolo doua instructiuni if, una se uita daca variabila s-a modificat si doar atunci scrie caracterele pe display, iar cealalta nu afiseaza prima cifra daca este egala cu zero.

Probabil ca daca faceam programul asa cum se face de obicei in flowcode, il intelegeai mai usor, dar sunt convins ca o sa-l intelegi si asa.

Important este sa termini ce ai inceput si sa functioneze exact asa cum ti-ai dorit.

Daca o sa faci multe proiecte in flowcode, o sa reusesti sa scrii tot programul intr-un singur icon, se poate si arata bine, mult mai bine.

Multumesc pentru urari si iti doresc multa sanatate !

Editat de Elison
Link spre comentariu

In mare am inteles ce face fiecare functie. Am modificat putin fcf-ul pentru ce am eu nevoie. Asta este doar o schita, mai urmeaza sa adaug si doua intrari adc pentru citire nivel benzina si temperatura, plus calculele pentru citire viteza. Acum este construit ca un frecventmetru.Cu ce program deschid fisierul in care ai desenat caracterele?

Sanatate!

BigFontFinal.rar

Link spre comentariu

Asa cum este acum, programul tau sta intr-o bucla infinita.

Desi nu folosesti nicaieri timer 0, am vazul ca pe undeva il resetezi.

Maine o sa ma uit mai atent si daca am timp, o sa verific partea de afisare.

Cred ca mai intai ar fi bine de stiut cum o sa masori turatia,in ce gama, cum o sa implementezi asta in program.

Aici vad doar doar un flag care iti da secunda si bucla infinita.

Intrebarea ta probabil ca se refera la fisierele care au extensia .dsn, acestea se deschid cu Proteus si sunt create cu versiunea 7.4.

Link spre comentariu

Bucla se executa doar când flag=0. Acolo trebuia sa resetez timer2, am uitat sa modific la loc. In simulare in proteus merge softul. Daca injectez semnal pa A0 măsoară frecventa corect.

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