Jump to content
ELFORUM - Forumul electronistilor

Citire rotary encoder


Recommended Posts

Salutare!

 

Nu aveti cumva vreun exemplu de citire a unui rotary encoder ("potentiometru" de volum de la casetofon de masina, asa ceva vreau sa folosesc) cu ajutorul unui pic 12f675? Dar sa nu fie in asm :d

Va multumesc anticipat.

Am tot cautat pe net, incercat exemple... dar nu imi iese...din pacate...

Link to comment

incearca codul asta :

// encoderul este conectat la PORTB , pinii 4 si 5Var encoder,oldencoder:byte;encoder:=portb and 0x30;oldencoder:=encoder;while (1) do      begin           encoder:=PORTB and 0x30;           if encoder<>oldencoder then               if encoder.RB4=oldencoder.RB5 then  ..... //encoder cw                                                         else ..... // encoder ccw                                   end;
Link to comment

Ai grijă sa-i faci debounce-ing hardware ca majoritatea encoderelor astea ieftine sunt tragice din punctul asta de vedere. Pui pe un osciloscop înainte să vezi semnalul curat și după aia te ocupi de software altfel alergi după cai verzi pe pereți.

Link to comment

Concret... Am un rotary encoder, din acela ce se folosesc pe post de "potentiometru" la cd-urile auto. De pe un cd auto l-am recuperat. El este legat la un pic 12f675 pe porturile 2 si 3. Pe porturile 5 si 6 am cate un led. 

Doresc ca atunci cand rotesc spre stanga sa se aprinda un led, iar cand ii spre dreapta, celalalt led... :d

Ii ceva simplist, zic eu, dar nu reusesc :d

Folosesc ca si limbaj de programare basic-ul, in proton basic.

Osciloscop nu am, asa ca nu pot sa vad semnalul... din pacate.

Va multumesc pentru ajutoare...

Edited by critix
Link to comment

Incearca sa pornesti de la mai simpu.

 

El are 2 contacte.

 

Deci verifici daca s-a facut primul contact si aprinzi un LED 1 secunda!

 

Astfel, in orice directie vei roti se va aprinde un LED 1 secunda.

 

Apoi la fel si cu ce-l de-al doilea contact.

Vezi daca la rotire se dechid sau se inchid, nu mai siu excat.

 

---------------------------------------

Logica e asa. Care contact s-a facut prmul si care s-a facut al doilea, arata sensul de rotatie. Ai nevoie de un delay foarte mic intre verificarile celor 2 contacte.

Link to comment

Si posteaza si poze sau filmulet.

 

PS: verifica cu un aparat de masura cum se fac contactele alea la rotire. E normal inchis sau normal deschis?

Eu am un encoder, inca nu l-am folosit.

PS2: daca vrei o solutie 'la cheie' cu PIC12F675 si un Encoder trimisa prin posta....discutam

Link to comment

Encoderul este pe pinii 2 si 3, adica pe GPIO 4 si GPIO 5

 Ceva de genul respectiv incerc sa fac:

New_Bits=GPIO & %110000 >>4loop:     New_Bits = GPIO & %110000 >> 4                       If (New_Bits & %110000) = (Old_Bits & %110000) Then DoneRotEnc    RotEncDir = New_Bits.4 ^ Old_Bits.5     If RotEncDir = 1 Then        led1=1        delayms 1000        led1=0        delayms 1000    Else        led2=1        delayms 1000        led2=0        delayms 1000    EndIf    GoTo loopDoneRotEnc:     Old_Bits = New_BitsGoTo loop
Link to comment

Cea mai mare problema cred ca e ca, dupa ce citesti, deplasezi rezultatul la dreapta si dupa aia lucrezi cu bitii originali.

Ori nu mai deplasezi si lucrezi cu bitii 4 & 5, ori deplasezi si lucrezi cu 0&1.

Pe de alta parte, celel 100 ms delay cred ca-s mult. Deplasarea se detecteaza in functie de pozitia anterioara. Daca tu faci asa pauze intre citiri, nu poti detecta corect directia.

De obicei, ca sa nu ratezi modificari, se folosesc intreruperi - se modifica un pin, intri in intrerupere si citesti portul. Resetezi flagul, iesi din intrerupere si faci prelucrarile.

Din pacate nu stiu cum se face asta in basicul tau.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines