LusoRobótica - Robótica em Português

Electrónica => Sensores => Tópico iniciado por: Dave em 21 de Dezembro de 2012, 23:09

Título: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 21 de Dezembro de 2012, 23:09
Olá a todos.

Preciso de uma ajudinha.
Alguém já usou este sensor? Muito comum nos ratos ópticos...

Eu estou a conseguir "falar" com ele, mas não devolve os valores pretendidos.

É só clicar nos link's para ter acesso a toda a informação.

PARTE 1
http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-1.html (http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-1.html)

PARTE 2
http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-2.html (http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-2.html)

PARTE 4 - inicio dos problemas
http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-4.html (http://blogoengenhocas.blogspot.pt/2012/12/pan3101-optical-mouse-sensor-parte-4.html)

Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 22 de Dezembro de 2012, 20:24
Alguém pode dar alguma ideia do que se passa?
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 24 de Dezembro de 2012, 00:06
Não vou ter muita sorte...  :-[
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: dropes em 24 de Dezembro de 2012, 11:48
Dave, nunca trabalhei com um ic desse tipo e só estudando o bicho é que descobria o seu funcionamento, alguma pesquisa e estudo.
Se estás a conseguir "falar" com ele já é bom, provavelmente necessita de endereços para a leitura de resultados...
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 24 de Dezembro de 2012, 12:31
Olá dropes, obrigado pela resposta.

Estou completamente à nora com isto.
Tenho em atenção o primeiro bit quando vou enviar uma endereço, se é para ler ou para escrever, etc.

Não entendo o que se passa... talvez precise de ser feita alguma configuração. Neste momento, estou a pedir logo os registos do delta x e delta y, sem fazer qualquer configuração.
Talvez seja preciso mexer em mais alguma coisa...


Cumps.

Feliz Natal
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: tr3s em 24 de Dezembro de 2012, 13:38
Dave, certifica-te que tens o GND ligado correctamente e é o mesmo do micro-controlador.  ;)

Já agora, tens o ressonator ligado como manda o datasheet?

Nunca assumas que o chip vem pré-configurado para funcionar como pretendido, ainda mais se o extraíste de outro circuito! Configura-o, olha para todas as opções e mesmo que o Datasheet diz que tem la um valor, escreve-o!
Li o datasheet por alto e diz que pode acontecer um problema no caso de o chip iniciar antes do micro-controlador colocar os pinos de serie como output. Olha bem para isso e le o datasheet pelo menos umas 5x  com atenção às letras pequenas (e grandes tb!) ;)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 24 de Dezembro de 2012, 16:57
Olá.

Sim, o GND é o mesmo e prova disso é que ele consegue fazer pelo menos uma comunicação.

De momento, o circuito montado segue este esquema. A verde tenho as ligações para o micro.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fcircuitopan_zps4706e722.png&hash=9763a72ba89547df3a78bdd4e97c7bb573724bbc)


pode acontecer um problema no caso de o chip iniciar antes do micro-controlador
Inicialmente iniciava tudo ao mesmo tempo, mas depois de ler isso passei a a alimentar o sensor manualmente. Ou seja, ligava a alimentação na breadboard e só depois ligava o fio da alimentação do sensor.

Também já lhe fiz o "full reset", mas continuava sem receber os dados que realmente me interessavam :(.

Está aqui um bicho  :o
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: tr3s em 25 de Dezembro de 2012, 14:50
Citar
Sim, o GND é o mesmo e prova disso é que ele consegue fazer pelo menos uma comunicação.

Como provas que consegues fazer comunicação se o que lês é tudo 0s ou 1s... Isso não é bem comunicação é outra coisa e não prova nada :P

Aqui no fórum, já por 3x que a solução de problemas semelhantes ao teu foi ligar o GND correctamente :P e quando eu falava nisso todos gozaram mas no fim a solução foi sempre essa :)

No entanto, eu acredito que tenhas tudo bem ligado e de certo que ja reviste tudo vezes sem conta ;) Podes sempre considerar que o chip está danificado :(
Ve se nao te está a faltar nenhum passo, segue o datasheet à letra, passinho por passinho.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 15:02
Não sei ....

Possivelmente até me está a escapar alguma coisa muito obvia.

Mas não estou mesmo a ver...
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: rglove em 25 de Dezembro de 2012, 16:11
O que eu faria era agarrar num exemplo e experimentar, assim testa-se o chip.

Cumps
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 17:00
O que eu faria era agarrar num exemplo e experimentar, assim testa-se o chip.

Cumps

Não entendi...

Num exemplo? De quê?
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: rglove em 25 de Dezembro de 2012, 17:33
Para o arduino por exemplo. Um código feito por outra pessoa, já testado.

Fiz uma pesquisa rápida e encontrei isto:
https://www.assembla.com/code/XD_DSbot/subversion/nodes/trunk/tests/Arduino/TestMouse/TestMouse.pde?rev=213 (https://www.assembla.com/code/XD_DSbot/subversion/nodes/trunk/tests/Arduino/TestMouse/TestMouse.pde?rev=213)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 18:01
Mas eles já usam uma biblioteca...

No caso deles, usam:
#include "ADNS2610.h"

A biblioteca que me interessava era a PAN3101.h, mas não encontro.

Nem encontro ninguém que tenha usado, ao contrário do ADNS2610...

Vou ler um pouco mais http://pwc.theclarkwebsite.com/adns2610code.php (http://pwc.theclarkwebsite.com/adns2610code.php)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: tr3s em 25 de Dezembro de 2012, 18:25
Pesquisa por PAN3101.cpp
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: senso em 25 de Dezembro de 2012, 19:15
Como é que des-soldaste o chip?
Podes ter queimado isso aos remover o chip, e andar a brincar assim com os pinos do SPI tambem pode correr mal, simplifica e muda por agora para um SPI bit-banged para funcionar só com um pino.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 19:55
Após uns testes no PROTEUS e olhar os gráficos dos vários sinais... algo aqui não bate certo.

Quando estou a receber, perco o sinal de clock.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: senso em 25 de Dezembro de 2012, 20:01
Mas estás a simular isso?
Estou fartinho de ler problemas com o Proteus, principalmente quando é a simular micros...
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 20:43
No proteus não consigo simular o PAN3101...

Só que agora lembrei-me de ver o que tinha nos pinos de comunicação, pois estive a ver com o osciloscópio e o clock não está lá sempre.
Ele ligar apenas para fazer o out dos dados e depois desliga...
Não estou a fazer algo bem.


Estou a usar um PIC16F88
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: senso em 25 de Dezembro de 2012, 21:05
É normal, o SPI não tem sempre o clock activo, porque os dispositivos SPI funcionam como um shift-register, a cada clock é enviado e recebido um bit.
Mas já agora, tens a polaridade e o idle do SPI como manda esse chip, é que o SPI tem 4 modos, primeira transição do clock a high ou a low, e latching dos dados na transição ascendente ou descente do sinal de clock.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 21:28
É normal, o SPI não tem sempre o clock activo, porque os dispositivos SPI funcionam como um shift-register, a cada clock é enviado e recebido um bit.

Aqui está a confusão... mas como é possível ao mesmo tempo que eu envio o enderesso, o sensor estar já a colocar o valor do mesmo.
Ele não sabe qual vai ser...  :o
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: senso em 25 de Dezembro de 2012, 21:38
O problema é que tu não sabes usar dispositivos SPI, devias dar uma olhadela melhor nas datasheets..
Normalmente escreves o endereço que queres, e o que recebes quando envias esse endereço é lixo, para teres os dados correctos fazes um ou mais dummy writtes e lês os dados reais e não lixo/ruido na leitura, aliás, nesse caso para receberes nem sequer tens de enviar nada, só tens de meter o clock a correr, porque isso tem só um pino para leitura e escrita, mas como estás a usar o controlador SPI por hardware tens de fazer escritas, mas como tens os pinos de escrita e leitura juntos não sei até que ponto é que isso vai funcionar perfeitamente bem.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 21:56
Aquela questão dos acertos de clock (polariadade etc) em principio está certo.
Pelo menos bate certo a imagem do datasheet do PAN com a do datasheet do micro, usando CKE=0 e CKP=1.

Código: [Seleccione]
//SPI
SSPSTATbits.SMP = 0;
SSPSTATbits.CKE = 0;

SSPCONbits.SSPEN = 1;
SSPCONbits.CKP   = 1;
SSPCONbits.SSPM  = 0b0010; //freq clkout=62k500hz


(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fconfig_zps0dc14128.png&hash=a14e0bd3010a035cfec9325d709a134686767297)

Mas assim não deveria dar alguma coisa?
*limpo a flag;
*envio 0x03;
*aguardo pela flag;
*limpo o lixo que fica no buffer e faço uma "escrita" - isto dá-me mais 8 clock's para receber;
*limpo a flag;
*preparo o pino para receber;
*aguardo pela flag;
*faço leitura do buffer

Está feito...


Código: [Seleccione]
while(1)
{

PIR1bits.SSPIF=0;
SSPBUF=0x03;
while(!PIR1bits.SSPIF);
SSPBUF=0; //limpo o lixo e faço uma "escrita"
PIR1bits.SSPIF=0;
TRISB2=1; //tri-state
while(!PIR1bits.SSPIF); //espera resposta
A[0]=SSPBUF;
TRISB2=0; //output again
__delay_ms(100);
}


Emulei um sinal no PROTEUS para fazer a leitura do mesmo.
Era suposto receber 10101010 e é mesmo isso que recebo...
O problema poderá é estar naquele período morto...

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fgraf-1_zps82d9d2f6.png&hash=586da620834e7f0ae83058d16ed8f6f2bd6924bd)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: senso em 25 de Dezembro de 2012, 21:58
Supostamente o primeiro bit não tem de estar a 1, ou seja HIGH?
Logo não devia ser 0x03..
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 25 de Dezembro de 2012, 23:54
Supostamente o primeiro bit não tem de estar a 1, ou seja HIGH?
Logo não devia ser 0x03..

Isso era para escrita, para leitura é mesmo só "0x03".

Primeiro bit:
1 - escrita
0 - leitura
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 26 de Dezembro de 2012, 02:03
Ele está a enviar alguns valores enquanto o vou mexendo e dá zero, quando eu paro de lhe mexer.
Mas não acho que os valores sejam muito correctos...

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi473.photobucket.com%2Falbums%2Frr100%2Fdaviddmmartins%2Fval_zps37a9a4eb.png&hash=cb96fa9233c9f2add0b4d08ae85d2c8177a5bd81)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: tr3s em 26 de Dezembro de 2012, 11:55
Então mas espera lá, esse sensor dá-te deltas ou valor absoluto? Se for deltas, se o páras dá-te zero claro, está parado.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: tr3s em 26 de Dezembro de 2012, 11:58
Esse sensor dá-te deltas, a cada leitura os registos são esmagados. Tabela Pág. 7 do datasheet:

Citar
Register 0x16 allows the user to determine if motion has occurred since the last time it was read. If
so, then the user should read registers 0x17 and 0x18 to get the accumulated motion. It also tells if
the motion buffers have overflowed since the last reading. The current resolution is also shown.
Reading this register freezes the Delta_X and Delta_Y register values. Read this register before
reading the Delta_X and Delta_Y registers. If Delta_X and Delta_Y are not read before the motion
register is read a second time, the data in Delta_X and Delta_Y will be lost.

Citar
X movement is counts since last report. Absolute value is determined by resolution. Reading clears
the register. Report range –128~+127.

Citar
Y movement is counts since last report. Absolute value is determined by resolution. Reading clears
the register. Report range –128~+127.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 26 de Dezembro de 2012, 14:43
No entanto, eu nunca tenho valores grandes, tipo 100 ou -100.

Eu sou capaz mexer um bocado grande e a próxima leitura ser tipo 2, ou 3.
Haveria de ser 127, por exemplo, pois a cada 31.75µm ele deveria incrementar 1, certo?
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: microbyte em 26 de Dezembro de 2012, 17:30
Mas tu não podes deixar isso acumular muito, porque vai-te dar overflow, o que tens de fazer é leituras "o mais rápido possível", gravas os dados para o PC, por exemplo, e fazes um gráfico.

O que vais é amostrar um valor de um acumulador, se demoras muito tempo a ler, o mais certo é o acumulador ter dado a volta...

Tens de garantir que lês antes do acumulador chegar ao valor máximo (127 ou -127)
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 28 de Dezembro de 2012, 02:47
Comecei a guardar os valores todos, a cada 10ms.

Obtive a lista de valores em baixo.

