Sari la conținut
ELFORUM - Forumul electronistilor

indicare directie rotatie un ax cu PIC


Postări Recomandate

@bericioiu, @Livium , va multumesc inca odata ca acordati atentie micii mele probleme!

dar stati putin!

nu intrati in conflict pentru mine!

la nivelul meu de cunostinte in domeniul microcontrolere&programare, cea mai vandabila solutie este de a fura din jucariile lui Fie-mea doua pinioane/roti dintate care sa-mi modifice raportul de rotire  a axului coloanei, sa-mi reduca raportul la o rotire sau chiar mai putin!...cat pentru punctul neutru, e numai bine ca mai adaug un senzor optic ce indica acest punct neutru.

cele doua pinioan le pot confectiona din komatex, pentru ca nu e cinestie ce sarcina...

inca odata, multumesc!

Link spre comentariu

LE:

intai de toate trebuie sa precizez ca am modificat intrarile de la senzori: RA4 & RA5...

am adaugat un macro numit IPN(intrare punct neutru),

au reiesit doua variante:

  prima este varianta ce respecta indicatiile voastre>

in main, am activat TMR0; am creat un timer de 3 secunde dupa care am adaugat o interogare a macroului IPN(ce are in acest caz masking pe pinii 4 si 5), si dupa ea am pus un IF, care daca pe portul A (IPN) avem 48(32+16), sa astepte 3 secunde(nu am idee de unde mi-a nazarit aceste 3 secunde), dupa care sa reseteze portul C, cu masking pe pinii de iesire(RC0 si RC1)...

  cea de-a doua varianta, cu 3 senzori optici>

in main, in bucla ce credeam ca e incompleta, am adaugat o interogare a macroului IPN(in acest caz, foloseste RA2) si dupa interofare, am adaugat o decizie, daca IPN=4, sa reseteze portul C...

 

prima varianta nu o pot simula, cea de-a doua am putut-o simula fara probleme, cu mentiunea ca cea de-a doua, cu 3 senzori, trebuie neaparat sa-i confectionez reductor de turarie, cu pinioane...

fisiere Flowcode V5.rar

 

intrebare de ultim moment, cum sa pozitionez senzorii pentru a evita situatia urmatoare:

sunt cu volanul drept, ambii senzori obturati>ambele iesiri sunt 0, dar daca virez stanga, imi va activa o iesire, dar, DAR: nu cumva se confunda situatia cu viraj la dreapta cand voi intrepta volanul?

Editat de ardiles
Link spre comentariu

la nivelul meu de cunostinte in domeniul microcontrolere&programare, cea mai vandabila solutie este de a fura din jucariile

Te invidiez, pe mine "adaptarile mecanice" m-au facut sa renunt la mai multe proiecte.Oricum, dupa parerea mea, ori ca folosesti solutia lui Bercioiu, ori pe a mea, ar trebui sa fie mai simplu sa rezolvi soft problemele. 

intai de toate trebuie sa precizez ca am modificat intrarile de la senzori: RA4 & RA5......intrebare de ultim moment, cum sa pozitionez senzorii pentru a evita situatia urmatoare:sunt cu volanul drept, ambii senzori obturati>ambele iesiri sunt 0, dar daca virez stanga, imi va activa o iesire, dar, DAR: nu cumva se confunda situatia cu viraj la dreapta cand voi intrepta volanul?

Pana la urma ce controller o sa folosesti?La fiecare modificare a senzorilor memorezi pozitia/directia. In cazul unei noi modificari a senzorilor, decizia se ia in functie de starea memorata. Cu putin debouncing ar trebui sa n-ai probleme in interpretarea corecta a directiei de rotatie si a numarului de rotiri.PS Ce-i cu prostia asta de "ai prea multe citate"? Nu erau decat trei si erau necesare, ca sa se inteleaga despre ce vorbesc. Editat de Liviu M
Link spre comentariu

microcontrolerul va fi 16LF1824(abea ce am reusit sa fac clona de pickit sa-l recunoasca), dar nu il am in baza de date a Protheusului si e mai greu cu simularea...asa ca in simulare dar si in flowcode, l-am inlocuit cu 16F684 pentru ca se cam potrivesc la porturi.

daca nu reusesc cu 16LF1824, il voi inclocui cu un 12F629 ca nu e greu:)

 

problema e ca nu stiu cum sa memorez starea...chiar nu-mi trece prin minte, cum as putea face asta. ar usura mult cu memoratul starii pentru ca in felul asta as elimina posibilitatea erorii cu revenirea volanului, ce am descris-o mai sus.

 

off: si eu m-am lovit de mesajul cu "ai prea multe citate"... poti face copy, modificare stil font>Italic, si se subintelege ca e citat....ba chiar e mai citat asa, decat incadrat.

Editat de ardiles
Link spre comentariu

problema e ca nu stiu cum sa memorez starea...chiar nu-mi trece prin minte, cum as putea face asta. 

Folosesti o (doua) variabila (variabile)?

Ca sa detectezi directia de miscare, trebuie sa compari ultima stare cu starea actuala.

Cu alte cuvinte, de cate ori se schimba un senzor, "citesti" starea celor doua intrari ale tale (RA4 &RA5) in variabila/variabile (RA4_curent, RA5_curent, de exemplu). 

Le compari cu variabilele RA4_old & RA5_old (initializate corect la inceput si actualizate in program), decizi directia in care ai rasucit, scrii RA4_curent in RA4_old si RA5_curent in RA5_old si astepti alte evenimente de la senzori.

Link spre comentariu

@bericioiu,

am descoperit o anomalie prezenta in fisierul sens_rot dar si in fisierul modificat de mine:

sensul de rotatie se identifica obturand  S1, S1-S2, S2 pentru o directia A si S2, S2-S1, S1 pentru directia B...

in momentul cand pornesc simularea in flowcode si vreau sa imi identifice o directie, de ex.A, apas pe S1 si in acest moment se aprinde un led dar din directia cealalta..., apoi cand continui succesiunea> S1, S1-S2, S2, se stinge led-ul ce s-a aprins incorect si se aprinde in directia corecta....

Link spre comentariu

eehe... inca de alalteieri am reusit ceva insa nu sunt chiar sigur de functionarea de calitate, daca pot spune asa...

cert e ca nu functioneaza ca un encoder...este o jonglerie de variabile booleene, 0 si 1.

deci: pe axa volanului se afla un obturator care in pozitia neutra, se afla intre senzori. daca ataca un senzor(S1), acesta va activa iesirea O1; O1, va fi 1 pana cand va fi atacat din nou sS1 dupa care devine 0. Avand in vedere ca volanul din pozitia neutra parcurge pana la capat de cursa, 1,6rotație, microcontrolerul va sesiza asta asa: poz.neutra: nici un senzor atacat, rotesc de volan cateva grade si este atacat S1(O1 devine 1 si asa ramane), rotesc in continuare de volan(330grade) si imi este atacat S2, mai departe daca rotesc va fi atacat din nou S1 si ajung la capat de cursa cu volanul...ei bine in tot acest timp O1 a fost 1(activ, proiectorul corespondent aprins), si ramane asa pana cand rotesc in sens invers si senzorii vor fi aacati in ordine inversa...S1-S2-S1 si se reseteaza O1.

deci pe scurt: rotesc 10 grade de volan, se ataca S1(se activeaza O1), rotesc 330Grade se ataca S2, rotesc alte 20Grade se retrece prin S1, ajung la capat de cursa, revin cu volanul si succesiunea de senzori care va reseta O1 este S1, S2, S1 O1»se stinge(devine 0).

 

intrebarea mea este in urmatoarea descriere:

folosindu-ma de IOC, pinii RA4 si RA5, microcontrolerul ruleaza programul, si reia si reia de la capat, in momentul cand activez una dintre RA4 sau RA5, microcontrolerul va intra in intrerupere(»automat va rula macroul corespondent acelei intreruperi), DAR: va sta blocat asteptand eliberarea pinului ce l-am activat(dintre RA4 sau RA5)?

 

off topic:scuzati-mi foamea de "t" si alte litere/caractere! nu munceste tastatura!

Editat de ardiles
Link spre comentariu

LE: este bine ce facui?

am activat si intreruperea TMR0 si am facut un timer care dupa 25 secunde reseteaza portul C si face toate variabilele booleene si byti, ii face 0.

