kit Postat Noiembrie 14, 2008 Partajează Postat Noiembrie 14, 2008 Incerc sa fac un termometru cu DS18S20 si PIC18f452. Am reusit sa scriu codul in ASM, merge brici, dar ma intereseaza sa-l scriu in C. Ma chinui de 1 saptamana si nu vrea si gata! Imi scapa ceva. Are cineva rabdare sa se uite peste cod? Mentionez ca rutinele de intrerupere le-am verificat pe osciloscop si par a fi bune... De asemenea, am folosit la greu rutinele oferite de MCC18. Concluzia-i ca m-am blocat si nu stiu cum s-o mai urnesc. Mizeria de cod atasat imi afiseaza -000,5 si in rest nu mai face absolut nimic. Multumesc anticipat.LE: cuartul este de 4MHz. Link spre comentariu
sofian Postat Noiembrie 14, 2008 Partajează Postat Noiembrie 14, 2008 pdf zice asa "Master applies strong pullup to DQ for the duration of the conversion (tCONV)" deci tu vad ca tot citesti DQ sa vezi daca a terminat conversia, dar atunci cum mai sa mai aiba curent necesar conversiei saracu de DS ? eu zic sa faci asa comanda CC si 44 asteapta tu (tCONV) si dupa aia citeste temperatura eu nu ma pricep bine la C dar "DQ_WaitConv" mi se pare ciudata void DQ_WaitConv(void){ DQ_TRIS=1; while(!DQ_PIN){ while(!DQ_PIN){;} Delay15us(); } DQ_PIN=1; DQ_TRIS=0;} Link spre comentariu
Vizitator Postat Noiembrie 14, 2008 Partajează Postat Noiembrie 14, 2008 Uita-te ce genereaza in ASM compilatorul de C.De ex. daca ai setate diferite optimizari compilatorul face pe desteptul si nu mai pune nop-uri sau altele care uneori incurca.Mai pot fi greseli de C pe care nu le observi dar iti sar in ochi daca te uiti la sursa generata in asamblare. Link spre comentariu
kit Postat Noiembrie 16, 2008 Autor Partajează Postat Noiembrie 16, 2008 mda.1. SofianDe fapt rutina aia face o dubla citire. Citeste o data si daca este ok iese din bucla interioara, ajunge in cea exterioara si mai face o data citirea. Asa, ca sa elimin o eventuala eroare.2. RoGeorge. Am facut "greseala" sa iau in considerare sfatul tau. M-am pleostit rau de tot dupa aia. Inca ma uit nauc la listingul din Disassembly si ma intreb daca nu cumva isi bate joc de mine. Are cineva idee cum se poate convinge compilatorul sa scoata toata mizeria si sa-mi lase doar chestiunile esentiale?As prefera sa scriu sub C programele, dar ce face compilatorul este total necontrolabil!exemplu:dq_temp|=0x80;este interpretata caBSF 0x80, 0x7, BANKEDeste corect, dar eu am vrut sa fac un OR!Intr-un topic mai vechi era recomandat asm pentru aplicatiile cu timing critic. Ca a mea. Cu toate astea nu pricep un lucru: de ce se gasesc exemple la aplicatia aceasta in C? Care se presupune ca merg. Care-i noima? Eu unul sunt total in ceata. Link spre comentariu
kit Postat Decembrie 3, 2008 Autor Partajează Postat Decembrie 3, 2008 voi reveni odata asupra rutinelor in C... pentru a nu lasa totusi thread-ul fara nici o solutie, atasez ASM-ul care imi rezolva problema. poate o sa ajute candva, cuiva. 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