Sari la conținut
ELFORUM - Forumul electronistilor

citire date mouse cu PIC


Vizitator mirtes_99

Postări Recomandate

Vizitator mirtes_99

am incercat sa implementez codul de pe pagina http://hades.mech.northwestern.edu/index.php/Interfacing_with_a_mouse pe un PIC16F876A, dar se blocheaza PIC-ul atunci cand este conectat adaptorul de ps/2(de pe aceeasi pagina, cel cu 2 tranzistori si 2 rezistente).

 

am folosit rezistente de 10K, iar porturile folosite sunt:

PIN_B2 = data input/output

PIN_B0 = clock input/output

PIN_B1 = clock control

PIN_B3 = data control

 

are cineva idee ce-ar putea fi?

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • srdjan

    2

  • Liviu M

    1

eu cred ca ti se blocheaza programul in bucla asta (ramane infinita)

while(enabled == 0)        //mouse data sending initially disabled{   if (i > 9)                 {      enabled = 1;         //sending from mouse should be enabled at this point      output_low(PIN_B3);   }}
pe motiv ca codul intreruperii asteia nu se executa (probleme cu intreruperea)
#INT_EXT1             // designates that this is the routine to call //when pin RB1/INT1 changes statevoid INT1isr() {lcd_init();  // initialize lcd      if (enabled == 0)                //outputs a data bit to mouse   {         if(enabledata[i] == 1)                 {            output_low(PIN_B3);         }         if(enabledata[i] == 0)         {            output_high(PIN_B3);         }         i++;   }      if (enabled == 1)   {      delay_us(20);      data[i] = input(PIN_B0);   //read a logical high or low into array      interrupt = 1;    }                               //to break out of infinite while loop}
eu aici as peria in primul rand... adica as improviza niste metode sa vad unde se blocheaza programul si de ce...

Unresolved IssuesOur group was unable to display the motion of an optical mouse on an LCD screen. After a great deal of troubleshooting, we have come to the conclusion that our interrupt service routine algorithm or microcontroller is simply not fast enough to receive and send data in time with clock signal generated by the mouse. The mouse clock signal is essentially a 10-16.7 kHz square wave. Each high and each low on the clock signal would last roughly 40 microseconds and our interrupt service routine (which was supposed to trigger every time the clock went from high to low) tended to miss or skip several signals at a time. This problem prevented the mouse from ever receiving an “Enable Data Reporting” from the PIC and thus the mouse never outputted data to the PIC.Suggested solution: Use a faster microcontroller or develop a more efficient interface program.

Link spre comentariu
Vizitator mirtes_99

In main() pun o functie care sa-mi trimita serial un cuvant de fiecare data cand pornesc sau fac reset la PIC. Daca nu conectez adaptorul merge...primesc acel cuvant si la pornire si la reset. Dupa conectarea adaptorului, primesc doar cand pornesc si uneori nu primesc tot cuvantul, iar la reset nu mai primesc nimic.

Link spre comentariu

mai... ce suspectez eu ca se intampla adica traduc ce-am scris mai sus.MCU trimite semnal mouse-ului ca poate sa trimita date dupa care intra intr-o bucla pana cand mouse-ul raspunde ceva. problema e ca MCU "nu asculta unde trebuie sau nu intelege ce ii spune mouse-ul" si atunci ramane in acea bucla fara sa treaca mai departe cu executia programului.Recomandare: testeaza functionalitatea intreruperii atat manual cat si cu un semnal generat la frecventa clock-ului mouse-ului.

Link spre comentariu
Vizitator mirtes_99

am pus rezistente de 330 ohmi intre porturile pic-ului si baza tranzistorului si "s-a modificat schimbarea". nu se mai blocheaza...sper sa ma descurc mai departe:Dmultumesc pentru ajutor

Link spre comentariu
Vizitator mirtes_99

imi citeste mereu un bit 0 si in rest doar 1... primesc mereu cate un pachet de 0 urmat de 32 de 1 cand misc mouse-ul... e de la electronica? nu mai coboara in 0?

Link spre comentariu

PIN_B2 = data input/outputPIN_B0 = clock input/outputPIN_B1 = clock control PIN_B3 = data control

Ai modificat si codul corespunzator, da? Nu de alta, da' pinii folositi de tine difera putin de cei folositi in codul de pe site:
//PIN_B0 = data input/output//PIN_B1 = clock input/output//PIN_B2 = clock control         output high sets clock low//PIN_B3 = data control          output high sets data low
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