Craciun Postat August 21, 2006 Partajează Postat August 21, 2006 Ma intereseaza principial posibilitatea stocarii si rularii a 2 programe independente intr-un PIC. Aceste programe se presupun gata facute si sa fie pornite si executate independent, in urma actionarii unor butoane. Mai pe scurt am un program de capacimetru si caut sa rulez separat un program de frecventmetru. Cum pot face cel mai usor ? Multumesc ! Daniel Link spre comentariu
Vizitator DragosP Postat August 21, 2006 Partajează Postat August 21, 2006 Cum pot face cel mai usor ? Multumesc ! DanielVrei să ruleze independent în acelaşi timp? :rolleyes: Adică multitasking, sau independent: odată unul altă dată altul?1. Multitasking: trebuie să "jonglezi" cu resursele interne hardware ale mc-ului. Destul de greu, dar se poate...2. Odată unul alteori altul: o intrare de selecţie (masă capacimetru, plus frecvenţmetru, de ex). Sau, configurare pe serială.La reset, faci ceva gen bootstrap unde citeşti intrarea (digitală sau serială) şi rulezi secvenţa de cod corespunzătoare. Aşa, practic o să ai 2+1 programe. :yawinkle: Link spre comentariu
Craciun Postat August 21, 2006 Autor Partajează Postat August 21, 2006 Vreau sa ruleze cand unul cand celalalt, nu simultan. Deci inteleg ca ar trebui un al treilea program de decizie (care zice care din cele 2 sa ruleze) , dar cum fac ca sa stochez astea 3 programe in PIC, fara sa se suprapuna? Adica voi avea 3 hexuri sau cum ? Link spre comentariu
sifor Postat August 21, 2006 Partajează Postat August 21, 2006 Nu merge asa. Trebuie sa ai sursele la cele 2 programe si sa faci modificarile necesare pentru a rula un program sau altul la apasarea sau nu, a unui buton. Nu poti utiliza nici macar alternativ, 2 programe care au fost compilate pentru a rula de la adresa 0000h a memoriei.Deci daca ai numai hexurile, uita de treaba asta !Don Mario Link spre comentariu
vsurducan Postat August 21, 2006 Partajează Postat August 21, 2006 Vreau sa ruleze cand unul cand celalalt, nu simultan. Deci inteleg ca ar trebui un al treilea program de decizie (care zice care din cele 2 sa ruleze) , dar cum fac ca sa stochez astea 3 programe in PIC, fara sa se suprapuna? Adica voi avea 3 hexuri sau cum ? Fila *.hex este rezultatul procesului de compilare a unei file *.asm (generate de asamblor) sau rezultatul unei compilari cu un compilator de nivel inalt (C, pascal, basic, forth etc). Fila *.hex este un tot unitar care tine cont de hardware in mod intim.Pentru a inscrie trei file *.hex in mod *succesiv* intr-un PIC exista metoda clasic a programarii ICSP sau a bootloaderului (initial se incarca un program de boot care este tot o fila *.hex cu ajutorul unui programator ICSP dupa care pe interfata seriala se incarca programul utilizator ori de cate ori este necesar utilizand un software de comunicatie pe PC)Schimband programul utilizator se poate schimba functionalitatea aparatului continand microcontrolerul (cu conditia ca filele *.hex sa fie rezultatul unei compilari a unui program sursa corect, scris in concordanta cu schema hardware.Este putin probabil sa reusiti sa faceti un capacimetru si un frecventmetru avand acces doar la filele *.hex. Uzual aveti nevoie de filele sursa unde sa operati modificarile necesare pentru a putea schimba functionalitatea ansamblului prin apasarea unui buton de exmplu.Apasand butonul o data, aparatul devine frecventmetru (semnalizare cu un LED bicolor rosu), apasand a doua oara butonul, aparatul devine capacimetru (semnalizare led verde) apasand a treia oara butonul, aparatul devine voltmetru (semnalizare rosu+verde).Daca nu aveti experienta necesara unei astfel de programari este mai simplu sa cautati pe web un "multimetru" cu PIC care contine de obicei cel putin functiile de frecventmetru si voltmetru (mai rar capacimetru)sau L/C metru + frecventmetru.Un exemplu in sprijinul afirmatiilor de mai sus:http://members.cox.net/berniekm/super.htmlhttp://www.qsl.net/la9sja/electronics/ea/cele bune,Vasile Link spre comentariu
Craciun Postat August 22, 2006 Autor Partajează Postat August 22, 2006 Bun, daca utilizez bootloaderul si am si sursele la cele 2 programe , cum fac ca nu vreau sa le incarce de pe calculator pe seriala as vrea ca aparatul sa fie "stand alone". Deci mai concret : pot stoca cele 2 programe in portiuni separate din memoria program a PIC-ului si apoi prin intermediul bootloaderului sa dictez ca sa ruleze unul sau celalalt? Sau totul se va reduce la un singur program cu 2 ramuri decizionale? Link spre comentariu
lucicop Postat August 22, 2006 Partajează Postat August 22, 2006 Dupa umila mea parere: te complici daca vrei sa faci 2 programe separate. Poti face in felul urmator:Stochezi tipul deviceului la o adresa in EEPROMProgramul porneste si in functie de tip, apeleaza o anumita functie (sau sare la o anumita adresa, daca scrii codul tau in ASM)La o apasare de buton, care schimba tipul deviceului, salvezi corespunzator tipul in EEPROM si restartezi softul. Link spre comentariu
sofian Postat August 22, 2006 Partajează Postat August 22, 2006 daca ai sursele programelor merge faci asa compilezi primul program la adresa 0x0100al doilea unde se termina primulsi faci um program mic la adresa 0x0000 care teseteaza un buton sau pinsi in functie de el pleaca primul sau al doilea programdaca are intreruperi este putin mai delicat dar merge Link spre comentariu
lucicop Postat August 22, 2006 Partajează Postat August 22, 2006 Dar programul mic care testeaza pinul nu va rula decat la inceput, apoi vor rula celelalte. Ce zici tu, inseamna multitasking. De ce atata complicare ? Daca ai sursele, le compilezi cum vrei tu. Link spre comentariu
Craciun Postat August 22, 2006 Autor Partajează Postat August 22, 2006 Merci @sofian , si cum fac sa compilez programele zicandu-le sa inceapa de la adresele specificate (ca in Mplab n-am folosit pana acum decat "quick building" la compilare si ala nu imi lasa loc de intors)? Link spre comentariu
sofian Postat August 22, 2006 Partajează Postat August 22, 2006 deci in fiecare program asm este directiva org 0x0000 care ii spune de unde incepe sa compileze, in alte programe nu stiu (C+,basic)deci atentie sa nu aiba org 0x0004 sau si mai rau sa nu fie specificata adresa asta explicit aici este adresa de intruperi a picului Link spre comentariu
Craciun Postat August 22, 2006 Autor Partajează Postat August 22, 2006 "Danke" :smt039 Am inteles , ma apuc de sapat. Dupa teste , va tin la curent. Link spre comentariu
vsurducan Postat August 22, 2006 Partajează Postat August 22, 2006 Dupa umila mea parere: te complici daca vrei sa faci 2 programe separate. Poti face in felul urmator:Stochezi tipul deviceului la o adresa in EEPROMProgramul porneste si in functie de tip, apeleaza o anumita functie (sau sare la o anumita adresa, daca scrii codul tau in ASM)La o apasare de buton, care schimba tipul deviceului, salvezi corespunzator tipul in EEPROM si restartezi softul.De acord, ar avea avantajul ca la oprirea alimentarii programul porneste cu ultima variabila memorata in eeprom (adica cu ultima functie utilizata de aparat).Utilizarea directivei ORG si "amestecarea" a doua surse separate poate crea o gramada de probleme. Prima este intreruperea, daca una din surse apeleaza intreruperea iar cealalta nu, mai sunt ceva sanse (mici).A doua este pagina de memorie (la PIC16) la care se poate ajunge prin cocatenarea a doua surse. Un salt intr-o pagina gresita duce tot programul in balarii. Probabil ca va fi nevoie de debugging...Asta este singurul motiv pentru care un compilator de nivel inalt te scuteste de batai de cap (comparativ cu asamblorul) si iti creaza alte batai de cap... ca de exemplu rescrierea intregului program daca nu-l ai 'de model' decat in asm.cele bune,Vasile Link spre comentariu
Craciun Postat Septembrie 24, 2006 Autor Partajează Postat Septembrie 24, 2006 Trebuie ca la inceput sa ii dau org 0 si apoi un go to intr-un mic programel, in fct de starea butonului sa sara la programul prinicipal, cel putin asa am inteles. Dar intreb "offtopic": daca compilez programul initial la o adresa superioara lui 0x100 sa zicem (fara bootloader), mai ruleaza programul sau trebuie neaparat de la 0 ? Link spre comentariu
Vizitator DragosP Postat Septembrie 24, 2006 Partajează Postat Septembrie 24, 2006 Hm, depinde. Depinde de: dacă foloseşti sau nu întreruperi (nu-ţi va merge în cazul ăsta); de ce însemnă în asm $FF pentru pic-uri... Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum