Liviu M Postat Octombrie 22, 2012 Partajează Postat Octombrie 22, 2012 Nu am zis ca merge cu 18Dh Daca introduc in programul care i-mi calculeaza intarzierea, 18Dh, i-mi da ce doresc.Cum zici tu... Link spre comentariu
nico_2010 Postat Octombrie 22, 2012 Partajează Postat Octombrie 22, 2012 MOdifica in cblock definirea lui rtdset. Il pui primul si il declari rtdset:2. Asta inseamna ca vei aloca 2 bytes pentru aceasta variabila. Cred ca va merge asa. Link spre comentariu
Ashky Postat Octombrie 22, 2012 Partajează Postat Octombrie 22, 2012 Nu va merge.Registrul W tot pe 8 biti ramane.Nu am incercat sa inteleg ce face codul ala, dar am inteles ca din tabelul ala se citesc niste valori ptr un delay.Eu as incerca modificarea rutinei de delay in asa fel incat sa nu fie nevoie de valori mai mari de 255, daca precizia ar fi suficienta.Sau un timer.Un link catre proiect nu ar fi rau, sa vedem si noi despre ce e vorba. Link spre comentariu
MatyC Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 @Ashky: sunt curios ce program ai folosit pentru a calcula aceste valori necesare intarzierilor dorite??? Ca eu nu inteleg de ce ai obtinut valori ce depasesc limita de 2^8 cat poate gestiona un registru pe 8 biti. Link spre comentariu
Liviu M Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 Era Ata nu Ashky, iar daca te uiti in fisierul atasat pe prima pagina o sa vezi ca o unitate a numerelor alora returnate din map *) "dureaza" ~0,1 ms. Asa ca pentru 39 ms are nevoie de 390. Nu am zis ca merge cu 18Dh, si nici nu este tot una cu 8DhN-ai zis, da' in cazul asta chiar este. Atata timp cat asamblorul retine si lucreaza numai cu 8 biti (cel putin asa zice el in warning), inseamna ca pe al 9-lea (0x100) il arunca. Asa ca desi tu ii spui sa foloseasca 0x18D, el foloseste numai 0x8D. De-aia ziceam, incearca cu 0x8D si ai sa vezi ca obtii aceleasi rezultate ca si cu 0x18D. Daca am dreptate, atunci te poti juca cu valori in jurul lui 0x8D sa vezi daca obtii ce-ti trebuie. Sper ca acum am fost mai clar. *) ca intreba cineva mai devreme - din numele variabilelor mie mi se pare ca seamana a harti de control de aprindere la motoare. Link spre comentariu
Vizitator Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 E pe lângă subiect, dar Grammar Nazi ar spune următoarele: Cuvântul "îmi" se scrie întotdeauna legat, niciodată "î-mi". Exemple: - "Îmi trebuie", "îmi dă", "îmi merge" şi tot aşa, se scriu fără liniuţă. - "Vreau să-mi meargă", se scrie cu liniuţă, pentru că vine de la "Vreau să îmi meargă", dar lipseşte litera "î". Spor la programat! Link spre comentariu
Ata Postat Octombrie 23, 2012 Autor Partajează Postat Octombrie 23, 2012 Da, este un soft pentru aprindere cu avans variabil si depasesc 255 pentru ca am nevoie de extra avans, adica semnalul sa se dea (cam asa ar fi) inainte de a fi primit, deci cu o intarziere sub 360 grade. de aceea ajung la acele valori, 18Dh. 8d, nu imi(imi,imi,imi) da intarzierea de care am nevoie, 39.7mS. http://www.transmic.net/en/home.htm Softul merge bine, dar cu date pana in 255, aprinderea este construita. Dar pentru alt motor imi trebuie cu datele de care zic. Link spre comentariu
10vid Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 Dar de ce nu muti pur si simplu senzorul mai in spate, daca vrei avans mai mare, astfel ca si valorile noi introduse sa incapa peste 0 si sa nu intre in minus? Link spre comentariu
Ata Postat Octombrie 23, 2012 Autor Partajează Postat Octombrie 23, 2012 Nu am cum sa il mut. Este un motor Suzuki si il are in interior. Eu ma gandisem sa decalez pozitia volantei. Acum calculam ce grade de avans imi trebuiesc si cu ce unghi sa o decalez. Link spre comentariu
Vizitator Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 Se zice că cel care nu ştie (în cazul de faţă eu), se repede să dea sfaturi, pentru că discuţia i se pare interesantă, iar cel ce ştie nu se bagă, pentru că subiectul discutat nu prezintă interes (el ştie deja). Aşa că iată-mă-s dându-mi cu părerea. N-am scris un rând în asamblare pentru PIC-uri, pentru alte tipuri de procesoare, am mai scris câte ceva. Eu înţeleg din fişierul ".txt" ataşat, cam aşa: Se face o adresare indexată şi, în funcţie de întârzierea dorită, subrutina de temporizare întoarce o constantă, constantă care probabil va fi apoi decrementată sau incrementată într-o buclă - asta n-am mai urmărit, dar aşa ar fi normal să fie - cu scopul obţinerii unei anumite temporizari. Acum, pentru 39.7mS, trebuie să începi să numeri de la 0 toate instrucţiunile de tip retlw care urmează după addwf PCL,1 ; add W + PCL, până ajungi în dreptul celei la care scrie la comentarii 39.7mS (comentariu = tot ce e scris pe acelaşi rând, dar e după semnul punct şi virgulă). În cazul nostru este a 49-a instrucţiune după addwf PCL,1. Deci, după mine, ar trebui modificat şi în loc de map org h'200' addwf PCL,1 ; add W + PCL să se scrie map org h'200' addwf PCL,49 ; add W + PCLSintaxa exactă pentru cifra 49 nu o ştiu, dar am vrut să adun 49 în zecimal, NU în hexazecimal (o fi cu punct în faţă sau altfel, habar n-am). Dacă cei de la Microchip au respectat regulile de bun simţ din programare, atunci ar trebui să se scrie doar 49, fără nimic altceva. Am observat că mai e o buclă la adresa 0x300, unde scrie map2 org h'300' addwf PCL,1La fel şi acolo, în loc de cifra 1, ar trebui pus numărul instrucţiunii care corespunde cu temporizarea dorită. Nu mi-am bătut capul cu ce face fiecare buclă şi de ce sunt două. Ce vreau să subliniez este că nu se pune nicăieri "18Dh". În loc de "1" din "addwf PCL,1" se pune a câta instrucţiune conţine constanta dorită. Link spre comentariu
Ata Postat Octombrie 23, 2012 Autor Partajează Postat Octombrie 23, 2012 Multumesc George, studiez maine ca ma doare capul de atatea incercari si calcule.si te tin la curent.Noapte buna.Nu merge nici cu schimbarea volantei, tot ajung la valoarea de 397. Link spre comentariu
10vid Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 Dacă cei de la Microchip au respectat regulile de bun simţ din programare, atunci ar trebui să se scrie doar 49, fără nimic altceva.Cum s-a mai precizat la inceputul treadului, in functie de ce RADIX ai selectat ca default, cifrele aferente acelui radix le poti scrie goale.Cat despre functionarea programului, n-ai inteles pe deplin, acel tabel e avansul functie de RPM-ul calculat, nicidecum un tabel de transformare al avansului (de ex. avans log functie de avans lin. etc.).Am modificat acel txt, am dublat unitatea de timp a retardului dat de tabel.asm.txt Link spre comentariu
Vizitator Postat Octombrie 23, 2012 Partajează Postat Octombrie 23, 2012 Vorbim mâine. Uită te rog ce am scris referitor la modificarea fişierului txt, pentru că m-ai păcălit, nu ai spus toată povestea... Între timp, m-am uitat peste setul de instrucţiuni de la PIC şi am ajuns la concluzia că ce vrei tu, nu se poate. Numărul maxim care poate fi scris într-o instrucţiune RETLW k este cuprins între 0 şi 255 zecimal (adică e pe 8 biţi). Tu vrei să bagi în 8 biţi numărul 0x18D (adică 397). Asta nu se poate oricum l-ai scrie, pentru că 397 este mai mare decât 255. Pur şi simplu, nu încape. Am impresia că fişierul pe care l-ai ataşat: viewtopic.php?p=1126734#p1126734 nu este al autorului, e modificat de altcineva, aşa e? Nu am parcurs chiar tot articolul, dar răspunsul la întrebarea ta este ferm. Ce vrei tu, nu se poate. 397 e mai mare decât 255. Nu vei putea asambla niciodată instrucţiunea RETLW 397, indiferent cum o scrii. De fapt, ce vrei să faci/obţii? Adică, de ce vrei să modifici curba originală? Pune te rog şi un link către fişierul autorului în versiunea originală, fără modificări. Link spre comentariu
Ashky Postat Octombrie 24, 2012 Partajează Postat Octombrie 24, 2012 .....Ce vreau să subliniez este că nu se pune nicăieri "18Dh". În loc de "1" din "addwf PCL,1" se pune a câta instrucţiune conţine constanta dorită.Eu sintaxa asta o interpretez asa:registrul W se aduna cu registrul PCL iar rezultatul se pune in PCL.Din cate stiu eu 1 inseamna ca rezultatul operatiei se pune in f. Link spre comentariu
Vizitator Postat Octombrie 24, 2012 Partajează Postat Octombrie 24, 2012 Aseară aveam limbariţă, n-ar fi trebuit să încep să-mi dau cu părerea în necunoştinţă de cauză.De obicei nu fac aşa, dar de data asta am comis-o. Totuşi, am precizat încă de la primele cuvinte şi repet: nu ştiu asamblare pentru PIC, toate presupunerile au fost făcute după ureche, deci vă rog ignoraţi ce am scris. Probabil că am spus acolo numai tâmpenii , nu vă bateţi capul cu ele. 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