acelasi lucru, inafara de resetarea portului C, lam facut si in main, am resetat toate variabilele...

e bine, nu e bine?

PS: stiu ca unora li se poate parea aiurea aceasta intrebare dar mentionez ca sunt electrician de inalta tensiune si la cursul de programare(limbaj de programare) am avut restanta...(ce fraier...de-as mai avea anii de-atunci si mintea de acum....)

Editat de ardiles
Link spre comentariu

La prima intrebare, cea cu ioc, raspunsul e nu, controllerul nu ramane blocat in functia de tratare a intreruperilor, ci o trateaza ca pe o rutina "normala" - intra, executa, iese. Trebuie insa resetat flagul corespunzator intreruperii, altfel rutina se reia. Si se reia. Si se reia... De ai senzatia ca numai acolo, in rutina aia sta. Din cate tin eu minte, la ioc flagul e resetat automat la citirea registrului corespunzator, da' eu parca a trebuit sa citesc de doua ori registrul ca sa functioneze OK.Intrebarea cu timerul n-am inteles-o.

Link spre comentariu

intreb asta pentru ca la simularea frame cu frame, se invarte in bucla goala din main, dar daca apas unul dintre buoane, imediat reactioneaza si intra in inreruperea IOC...

Trebuie insa resetat flagul corespunzator intreruperii, altfel rutina se reia. Si se reia. Si se reia... De ai senzatia ca numai acolo, in rutina aia sta.

cred ca de aceasta resetare a flagului se ocupa Flowcode.ul...

Editat de ardiles
Link spre comentariu

@LiviuM, treaba se face in dormitor, nu mai suntem adolescenti.... :limb:

intrebare intr-ebatoare catre Bericioiu: de ce Michey Mouse nu pot corela un timp din simulare in flowcode cu unul din Protheus(din varianta de test)?

frecventa setata in flowcode este de 4Mhz, prescaler-ul este setat la  1:128, deci de cate ori trece prin intreruperea TMR0, va aduna 1deci de fiecare data cand variabila TMR0 va fi 30, aceasta se va reseta si va aduna +1 la variabila "secunda" dupa fiecare 30secunde combinata cu alte doua conditii, imi va reseta portul C, in cazul in care ranane in vreun fel vreun proiector aprins acesta se va stinge oricum, dupa 30 secunde. sau cel putin asa ar trebui ca nu se intampla...timpul este cam de 10ori mai mare...ca si cand microcontrolerul ar rula la o frecventa sub 1Mhz....

Link spre comentariu

mda, am ajuns acasa, nervos fiind ca nu muncea simularea cum voiam eu, am sters tot ce tinea de TMR0 si am luat-o de la capat.

acum munceste. dupa 30secunde, orice proiector ce ar ramane aprins se va reseta, inclusiv toate variabilele se vor reseta.

pana la urma, cred ca era din cauza ca la serviciu am fost prea atent si nimic n iese cand lucrez curat, si mai e si varianta cu parnaia aia de laptop cu tastatura trosnita....

persista intrebarea: de ce simularea din flowcode este leeeeeeeeeenta? 

Link spre comentariu

@LiviuM, treaba se face in dormitor, nu mai suntem adolescenti.... :limb:intrebare intr-ebatoare catre Bericioiu: de ce Michey Mouse nu pot corela un timp din simulare in flowcode cu unul din Protheus(din varianta de test)?frecventa setata in flowcode este de 4Mhz, prescaler-ul este setat la  1:128, deci de cate ori trece prin intreruperea TMR0, va aduna 1deci de fiecare data cand variabila TMR0 va fi 30, aceasta se va reseta si va aduna +1 la variabila "secunda" dupa fiecare 30secunde combinata cu alte doua conditii, imi va reseta portul C, in cazul in care ranane in vreun fel vreun proiector aprins acesta se va stinge oricum, dupa 30 secunde. sau cel putin asa ar trebui ca nu se intampla...timpul este cam de 10ori mai mare...ca si cand microcontrolerul ar rula la o frecventa sub 1Mhz....

Nu situ ce pic foloesti pana la Irma... Probabil ca nu ai configurat corect oscillatorul intern. spre exemplu, pentru 8 MHz, Pui un cod C cu "oscccon=0x70;"
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