Sari la conținut
ELFORUM - Forumul electronistilor

Lucreaza cineva cu FLOWCODE ?


bercioiu

Postări Recomandate

La serviciu il folosesc numai pentru mine (proiecte mici) mai mult pentru exercitiu. Am dezinstalat bitdefender si merge perfect , deci antivirusul se pare ca-l incetineste.

Link spre comentariu

Salut

 

Vreau sa folosesc 2 timere (tmr0 si tmr1) si am o mica problema.

Timerele sunt conditionate de un buton care ar trebui sa declansze intreruperile.

Tmr0 lucreaza cand apas butonul insa Tmr1 porneste inca de la inceputul programului.Este normal?

 

M-am uitat prrin datasheet si am gasit asta  

 

TMR1ON: Timer1 On bit

1 = Enables Timer1

0 = Stops Timer1

 

In conditie ar trebui sa pun un cod in care bitul 0 sa fie 1? ceva de genu  TMR1ON=1   iar la incput sa pun TMR1ON=0   ?

 

Sau altfel stau treburile?

Mai concret cum as putea ca din xsecunde in xsecunde sa afisez ceva.

Ma mai gandeam la o impartire cu x in care restul sa fie 0 si atunci sa afisez altceva.

 

Multumesc

Editat de bobinatorul
Link spre comentariu

Tmr-urile pornesc dinn momentul declararii lor... Trebuie sa folosesti macrourile lor pentru a le intrebuinta in functie de necesitatile tale.

Editat de bercioiu
Link spre comentariu

Am facut macrourile asa cum spui numai ca la macroul tmr1 se intampla balarii.Nu stiu ce tampenii am facut pe acolo

 

Am lasat balta ca oricum ma chinuiam de 2 zile si intre timp am mai citit matematica de clasa a 6-a :rade: si am facut analogia cu ajutorul functiei MOD.

secunde = variabila MOD xsecunde   si obtin intervalul .  In felul asta imi ajunge un singur timer.

Link spre comentariu
  • 1 lună mai târziu...

Sunt multe erori dar ...

1. incearca sa ai o uniformitate a codului. Foloseste-te cat mai putin de C-Code pentru a putea beneficia de mesaje clare cu privire la erori.

2. daca definesti o variabila care va contine valoarea returnata de un macro, apoi acea variabila trebuie sa fie locala si nu globala (exact acest gen amestec il faci in macroul read(): daca te uiti la sursa o sa vezi ca ai doua return-uri in acea functie/macro, care iti strica codul).

3. sunt mai multe erori printre care: variabila "altitude" o definesti ca integer in interfata FC si apoi o definesti din nou ca float in C-CODE block. Macar de ii faceai un casting.

 

Log-ul de la compilare cu XC8, dar fii sigur ca sunt mai multe probleme:

bmp180(6).c:    85:	 MX_UINT8 6;	          ^ (285) no identifier in declaration	          ^ (314) ";" expectedbmp180(6).c: FCM_calculation()  1255:	6 = 1;	     ^ (202) only lvalues can be assigned to or modified  1293:	if( FCV_B7 < 0x80000000)	                       ^ (355) implicit signed to unsigned conversion (warning)  1307:	float FCV_ALTITUDE=44330*(1.0-pow(FLC_PRS/101325,0.19029));	                                  ^ (192) undefined identifier "FLC_PRS"(908) exit status = 1(908) exit status = 1C:Program Files (x86)Microchipxc8v1.38binxc8.exe reported error code 1FINISHED
Link spre comentariu

Am scris programul din nou, mai ordonat si fara sa ma folosesc de C code. Asa cum l-am scris acum, compileaza cu succes. Insa imi lipseste o bucata de calcul presiune, pe care nu stiu cum sa o scriu in fereastra de calculare. Daca o bag in program cu C code nu compileaza, da eroare generala.

Copy pastre din CFCV_B7 = (unsigned long)(FCV_UP - FCV_B3)* (50000>>1);if( FCV_B7 < 0x80000000)     {FCV_P = (FCV_B7 * 2) / FCV_B4;}     else     {FCV_P = (FCV_B7 / FCV_B4) * 2;}

 

Nu inteleg de ce (unsigned long).Eeste tipul de variabila, de ce este specificat asa?

pentru  If si else, pot folosi o decizie?

Editat de mikella
Link spre comentariu

Atunci cand folosesti UNSIGNED LONG intre paranteze in fata unei variabile inseamna ca desi tipul acelei variabile poate fi altul decat LONG (de ex INT), totusi acea variabila va fi convertita si stocata ca un LONG (adica intr-o zona de memorie cu dimensiunea unui tip LONG; pentru PIC 8bit inseamna ca variabila va fi stocata pe 32bit). Se numeste "type casting".

 

Aceasta se face atunci cand in stanga egalului este o variabila tip LONG, adica in cazul tau FCV_B7 este de tip LONG, si vrei ca rezultatul operatiilor din dreapta egalului sa se stocheze ca si un LONG pentru ca dupa finalizarea operatiilor din dreapta egalului sa se poata muta continutul in variabila FCV_B7 (care are tipul LONG) fara a se pierde informatie in proces.

 

Da, in loc de  if ... else poti folosi un block de decizie din FlowCode.

Editat de mars01
Link spre comentariu

Expresia acea o lasi in blocul C-CODE. Nu cred ca se poate face type casting la nivel grafic.

 

Dar o poti scrie mai simplu asa:

FCV_B7 = (unsigned long)(FCV_UP - FCV_B3)* 25000uL

pentru ca

50000>>1 este totuna cu 50000/2 adica 25000

LE: Pe de alta parte, daca te asiguri ca tipurile variabilelor B7, UP si B3 sunt unsigned long in modul grafic atunci ai putea sa renunti la type casting si sa scrii in blocul de Calcul:

B7 = (UP - B3) * 25000
Editat de mars01
Link spre comentariu

Se pare ca ma depaseste problema. Citeste corect temperatura insa la presiune numai balarii. Nu stiu daca citesc corect adresele cu valoarea presiuni. Calculele sunt exact ca in foaia de catalog. Atasez programul poate are cineva timp sa arunce un ochi peste el, in caz ca am vre-o greseala. Si inca o treaba, acelasi program scris in fc5 incape intr-un 16f788 iar daca il scriu in fc6 nu mai incape. Ce face diferit 6le ca nu mai incape.

bmp180.zip

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