Test of ADNS3080 on DISCO_F429ZI

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI mbed

Fork of ADNS3080_HelloWorld by ryosuke yumoto

Committer:
ryosuke
Date:
Fri Aug 08 06:36:15 2014 +0000
Revision:
1:46abb3b9347d
Parent:
0:9beaad87014d
this program is a test program of ADNS 3080 optical flow sensor. this optical flow sensor board is developed by 3DRobotics.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryosuke 1:46abb3b9347d 1 /*
ryosuke 1:46abb3b9347d 2 *author Ryosuke Yumoto
ryosuke 1:46abb3b9347d 3 */
ryosuke 0:9beaad87014d 4 #include "ADNS3080.h"
ryosuke 0:9beaad87014d 5
ryosuke 0:9beaad87014d 6 ADNS3080::ADNS3080(PinName mosi,
ryosuke 0:9beaad87014d 7 PinName miso,
ryosuke 0:9beaad87014d 8 PinName sck,
ryosuke 0:9beaad87014d 9 PinName cs) : spi_(mosi, miso, sck), nCS_(cs){
ryosuke 0:9beaad87014d 10
ryosuke 0:9beaad87014d 11 spi_.frequency(2000000);
ryosuke 0:9beaad87014d 12 spi_.format(8, 3);
ryosuke 0:9beaad87014d 13
ryosuke 0:9beaad87014d 14 nCS_=1;
ryosuke 0:9beaad87014d 15
ryosuke 0:9beaad87014d 16 wait_us(500);
ryosuke 0:9beaad87014d 17
ryosuke 0:9beaad87014d 18 }
ryosuke 1:46abb3b9347d 19 //
ryosuke 0:9beaad87014d 20 int ADNS3080::getProdID(void) {
ryosuke 0:9beaad87014d 21
ryosuke 0:9beaad87014d 22 return ReadRegister(ADNS3080_PRODUCT_ID);
ryosuke 0:9beaad87014d 23
ryosuke 0:9beaad87014d 24 }
ryosuke 0:9beaad87014d 25
ryosuke 0:9beaad87014d 26 int ADNS3080::getRevID(void) {
ryosuke 0:9beaad87014d 27
ryosuke 0:9beaad87014d 28 return ReadRegister(ADNS3080_REVISION_ID);
ryosuke 0:9beaad87014d 29
ryosuke 0:9beaad87014d 30 }
ryosuke 0:9beaad87014d 31
ryosuke 0:9beaad87014d 32 int ADNS3080::getMotion(void) {
ryosuke 0:9beaad87014d 33
ryosuke 0:9beaad87014d 34 return ReadRegister(ADNS3080_MOTION);
ryosuke 0:9beaad87014d 35
ryosuke 0:9beaad87014d 36 }
ryosuke 0:9beaad87014d 37
ryosuke 0:9beaad87014d 38 signed char ADNS3080::getDelta_X(void) {
ryosuke 0:9beaad87014d 39
ryosuke 0:9beaad87014d 40 return ReadRegister(ADNS3080_DELTA_X);
ryosuke 0:9beaad87014d 41
ryosuke 0:9beaad87014d 42 }
ryosuke 0:9beaad87014d 43
ryosuke 0:9beaad87014d 44 signed char ADNS3080::getDelta_Y(void) {
ryosuke 0:9beaad87014d 45
ryosuke 0:9beaad87014d 46 return ReadRegister(ADNS3080_DELTA_Y);
ryosuke 0:9beaad87014d 47
ryosuke 0:9beaad87014d 48 }
ryosuke 0:9beaad87014d 49
ryosuke 1:46abb3b9347d 50 unsigned int ADNS3080::getSQUAL(void) {
ryosuke 1:46abb3b9347d 51
ryosuke 1:46abb3b9347d 52 return ReadRegister(ADNS3080_SQUAL);
ryosuke 1:46abb3b9347d 53
ryosuke 1:46abb3b9347d 54 }
ryosuke 1:46abb3b9347d 55
ryosuke 1:46abb3b9347d 56 unsigned short ADNS3080::getPixel_sum(void) {
ryosuke 1:46abb3b9347d 57
ryosuke 1:46abb3b9347d 58 return ReadRegister(ADNS3080_PIXEL_SUM);
ryosuke 1:46abb3b9347d 59
ryosuke 1:46abb3b9347d 60 }
ryosuke 1:46abb3b9347d 61
ryosuke 1:46abb3b9347d 62 char ADNS3080::getMax_Pixel(void) {
ryosuke 1:46abb3b9347d 63
ryosuke 1:46abb3b9347d 64 return ReadRegister(ADNS3080_MAXIMUM_PIXEL);
ryosuke 1:46abb3b9347d 65
ryosuke 1:46abb3b9347d 66 }
ryosuke 1:46abb3b9347d 67
ryosuke 1:46abb3b9347d 68 int ADNS3080::getConfiguration_bits(void){
ryosuke 1:46abb3b9347d 69
ryosuke 1:46abb3b9347d 70 return ReadRegister(ADNS3080_CONFIGURATION_BITS);
ryosuke 1:46abb3b9347d 71
ryosuke 1:46abb3b9347d 72 }
ryosuke 1:46abb3b9347d 73
ryosuke 1:46abb3b9347d 74 void ADNS3080::setConfiguration_bits(char configuration){
ryosuke 1:46abb3b9347d 75
ryosuke 1:46abb3b9347d 76 WriteRegister(ADNS3080_CONFIGURATION_BITS, configuration);
ryosuke 1:46abb3b9347d 77
ryosuke 1:46abb3b9347d 78 }
ryosuke 1:46abb3b9347d 79
ryosuke 1:46abb3b9347d 80 int ADNS3080::getExtended_config(void){
ryosuke 1:46abb3b9347d 81
ryosuke 1:46abb3b9347d 82 return ReadRegister(ADNS3080_EXTENDED_CONFIG);
ryosuke 1:46abb3b9347d 83
ryosuke 1:46abb3b9347d 84 }
ryosuke 1:46abb3b9347d 85 void ADNS3080::setExtended_config(char extended_config){
ryosuke 1:46abb3b9347d 86
ryosuke 1:46abb3b9347d 87 WriteRegister(ADNS3080_EXTENDED_CONFIG, extended_config);
ryosuke 1:46abb3b9347d 88
ryosuke 1:46abb3b9347d 89 }
ryosuke 1:46abb3b9347d 90
ryosuke 1:46abb3b9347d 91 /*
ryosuke 1:46abb3b9347d 92 short getData_Out(void){
ryosuke 1:46abb3b9347d 93
ryosuke 1:46abb3b9347d 94 ReadRegister(ADNS3080_DATA_OUT_UPPER);
ryosuke 1:46abb3b9347d 95 ReadRegister(ADNS3080_DATA_OUT_LOWER);
ryosuke 1:46abb3b9347d 96
ryosuke 1:46abb3b9347d 97 }
ryosuke 1:46abb3b9347d 98 unsigned int getShutter(void);
ryosuke 1:46abb3b9347d 99 unsigned int getFrame_Period(void);
ryosuke 1:46abb3b9347d 100 void Motion_Clear(void);
ryosuke 1:46abb3b9347d 101 */
ryosuke 1:46abb3b9347d 102
ryosuke 0:9beaad87014d 103 int ADNS3080::getInverProdID(void) {
ryosuke 0:9beaad87014d 104
ryosuke 0:9beaad87014d 105 return ReadRegister(ADNS3080_INVERSE_PRODUCT_ID);
ryosuke 0:9beaad87014d 106
ryosuke 0:9beaad87014d 107 }
ryosuke 0:9beaad87014d 108
ryosuke 0:9beaad87014d 109 int ADNS3080::ReadRegister(int address) {
ryosuke 0:9beaad87014d 110
ryosuke 0:9beaad87014d 111 int tx = (ADNS3080_SPI_READ | address);
ryosuke 0:9beaad87014d 112 int rx = 0;
ryosuke 0:9beaad87014d 113
ryosuke 0:9beaad87014d 114 nCS_=0;
ryosuke 0:9beaad87014d 115
ryosuke 0:9beaad87014d 116 spi_.write(tx);
ryosuke 0:9beaad87014d 117 wait_us(50);
ryosuke 0:9beaad87014d 118 rx = spi_.write(0x00);
ryosuke 0:9beaad87014d 119 nCS_ = 1;
ryosuke 0:9beaad87014d 120
ryosuke 0:9beaad87014d 121 return rx;
ryosuke 0:9beaad87014d 122 }
ryosuke 0:9beaad87014d 123
ryosuke 0:9beaad87014d 124 void ADNS3080::WriteRegister(int address, char data) {
ryosuke 0:9beaad87014d 125
ryosuke 0:9beaad87014d 126 int tx = ( ADNS3080_SPI_WRITE | address);
ryosuke 0:9beaad87014d 127
ryosuke 0:9beaad87014d 128 nCS_=0;
ryosuke 0:9beaad87014d 129 spi_.write(tx);
ryosuke 0:9beaad87014d 130 spi_.write(data);
ryosuke 0:9beaad87014d 131
ryosuke 0:9beaad87014d 132 nCS_=1;
ryosuke 0:9beaad87014d 133
ryosuke 0:9beaad87014d 134 }