Liviu M Postat Noiembrie 12, 2012 Partajează Postat Noiembrie 12, 2012 Calcule matematice...Aha, OK. Proiectul are prea multe necunoscute pentru mine, asa ca n-are rost sa mai comentez. Mult succes. Link spre comentariu
Cilibiu Postat Noiembrie 12, 2012 Autor Partajează Postat Noiembrie 12, 2012 Daca te ajuta cu ceva voi posta tot codul bascom la cererea ta.Tinand cont ca , calculele matematice se referea strict la calculul vitezei nu a turatiei unde am eu problema. Link spre comentariu
Liviu M Postat Noiembrie 12, 2012 Partajează Postat Noiembrie 12, 2012 Nu cred ca ma ajuta. *) Cum ziceam, sunt prea multe lucruri pe care nu le stiu despre proiect (pomeneai mai devreme de un encoder, pana la urma nici nu stiu de unde si cum iei informatia despre turatie...).Cum nici la atmeluri nu ma pricep si nici basicul nu e limbajul la care ma pricep cel mai bine, chiar consider ca mai rau te incurc cu sugestiile/ideile mele.*) Da' cum pe forum sunt suficienti useri care stiu si atmelurile si bascomul mai bine ca mine, poate-i ajuta pe ei. Link spre comentariu
Cilibiu Postat Noiembrie 12, 2012 Autor Partajează Postat Noiembrie 12, 2012 OK, pana mai primesc ceva idei, eu mai experimentez un pic sa vad , poate poate ii dau de cap. Link spre comentariu
Cilibiu Postat Noiembrie 12, 2012 Autor Partajează Postat Noiembrie 12, 2012 Pana la urma a trebuit sa mut baza de timp la 600ms, dar am mutato doar la turatie, la viteza a ramas 100ms dar afisarea ambelor indici se face la 600ms. Deocamdata ramane asa pana imi vine alta idee. 'vitezaTimer2 = 0 'Reset counts Counter1 = 0 'viteza Counter3 = 0 'turometru Ovf0 = 0 'Reset overflows Ovf1 = 0 While Ovf0 < 6 '100ms @ 16 MHz nop Wend Disable Timer1 'Stop Timers Tempa = Ovf1 * 65536 'Calc frequency Viteza = Tempa + Counter1 Viteza = Viteza * 10 Viteza = Viteza / 814.4 'calcul encoder While Ovf0 < 36 '600ms @ 16 MHz nop Wend Disable Timer3 Disable Timer2 Tempa = Ovf1 * 65536 Turatie = Tempa + Counter3 Turatie = Turatie * 100 Link spre comentariu
stefan_k Postat Noiembrie 13, 2012 Partajează Postat Noiembrie 13, 2012 O idee care nu implica modificari majore in cod: nu mai face acel "while ... 6/36", ca sa nu mai ai pauze intre afisari; foloseste un "if" pentru a face ce faceai cu while-ul, ceva in genul asta (pornind de la codul de acum cateva pagini - pare mai complet): 'inafara buclei: enable pe timer, si lasa-i in pace, nu mai da disable pe eiConfig Timer0 = Timer , Prescale = 1024 'Loop TimerConfig Timer1 = Counter , Edge = Rising 'Frequency CounterConfig Timer2 = Timer , Prescale = 1024 'Loop TimerConfig Timer3 = Counter , Edge = Rising 'Frequency CounterEnable Interrupts Enable Timer2 'Timer interruptOn Timer2 Incr_ovf0 'Overflow RoutineEnable Timer1 'Counter interrruptOn Timer1 Incr_ovfldo' in bucla principala: in functie de timpul scurs, calculeaza rpmif Ovf0 >= 36 then ' s-au scurs 600ms, dar nu a asteptat nimeni dupa ele' calcule - cum vrei tu Tempa = Ovf1 * 65536 'Calc frequency Viteza = Tempa + Counter1 Turatie = Tempa + Counter3 Viteza = Viteza * 10 Viteza = Viteza / 814.4 'calcul encoder Turatie = Turatie * 100' resetare contoare - astea e bine sa le resetezi ultimele, pentru a nu avea incrementari inutile in timp ce se fac calculele Timer2 = 0 'Reset counts Counter1 = 0 'viteza Counter3 = 0 'turometru Ovf0 = 0 'Reset overflows Ovf1 = 0end if' aici poti afisa Viteza si Turatie, le ai calculate corect si actualizate odata la 600msLcdText....' tot aici cred ca vei afisa si restul de senzoriloopendIncr_ovfl: Incr Ovf1 ReturnIncr_ovf0: Incr Ovf0 Return Daca ai emotii ca Ovf1 va contoriza mai mult decat trebuie (sincer, nu cred, dar trebuie experimentat) poti recalcula turatia folosind exact timpul scurs, ceva in genul: in loc de: Turatie = Turatie * 100 calcul corect: Turatie = Turatie * (3600/Ovf01) (aici poate ar fi bine sa folosesti double, pentru un calcul mai corect) Dar nu sunt 100% convins ca e nevoie de acest calcul "mai corect". Link spre comentariu
stefan_k Postat Noiembrie 13, 2012 Partajează Postat Noiembrie 13, 2012 Corectii: Daca ai emotii ca Ovf0 va contoriza mai mult decat trebuie (sincer, nu cred, dar trebuie experimentat) poti recalcula turatia folosind exact timpul scurs, ceva in genul:in loc de: Turatie = Turatie * 100calcul corect: Turatie = Turatie * (3600/Ovf0) (aici poate ar fi bine sa folosesti double, pentru un calcul mai corect)Dar nu sunt 100% convins ca e nevoie de acest calcul "mai corect".In fine, sper sa se inteleaga ce am vrut sa zic. Link spre comentariu
Cilibiu Postat Noiembrie 13, 2012 Autor Partajează Postat Noiembrie 13, 2012 Corectii: Daca ai emotii ca Ovf0 va contoriza mai mult decat trebuie (sincer, nu cred, dar trebuie experimentat) poti recalcula turatia folosind exact timpul scurs, ceva in genul:in loc de: Turatie = Turatie * 100calcul corect: Turatie = Turatie * (3600/Ovf0) (aici poate ar fi bine sa folosesti double, pentru un calcul mai corect)Dar nu sunt 100% convins ca e nevoie de acest calcul "mai corect".In fine, sper sa se inteleaga ce am vrut sa zic.Nu prea am inteles asta.......Intradevar ai dreptate cu IF si END IF, chiar uitasem complect de el , totusi ma bazasem pe codul care il extrasesem dintru cond pentru frecventiometru, cu cateva modificari, o sal incerc astazi sa vad cum lucreaza. NU am problema la afisare, gen CLS sau altceva, se rescrie portiunea respectiva de pe display, se vede din cod ca nu am CLS, doar cand ies din LOOP. Ma gandesc ca restul este afisat instant inafar de turatie si viteza, dar viteza si turatia tot o data la 600ms va fi actualizata, eu vroiam o actualizare in 100 in 100 ms. Daca nu se poate ramane asa, deocamdata nu mai am alte idei. Link spre comentariu
stefan_k Postat Noiembrie 13, 2012 Partajează Postat Noiembrie 13, 2012 Daca nu ai probleme de afisare, atunci ideea cu if/then in loc de while nu te ajuta cu mult (e o optimizare, intr-adevar, dar probabil nu ti-e "musai" desi ar fi binevenita).Daca e sa reiau, am inteles ca pe tine te deranjeaza ca turatia nu e afisata "instant". Adica turezi motorul, dar abia dupa jumatate de secunda (600ms) vei vedea rezultatul pe ecran. Iar acest lucru te deranjeaza. Din pacate, pentru a calcula (numara) corect turatia, chiar e nevoie de timp lung - mai ales ca e "turatii pe MINUT". Cu cat te intereseaza ca turatia sa aiba o rezolutie mai mare, cu atat e necesar ca intervalul de esantionare sa fie mai lung. Turometrele analogice functioneaza pe alt principiu, cele digitale ... e ca digitalul, poate fi lent.Doua idei imi vin in cap:1. pornind de la ideea de if/then, poti calcula turatia in doua momente: prima data, la fiecare 100ms (pentru variatii rapide), si, tot in bucla principala, calculezi si odata la fiecare 600ms (pentru detalii din 100 in 100 rpm). Compari cele doua valori: daca diferenta intre ele e mare, atunci afisezi valoarea calculata la 100ms (deoarece inseamna ca ai accelerat/decelerat brusc); daca diferenta dintre valori e mica, atunci o afisezi ce cea calculata la 600ms (fiindca e mai detaliata, mai aproape de adevar).2. alta varianta ar fi sa primesti in uC mai multe impulsuri la fiecare rotatie. Nu mai stiu ce encoder sau ce varianta hardware folosesti pentru turatii; dar daca ai posibilitatea, marind numarul de impulsuri pe rotatie (sa zicem de la 1 impuls pe rotatie la 6 impulsuri pe rotatie), atunci poti folosi o baza de timp mai scurta (100ms) si sa obtii in acelasi timp o rezolutie satisfacatoare. Asta ar fi varianta mai corecta, dar nu stiu daca e posibila dpdv hardware (nu stiu de unde iti vin impulsurile ) Link spre comentariu
Cilibiu Postat Noiembrie 13, 2012 Autor Partajează Postat Noiembrie 13, 2012 Impulsurile pentru turatie vin de la bobina de PICK UP care este amplasata in motor. Link spre comentariu
ratza Postat Noiembrie 14, 2012 Partajează Postat Noiembrie 14, 2012 Din pacate, pentru a calcula (numara) corect turatia, chiar e nevoie de timp lung - mai ales ca e "turatii pe MINUT".Nu neapărat. La 1000rpm, cu un singur cilindru ai avea un impuls la fiecare 60ms, deci ar fi OK. Problema apare din cauza timpului prea mare dintre două afişări. Ar trebui redus la 100ms. Nu ştiu cum faci citirea frecvenţei, pentru că sînt muci cînd e vorba de BASCOM. Eu aş folosi pinul de ICP pentru măsurat perioada impulsului, şi nu o o bază fixă de timp în care să număr cîte impulsuri apar. Ştiind perioada cu precizie, pot calcula pe urmă ce frecvenţă am. Link spre comentariu
Cilibiu Postat Noiembrie 14, 2012 Autor Partajează Postat Noiembrie 14, 2012 Mersi de indrumare. Link spre comentariu
Cilibiu Postat Aprilie 21, 2013 Autor Partajează Postat Aprilie 21, 2013 Salut tuturor. Dupa ceva timp indelungat a sosit vremea sa montez bordul cel nou pe moto, insa a aparut o problema, este mai gros cu 1cm, nu imi incape in locul fostului bord, problema sta in coltuire acestuia, mam gandit sa il dau jos ca sa modific un pic carcasa.Si daca tot il dau jos, mam gandit sa ii fac un UPGRADE, in tot acest timp de cand lam terminat pana in ziua de azi, mam tot gandit cum sa il fac ECO si mult mai SLIM, am multe idei in cap, dar in tot acest timp am ales tot ce este mai bun, asa ca am luat o decizie GREA pentru mine, sa modific un pic schema electrica a acestui bord, doar pe partea de alimentare, restul ramane intact, daca tot modific schema fac alt cablaj de la zero facut ca la carte "METODA FOTO", nu voi mai folosi adaptorul pentru ATMEGA si aici duce la subtierea bordului, structura externa va ramane identica, chiar si afisarea si locul indicelor de bord va ramane identic, doar schema electrica va suferi un pic.Ce imbunatatiri vreau sa aduc.Pentru alimentarea ATMEGA vreau sa folosesc un LM2940-5.0, care este un LDO si consuma extrem de putin, din cauza ca mai am 2 pini liberi la atmega , unul vreau sa il folosesc pentru a alimenta restul "bordului". Mai exact, un LDO va alimenta doar ATMEGA si "ATAT" iar atmega va comanda un PNP (1.5A) care alimenteaza un alt LDO iar de aici tensiunea se va duce catre toti consumatori conectati la bord si in bord, cum ar fi, alimentarea LCD-ului, senzorilor de temperatura, encoderului , si al led-urilor precum si tranzistorilor de comanda.Atunci cand atmega intra in shut-down, singuri consumatori va fi LDO-ul care alimenteaza ATMEAGA si ATMEGA in sine, consumul ajugand la 20mA dupa calculele mele in ST-BY. Voi ce parere aveti despre cea ce vreau sa fac?Se merita modificarea de amploare?Actual in ST-BY bateria ma "tinea" 3-4 zile, dupa asta se considera baterie goala.Dupa modificarea bordului am facut estimarea ca bateria ma va tine 45 zile pana sa se goleasca, asta da inbunatatire.Astept parerile voastre, inca nu mam apucat de treaba, vreau sa stiu si parerea voastra. Link spre comentariu
binox Postat Aprilie 23, 2013 Partajează Postat Aprilie 23, 2013 Parerea mea este ca 20mA inca e un consum foarte mare , daca tot esti in faza de reproiectare a cablajului ar trebui sa cauti solutii si sa faci teste ca sa obtii un consum sub 5mA altfel bateria se va descarca destul de repede , in nici un caz nu va rezista 45 de zile, eu sunt aproape sigur ca dupa o saptamana de standby cu 20mA nu va mai porni, si asta cu o baterie noua.Am masurat consumul in standby la o motocicleta mare, FJR1300 si media era sub 2mA, defapt aparea un varf de 2-4 mA o data la cateva secunde cand clipea ledul imobilizatorului , in rest aparatul meu pe scara de 200mA nu-mi arata nici un consum.Nu prea am inteles eu de ce vrei sa tii procesorul alimentat cand ai contactul oprit ca defapt de aici vine problema ta. (consum stabilizator+consum atmega) Daca ai nevoie de ceas si data ai putea folosi un circuit de timp real extern, se gasesc montaje gata facute foarte ieftine, chiar si cu baterie de backup.Nu stiu daca l-ai citit pana acum in caz ca nu ai facut-o iti recomand acest document Atmel AVR042: AVR Hardware Design Considerations si sa respecti strict toate recomadarile de acolo privind condensatorii de decuplare si partea de ADC, chiar si partea cu pinul de reset. Pe placuta ta cu atmega parca nu am observat acei condensatori care trebuie montati f aproape de pinii de alimentare.Am facut si eu un voltmetru pt motocicleta cu atmega8, nu citisem documentu ala la vremea aia, l-am facut asa dupa ureche, functiona f bine in casa, chiar si pe motocicleta cu motoru pornit insa am avut surpriza sa constat ca in trafic pe langa semafoare ceva se intampla si nu mai indica corect, din ultimu digit lipseau segmente si alte aberatii. Trebuia sa-l resetez ca-si revina. Nu stiu sigur cauza dar presupun ca era influentat de ceva unde radio, am vazut ca unele semafoare au montate o antena, probabil pt monitorizare. Nu ar fi rau sa te gandesti si la o eventuala ecranare a montajului ca sa nu ai surprize neplacute in viitor. Link spre comentariu
Vizitator tyc Postat Aprilie 23, 2013 Partajează Postat Aprilie 23, 2013 Cum spune Binox carcasa ecranata ,planuri de masa si ale asemenea ,fire la senzori ecranate. Daca tot umbli la cablaj ,prevede si o mufa ICSP (http://en.wikipedia.org/wiki/In-circuit ... rogramming ) si tragi versiune noua de program de cate ori vrei. Important ,chiar foarte important, la o motocicleta e turatia motorului . Acea informatie trebuie sa fie primordiala si afisat in sistem bargraf ,pe culori si eventual coloane crescatoare . Se pot face si inclinate ,etc (v. bord de Opel Kadet varianta digitala) . Studiile efectuate de mari producatori releva ca ,deoarece la vieze mari timpi de citire si interpretare a datelor sant foarte mici ,instrumentele cu ac si cadran sant cele mai lizibile in astfel de conditii - mai degraba observi un acometru ca e la 3 sferturi decat sa citesti niste cifre .Acesta e motivul pt care bordurile digitale OEM actuale sant cu instrument de masura (miliampermetru/uA) . In plus ,la acometre sti cam ce turatie revine la pozitia acului ,din experiente anterioare si din aproximari . La cifre nu ai ce sa aproximezi decat dupa ce le citesti exact (un timp mai mare) iar experienta anterioara e irelevanta (nu ti minte 10 000 de valori ca sa faci ce cu ele? ). Cu ceva ani in urma am facut un aparat asemanator care masura viteza,distanta si cu jurnalier .Avea functie de calibrare dupa diametrul rotii ,cronometru si anticronometru . Aparatul era structurat in jurul unui uC (initial Atmel dar era prea sensibil si l-am inlocuit cu PIC iar toate probleme au disparut ) ,afisarea era pe led/ lcd dot matrix,senzorul era magnetic inserat pe cablu de kilometraj sau mai putin precis electromagnetic de proximitate (stil taximetrie) . Datele (calibrare , kilometraj, jurnalier) erau memorate la intreruperea alimentari in memoria interna . La realimentarea cu energie ,toate datele erau prezente ,nu pornea de la 0 . Consumul intre folosiri era 0,00mA ,aparatul de dadea jos ,se decupla de la alimentare si se depozita in casa pana la urmatoarea utilizare . 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