Citar
Update Address Symbol Name Value  Decimal    Binary   

          020 main@A      ""                   
          023 [3]            '.'      1     00000001
          024 [4]            '.'      0     00000000
          025 [5]            '.'      0     00000000
          026 [6]            '.'      0     00000000
          027 [7]            '.'      0     00000000
          028 [8]            '.'      0     00000000
          029 [9]            '.'      0     00000000
          02A [10]           '.'      0     00000000
          02B [11]           '.'      0     00000000
          02C [12]           '.'      0     00000000
          02D [13]           '.'      0     00000000
          02E [14]           '.'      0     00000000
          02F [15]           '.'      0     00000000
          030 [16]           '.'      0     00000000
          031 [17]           '.'      0     00000000
          032 [18]           '.'      0     00000000
          033 [19]           '.'      0     00000000
          034 [20]           '.'      0     00000000
          035 [21]           '.'     -1     11111111
          036 [22]           '.'      0     00000000
          037 [23]           '.'      0     00000000
          038 [24]           '.'      0     00000000
          039 [25]           '.'      0     00000000
          03A [26]           '.'      0     00000000
          03B [27]           '.'      0     00000000
          03C [28]           '.'      0     00000000
          03D [29]           '.'      0     00000000
          03E [30]           '.'      0     00000000
          03F [31]           '.'      0     00000000
          040 [32]           '.'      0     00000000
          041 [33]           '.'      1     00000001
          042 [34]           '.'      5     00000101
          043 [35]           '.'      2     00000010
          044 [36]           '.'      1     00000001
          045 [37]           '.'      0     00000000
          046 [38]           '.'      0     00000000
          047 [39]           '.'      0     00000000
          048 [40]           '.'      0     00000000
          049 [41]           '.'      0     00000000
          04A [42]           '.'      0     00000000
          04B [43]           '.'      0     00000000
          04C [44]           '.'      0     00000000
          04D [45]           '.'      0     00000000
          04E [46]           '.'      0     00000000
          04F [47]           '.'      0     00000000
          050 [48]           '.'      0     00000000
          051 [49]           '.'      0     00000000
          052 [50]           '.'      0     00000000
          053 [51]           '.'      0     00000000
          054 [52]           '.'      0     00000000
          055 [53]           '.'      0     00000000
          056 [54]           '.'      0     00000000
          057 [55]           '.'      0     00000000
          058 [56]           '.'      0     00000000
          059 [57]           '.'      0     00000000
          05A [58]           '.'      0     00000000
          05B [59]           '.'      0     00000000


Usei este código:
Código: [Seleccione]
i=3;

while(i<50)
{
PIR1bits.SSPIF=0;
SSPBUF=0b00000011;
while(!PIR1bits.SSPIF);
A[2]=SSPBUF;
SSPBUF=0;
TRISB2=1;     //tri-state

while(!SSPSTATbits.BF);  //espera resposta
A[i]=SSPBUF;

TRISB2=0;     //output again
__delay_ms(100);
i++;
}


Das duas uma, ou não estou a conseguir falar "falar bem", ou então ele chateou-se comigo e não "fala" mais nada!
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: microbyte em 28 de Dezembro de 2012, 03:14
Desculpa a pergunta, mas tu mexeste o rato?  :P
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 28 de Dezembro de 2012, 03:45
Desculpa a pergunta, mas tu mexeste o rato?  :P

eheheh

Yap mexi :D.

Fiz isto algumas vezes.
Umas vezes mexi devagar, de outras com vais velocidade, para ver se aparecia algo que se visse  ;D.

As leituras não são iguais, mas são muito semelhantes.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: microbyte em 28 de Dezembro de 2012, 12:41
Pois mas realmente a mim parece-me que tu mexeste mais rápido nestas linhas:
Código: [Seleccione]
          041 [33]           '.'      1     00000001
          042 [34]           '.'      5     00000101
          043 [35]           '.'      2     00000010
          044 [36]           '.'      1     00000001

Pelo datasheet, há 3000 frames/segundo...
Isto significa que há 1 frame em cada 333,(3) µs, logo 10ms continua a ser muito. Experimenta ler a cada 350µs.
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: Dave em 28 de Dezembro de 2012, 17:54
microbyte, mas não é estranho dar quase tudo zero?

A probabilidade de calhar zero, sabendo que dá a volta e empurei em todas as direcções, seria 1/256.

Tenho de meter um osciloscópio digital nisto e ver o que está mal...  :o
Título: Re: PAN3101 - OPTICAL MOUSE SENSOR
Enviado por: microbyte em 28 de Dezembro de 2012, 19:10
Passei os olhos muito rápido no datasheet há bocado e vi referência a uma coisa chamada watchdog timer, que é basicamente um "reset" quando o circuito acha que "empancou".

Não estou a dizer que é isso, mas algo pode estar a provocar esse reset...

Fizeste a experiência que te propus?