tag:blogger.com,1999:blog-3141644733721608664.post6131919764302962981..comments2023-04-15T15:56:18.237+01:00Comments on "O engenhocas": PAN3101 - OPTICAL MOUSE SENSOR - Parte 4David Martinshttp://www.blogger.com/profile/02116446466777624837noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-3141644733721608664.post-26269029004939342372012-12-28T02:02:40.974+00:002012-12-28T02:02:40.974+00:00Olá.
Bom comentário!
Vou ler com um pouco mais d...Olá.<br /><br />Bom comentário!<br /><br />Vou ler com um pouco mais de atenção e fazer mais umas experiências.<br /><br />Qualquer novidade, coloco por cá.<br /><br />Obrigado ;).<br /><br /><br />AbraçãoDavid Martinshttps://www.blogger.com/profile/02116446466777624837noreply@blogger.comtag:blogger.com,1999:blog-3141644733721608664.post-88786389796312414412012-12-28T01:13:34.900+00:002012-12-28T01:13:34.900+00:00outra coisa....
o Serial.begin(115200); ta sendo u...outra coisa....<br />o Serial.begin(115200); ta sendo usado só para mostrar as coisas no serial monitor do ArduinoAlvaro Serdottehttps://www.blogger.com/profile/03111861830918758761noreply@blogger.comtag:blogger.com,1999:blog-3141644733721608664.post-54053570743744106982012-12-28T01:09:22.506+00:002012-12-28T01:09:22.506+00:00esse codigo foi feito para o ADNS..alguma coisa
o ...esse codigo foi feito para o ADNS..alguma coisa<br />o NCS não foi usadoAlvaro Serdottehttps://www.blogger.com/profile/03111861830918758761noreply@blogger.comtag:blogger.com,1999:blog-3141644733721608664.post-81528660558340985572012-12-28T01:08:13.389+00:002012-12-28T01:08:13.389+00:00Amigão, parabens pelo blog, achei muita coisa util...Amigão, parabens pelo blog, achei muita coisa util, isso que ainda não olhei tudo.<br />faz alguns dias que ando pesquisando sobre fluxo optico para eu poder colocar no meu hexcopter... e hoje resolvi depenar meu mouse e tentar ver se funcina. Eu me baseei em alguns codigos encontrados na net, e me baseie em algumas informações que voce passou ai no blog.<br />Bom... não sei se voce ja conseguiu fazer funcionar, mas de repente posso te ajudar. fiz alguns testes e parece ter funcionado.... se eu seto a resolução para 400, ele le como 400, e para 800 também funciona. os deltas X e Y também estão variando. Não coloquei lente apropriada ainda mas...<br />me manda um email.... tenta com esse sketch abaixo... boa sorte...<br />não da bola que tem muito registrador que não se usa e que está com o endereço errado, peguei de um outro codigo fonte... abraço<br />#define SCLK 5<br />#define SDIO 6<br />#define NCS 4<br /><br />#define PRODUCT_ID1 0x01 // should be 0x12<br />#define PRODUCTID2 0x3e//<br />#define REVISION_ID 0x01//<br />#define MOTION_REG 0x16<br />#define DELTA_Y_REG 0x02<br />#define DELTA_X_REG 0x03<br />#define SQUAL_REG 0x05<br />#define MAXIMUM_PIXEL_REG 0x08<br />#define MINIMUM_PIXEL_REG 0x0a<br />#define PIXEL_SUM_REG 0x09<br />#define PIXEL_DATA_REG 0x0b<br />#define SHUTTER_UPPER_REG 0x06<br />#define SHUTTER_LOWER_REG 0x07<br />#define RESET 0x3a<br />#define CPI500v 0x00<br />#define CPI1000v 0x01<br /><br />#define NUM_PIXELS 361<br /><br />byte pix[361];<br /><br />void setup()<br />{<br /> Serial.begin(115200);<br /><br /> pinMode(SDIO, OUTPUT);<br /> pinMode(SCLK, OUTPUT);<br /> pinMode(NCS, OUTPUT);<br /> <br /> sync();<br /><br /> //ADNS_write(RESET, 0x5a);<br /> ADNS_write(0x00, 0x81); //Full Reset<br /> ADNS_write(0x00, 0x01); //Disable Sleep Mode<br /> //ADNS_write(0x1B, 0x80); //SET 400 RESOLUTION<br /> delay(1); // From NRESET pull high to valid motion, assuming VDD and motion is present.<br /><br />}<br /><br />void loop()<br />{<br /> char MR = ADNS_read(0x16); // Freezes DX and DY until they are read or MOTION is read again.<br /> char dx = ADNS_read(DELTA_X_REG);<br /> char dy = ADNS_read(DELTA_Y_REG);<br /> Serial.print("MOTION REG:");<br /> Serial.print(MR, DEC);<br /> Serial.print("DELTA:");<br /> Serial.print(dx, DEC);<br /> Serial.print(" ");<br /> Serial.println(dy, DEC);<br /> delay(200);<br />}<br /><br />void sync() {<br /> digitalWrite(NCS, LOW);<br /> delayMicroseconds(2);<br /> digitalWrite(NCS, HIGH);<br />}<br /><br />byte ADNS_read(byte address) {<br /> digitalWrite(NCS, LOW);// select the chip<br /> pinMode (SDIO, OUTPUT);<br /> <br /> for (byte i=128; i >0 ; i >>= 1) {<br /> digitalWrite (SCLK, LOW);<br /> digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);<br /> delayMicroseconds(3); // tSWR = 20us min.<br /> digitalWrite (SCLK, HIGH);<br /> }<br /><br /> pinMode (SDIO, INPUT);<br /><br /> delayMicroseconds(20); // tSWR = 20us min.<br /><br /> byte res = 0;<br /> for (byte i=128; i >0 ; i >>= 1) {<br /> delayMicroseconds(3); // tSWR = 20us min.<br /> digitalWrite (SCLK, LOW);<br /> digitalWrite (SCLK, HIGH);<br /> if( digitalRead (SDIO) == HIGH )<br /> res |= i;<br /> }<br /><br /> digitalWrite(NCS, HIGH);// de-select the chip<br /> return res;<br />}<br /><br />void ADNS_write(byte address, byte data) {<br /> digitalWrite(NCS, LOW);// select the chip<br /> pinMode (SDIO, OUTPUT);<br /> address |= 128; <br /> for (byte i = 128; i > 0 ; i >>= 1) {<br /> digitalWrite (SCLK, LOW);<br /> digitalWrite (SDIO, (address & i) != 0 ? HIGH : LOW);<br /> delayMicroseconds(3); // tSWR = 20us min.<br /> digitalWrite (SCLK, HIGH);<br /> }<br /> <br /> delayMicroseconds(30); // tSWW = 30us min.<br /><br /> for (byte i = 128; i > 0 ; i >>= 1) {<br /> digitalWrite (SCLK, LOW);<br /> digitalWrite (SDIO, (data & i) != 0 ? HIGH : LOW);<br /> delayMicroseconds(3); // tSWR = 20us min.<br /> digitalWrite (SCLK, HIGH);<br /> }<br /><br /> digitalWrite(NCS, HIGH);// de-select the chip<br />}<br />Alvaro Serdottehttps://www.blogger.com/profile/03111861830918758761noreply@blogger.com