Sari la conținut
ELFORUM - Forumul electronistilor

2 programe diferite intr-un PIC


Craciun

Postări Recomandate

Daca cineva are un mic exemplu de astfel de functionare as ruga sa il posteze, caci discutiile la modul general sunt utile, dar foarte mancatoare de timp. @lucicop, daca poti detalia un pic solutia propusa de tine, eventual tot printr-un mic exemplu, merci.

Link spre comentariu
  • 2 săptămâni mai târziu...
  • Răspunsuri 23
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Craciun

    9

  • one

    4

  • lucicop

    4

  • vsurducan

    2

Top autori în acest subiect

Salutare !

 

Revin cu starea proiectului:

 

Realizat -> Capacimetru 1-65XXX uF cu 16F876 +LCD

 

Simulare cu rezultat pozitiv a frecventmetrului cu PIC16F84+LCD (cu toate ca da mesaj la recompilarea de pe 16C54 pe 16F84 , in legatura cu pozitia pe bank0 ...., dar face cu succes recompilarea ).

 

In lucru: - > 1 Modificare soft frecventmetru, ca sa ruleze cu 16F876 (am incercat doar modificand declaratiile de procesor din 16F84 in 16F 876 in .asm, dar imi da eroare la compilare cu Mplab si nu genereaza hex-ul).

->2 Dupa eventuala recompilare cu succes cu 16F876, voi incerca modificarea schemei proiectului astfel incat frecventmetrul sa utilizeze alta intrare A/D decat capacimetrul (care e pe RA0) astfel incat sa simplific atat schema cat si softul in final.

 

-> 3 Incerc sa gasesc o solutie sa integrez si un L-metru ( evident pe alta intrare A/D) daca gasesc un .asm cat de cat de sine statator si inteligibil.

 

-> 4 Creearea unui mic program care sa ruleze ca "watchdog" permanent si sa cedeze / sa preia controlul celor 3 programe mai sus amintite in functie de comenzile primite pe 3 intrari de control .

 

Orice sprijin pentru evolutia proiectului este bine venit , cu rugamintea de a prezenta si o bucata de pseudocod (mai ales ptr "watchdog") astfel incat sa pot crea cat mai simplu programul respectiv ( de preferinta in compilatorul de Basic din Oshon IDE, care e full ), sau mikropascal (pana la 2k, fiind demo).

 

 

Multumesc tuturor !

Toate cele bune !

 

Daniel , Ploiesti

Link spre comentariu

Plasezi fiecare program la o anumita adresa (cu org 0xXX). Prima data ruleaza programelul care citeste o valoare din EEPROM, care ii spune ce program sa porneasca. In functie de valoarea din eeprom, bagi un goto 0xXX unde iti ruleaza programul tau.

Link spre comentariu

Imi vine sa rad pentru ce problema s-a pus aici.

Cel mai competent raspuns l-a dat, dupa parerea mea vsurducan.

 

Incerc sa completez:

 

1.Un program este alcatuit din mai multe proceduri sau functii, astfel spus "subprograme", adica orice program poate fi integrat intr-un program mai mare si orice program mare se compune din functii care pot fi reutilizate la alte programe.

 

De exemplu, am un program care face adunarea si altul care face scaderea. Fac ca fiecare din acest program sa fie o functie si apelez functia adunare cand am nevoie de adunare si functia de scadere cand am nevoie de scadere.

Fac functia "capacimetru" de exemplu si functia "voltmetru". Daca butonul este apasat, atunci executa "voltmetru", altfel "capacimetru".

 

 

2.Daca exista codul sursa pentru fiecare program, trebuie creat un nou program, "mare", care sa le includa pe cele 2 si care sa aiba o functie de selectie a zonei de program executata. Altfel, daca exista numai executabilul, nu se pot integra cele 2, caci ar trebui sa existe un mic "sistem de operare" care sa le gestioneze.

 

 

3.Pentru a rula simultan 2 programe, trebuie un timer, nu watchdog. Acesta din urma a fost gandit pentru cu totul altceva, si anume pentru a evita blocarea rularii programului intr-o bucla de exemplu.

Diferenta intre cele 2 este ca timerul poate fi controlat mai bine, se pot seta intreruperi si la aceste intreruperi se ruleaza anumite subrutine ale programului, in timp ce la watchdog in general se reseteaza controllerul. Acesta nici nu este foarte precis si nu se poate controla decat intr-o anumita masura.

Link spre comentariu

Cred ca nu ai inteles problema. Din cate am inteles eu, programele nu trebuie rulate simultan, ci alternativ, in functie de functia selectata. Si nu ai nevoie nici de timer, nici de watchdog.O alta corectare: si watchdogul foloseste tot o sursa de timer, deci in esenta e tot un timer, care la expirare, daca e activat, reseteaza controllerul sau il trezeste din sleep.

Link spre comentariu

Salutare ! Rasul face bine la riduri si este antistress , dar cred ca nu e cazul. Programul de control pe care eu l-am numit "watchdog" am vrut sa insemne programul "monitor", existent in calculator (parte a S.O.). Ipoteza proiectului meu e asa cum a inteles-o si @lucicop adica : Un PIC 16F876 + LCD 2x20 alfanumeric. 2 intrari separate A/D + 1 tip intrare digitala ptr.frecventmetru, de pe care se preiau semnalele generate pe intrarile aparatului de marimile ce trebuiesc masurate pe rand , bineinteles cu conversie HW, marime-> tensiune cc (0-1023 praguri ptr 16F876 la Vdd=5V ) pe intrarea A/D respectiva. Programul monitor va dicta mereu ce se executa pe PIC. Celelalte programe dedicate ( ptr. capacimetru , ptr. frecvenmetru si ptr. L-metru ) vor fi independente unele de altele iar decizia care din ele sa ruleze la un moment dat o va lua "programul monitor" in functie de unul din cele 3 butoane ce vor schimba starea pe 3 intrari separate ( de ex. RC0-RC3) , cate una ptr fiecare functie pe care vreau sa o indeplineasca aparatul la un moment dat. In concluzie ptr. dl. @one : nu ma intereseaza un singur program cap coada ptr. acest aparat, ci vreu sa " storc " avantajele PIC-ului la maxim folosind si adaptand programe functionale deja existente. Am inteles ce spune dl. vsurducan , dar fiecare cu solutia pe care o agreeaza mai mult. Eu asa vreau sa fac . Daca iese bine daca nu o sa-mi storc fff. mult neuronii sa concep de la zero un singur soft ptr. toate functiile pe care vreau sa le indeplineasca. (mai ales ca nu am un compilator f. bun cu toate calitatile necesare) PS: Ma gandesc sa cumpar versiune full a lui mikropascal dar bugetul anul asta e strans din cauze de cheltuili cu educatia. Cu bine ! Daniel, Ploiesti

Link spre comentariu

Cred ca nu ai inteles problema. Din cate am inteles eu, programele nu trebuie rulate simultan, ci alternativ

Am inteles problema, dar s-a discutat si despre rularea simultana.La punctul 1 al raspunsului meu zic ca se subintelege ca 2 functii nu pot rula simultan.Oricum rularea "simultana" a 2 sau mai multe programe inseamna de fapt tot o comutare intre acestea.

O alta corectare: si watchdogul foloseste tot o sursa de timer, deci in esenta e tot un timer, care la expirare, daca e activat, reseteaza controllerul sau il trezeste din sleep.

Degeaba foloseste "o sursa de timer", daca efectul este resetarea. Nu prin resetare trebuie controlat un program.Sa reformulez pe scurt raspunsul anterior:Se creaza functii pentru ficare destinatie a aparatului: voltmetru, frecventmetru, capacimetru, etc. pot fi si 100 functii.Se apeleaza functia corespunzatoare. Dispozitivul cu microcontroller poate fi folosit pentru masurarea unei singure marimi sau a mai multora, in acelasi timp.Daca face sa zicem 10masuratori pe secunda, pentru unii, acest lucru se poate numi "simultan", pentru altii "alternativ".
Link spre comentariu

Iata "pseodocodul":MAIN {citeste comutator de selectie daca e 1 atunci ruleaza FRECVENTMETRU; altfel ruleaza CAPACIMETRU; stop} FRECVENTMETRU { ...... program frecventmetru ..... return } CAPACIMETRU { ..... program capacimetru ...... return }

Link spre comentariu

Rularea "simultana":MAIN {ruleaza FRECVENTMETRU; ruleaza CAPACIMETRU; ruleaza MAIN} FRECVENTMETRU { citeste borna 1; afiseaza valoarea pe randul 1 al afisajului; return } CAPACIMETRU { citeste borna 2; afiseaza valoarea pe randul 2 al afisajului; return }

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