C Library for mbedWSE project based single board computer for hardware peripherals

Fork of mbedWSEsbc by Joseph Bradshaw

Committer:
jebradshaw
Date:
Mon Nov 03 20:04:52 2014 +0000
Revision:
9:56c77746e6a8
Parent:
7:740d112d934d
Child:
10:99ac73080abd
Removed PWM period declaration from library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 4:1aa4a75f6885 1 /* C Library for the WSE-PROJ-SBC
jebradshaw 4:1aa4a75f6885 2 J Bradshaw
jebradshaw 9:56c77746e6a8 3
jebradshaw 9:56c77746e6a8 4 20141103 J Bradshaw - Removed PWM period decleration
jebradshaw 9:56c77746e6a8 5
jebradshaw 9:56c77746e6a8 6 20141021 J Bradshaw - Added comments for ADC function
jebradshaw 9:56c77746e6a8 7
jebradshaw 4:1aa4a75f6885 8 20140918 J Bradshaw - Found CS mistake in Encoder routines
jebradshaw 4:1aa4a75f6885 9 Added comments in Init function, encoder functions
jebradshaw 9:56c77746e6a8 10
jebradshaw 9:56c77746e6a8 11 20140912 J Bradshaw - First version of library (C-Functions and definitions)
jebradshaw 4:1aa4a75f6885 12 */
jebradshaw 0:dbd8b5c35d0f 13
jebradshaw 4:1aa4a75f6885 14
jebradshaw 4:1aa4a75f6885 15 // LS7366 ENCODER IC DEFINITIONS
jebradshaw 0:dbd8b5c35d0f 16 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 17 // Four commands for the Instruction Register (B7,B6) - LS7366
jebradshaw 0:dbd8b5c35d0f 18 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 19 #define CLR 0x00 //Clear Instruction
jebradshaw 0:dbd8b5c35d0f 20 #define RD 0x01 //Read Instruction
jebradshaw 0:dbd8b5c35d0f 21 #define WR 0x02 //Write Instruction
jebradshaw 0:dbd8b5c35d0f 22 #define LOAD 0x03 //Load Instruction
jebradshaw 0:dbd8b5c35d0f 23
jebradshaw 0:dbd8b5c35d0f 24 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 25 // Register to Select from the Instruction Register (B5,B4,B3) - LS7366
jebradshaw 0:dbd8b5c35d0f 26 //=============================================================================
jebradshaw 0:dbd8b5c35d0f 27 #define NONE 0x00 //No Register Selected
jebradshaw 0:dbd8b5c35d0f 28 #define MDR0 0x01 //Mode Register 0
jebradshaw 0:dbd8b5c35d0f 29 #define MDR1 0x02 //Mode Register 1
jebradshaw 0:dbd8b5c35d0f 30 #define DTR 0x03 //Data Transfer Register
jebradshaw 0:dbd8b5c35d0f 31 #define CNTR 0x04 //Software Configurable Counter Register
jebradshaw 0:dbd8b5c35d0f 32 #define OTR 0x05 //Output Transfer Register
jebradshaw 0:dbd8b5c35d0f 33 #define STR 0x06 //Status Register
jebradshaw 0:dbd8b5c35d0f 34 #define NONE_REG 0x07 //No Register Selected
jebradshaw 0:dbd8b5c35d0f 35
jebradshaw 0:dbd8b5c35d0f 36 // Set-up hardwired IO
jebradshaw 0:dbd8b5c35d0f 37 SPI spi_max1270(p5, p6, p7);
jebradshaw 0:dbd8b5c35d0f 38 SPI spi(p5, p6, p7);
jebradshaw 4:1aa4a75f6885 39 DigitalOut max1270_cs(p8); //CS for MAX1270 ADC (U3)
jebradshaw 4:1aa4a75f6885 40 DigitalOut max522_cs(p11); //CS for MAX522 DAC (U5)
jebradshaw 0:dbd8b5c35d0f 41
jebradshaw 4:1aa4a75f6885 42 DigitalOut ls7166_cs1(p19); //CS for LS7366-1 (U8)
jebradshaw 4:1aa4a75f6885 43 DigitalOut ls7166_cs2(p20); //CS for LS7366-2 (U9)
jebradshaw 0:dbd8b5c35d0f 44
jebradshaw 4:1aa4a75f6885 45 DigitalOut mot1_ph1(p21);
jebradshaw 0:dbd8b5c35d0f 46 DigitalOut mot1_ph2(p22);
jebradshaw 0:dbd8b5c35d0f 47 PwmOut mot_en1(p23);
jebradshaw 0:dbd8b5c35d0f 48
jebradshaw 0:dbd8b5c35d0f 49 DigitalOut mot2_ph1(p24);
jebradshaw 0:dbd8b5c35d0f 50 DigitalOut mot2_ph2(p25);
jebradshaw 0:dbd8b5c35d0f 51 PwmOut mot_en2(p26);
jebradshaw 0:dbd8b5c35d0f 52
jebradshaw 0:dbd8b5c35d0f 53 DigitalOut led1(LED1);
jebradshaw 0:dbd8b5c35d0f 54 DigitalOut led2(LED2);
jebradshaw 0:dbd8b5c35d0f 55 DigitalOut led3(LED3);
jebradshaw 0:dbd8b5c35d0f 56 DigitalOut led4(LED4);
jebradshaw 0:dbd8b5c35d0f 57
jebradshaw 0:dbd8b5c35d0f 58 Serial pc(USBTX, USBRX); // tx, rx for serial USB interface to pc
jebradshaw 0:dbd8b5c35d0f 59 Serial xbee(p13, p14); // tx, rx for Xbee
jebradshaw 0:dbd8b5c35d0f 60 Timer t; // create timer instance
jebradshaw 0:dbd8b5c35d0f 61
jebradshaw 0:dbd8b5c35d0f 62 // ------ Prototypes -----------
jebradshaw 0:dbd8b5c35d0f 63 int read_max1270(int chan, int range, int bipol);
jebradshaw 0:dbd8b5c35d0f 64 float read_max1270_volts(int chan, int range, int bipol);
jebradshaw 0:dbd8b5c35d0f 65 void mot_control(int drv_num, float dc);
jebradshaw 0:dbd8b5c35d0f 66 void LS7366_cmd(int inst, int reg);
jebradshaw 0:dbd8b5c35d0f 67 long LS7366_read_counter(int chan_num);
jebradshaw 0:dbd8b5c35d0f 68 void LS7366_quad_mode_x4(int chan_num);
jebradshaw 0:dbd8b5c35d0f 69 void LS7366_reset_counter(int chan_num);
jebradshaw 0:dbd8b5c35d0f 70 void LS7366_write_DTR(int chan_num,long enc_value);
jebradshaw 0:dbd8b5c35d0f 71 void write_max522(int chan, float volts);
jebradshaw 0:dbd8b5c35d0f 72
jebradshaw 0:dbd8b5c35d0f 73 //---- Function Listing -------------------------------
jebradshaw 7:740d112d934d 74 // return integer - 12 bit ADC result
jebradshaw 7:740d112d934d 75 // chan - integer from 0 - 7
jebradshaw 7:740d112d934d 76 // range - 0: 0 - 5 volts, 1: 0 - 10V
jebradshaw 7:740d112d934d 77 // bipol - 0: 0 - 5 volts, 0 - 10V, 1 for +/- 5 volts, +/- 10 volts
jebradshaw 0:dbd8b5c35d0f 78 int read_max1270(int chan, int range, int bipol){
jebradshaw 0:dbd8b5c35d0f 79 int cword=0x80; //set the start bit
jebradshaw 0:dbd8b5c35d0f 80
jebradshaw 0:dbd8b5c35d0f 81 spi_max1270.frequency(10000000);
jebradshaw 0:dbd8b5c35d0f 82 spi_max1270.format(8, 0); // 8 data bits, CPOL0, and CPHA0 (datasheet Digital Interface)
jebradshaw 0:dbd8b5c35d0f 83
jebradshaw 0:dbd8b5c35d0f 84 cword |= (chan << 4); //shift channel
jebradshaw 0:dbd8b5c35d0f 85 cword |= (range << 3);
jebradshaw 0:dbd8b5c35d0f 86 cword |= (bipol << 2);
jebradshaw 0:dbd8b5c35d0f 87
jebradshaw 0:dbd8b5c35d0f 88 max1270_cs = 0;
jebradshaw 0:dbd8b5c35d0f 89
jebradshaw 0:dbd8b5c35d0f 90 spi_max1270.write(cword);
jebradshaw 0:dbd8b5c35d0f 91 wait_us(15); //15us
jebradshaw 0:dbd8b5c35d0f 92 spi_max1270.format(12, 3);
jebradshaw 0:dbd8b5c35d0f 93
jebradshaw 0:dbd8b5c35d0f 94 int result = spi_max1270.write(0);
jebradshaw 0:dbd8b5c35d0f 95
jebradshaw 0:dbd8b5c35d0f 96 max1270_cs = 1;
jebradshaw 0:dbd8b5c35d0f 97 spi_max1270.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 98 return result;
jebradshaw 0:dbd8b5c35d0f 99 }
jebradshaw 0:dbd8b5c35d0f 100
jebradshaw 0:dbd8b5c35d0f 101 float read_max1270_volts(int chan, int range, int bipol){
jebradshaw 0:dbd8b5c35d0f 102 float rangevolts=0.0;
jebradshaw 0:dbd8b5c35d0f 103 float volts=0.0;
jebradshaw 0:dbd8b5c35d0f 104 int adc_res;
jebradshaw 0:dbd8b5c35d0f 105
jebradshaw 0:dbd8b5c35d0f 106 //read the ADC converter
jebradshaw 0:dbd8b5c35d0f 107 adc_res = read_max1270(chan, range, bipol) & 0xFFF;
jebradshaw 0:dbd8b5c35d0f 108
jebradshaw 0:dbd8b5c35d0f 109 //Determine the voltage range
jebradshaw 0:dbd8b5c35d0f 110 if(range) //RNG bit
jebradshaw 0:dbd8b5c35d0f 111 rangevolts=10.0;
jebradshaw 0:dbd8b5c35d0f 112 else
jebradshaw 0:dbd8b5c35d0f 113 rangevolts=5.0;
jebradshaw 0:dbd8b5c35d0f 114
jebradshaw 0:dbd8b5c35d0f 115 //bi-polar input range
jebradshaw 0:dbd8b5c35d0f 116 if(bipol){ //BIP is set, input is +/-
jebradshaw 0:dbd8b5c35d0f 117 if(adc_res < 0x800){ //if result was positive
jebradshaw 0:dbd8b5c35d0f 118 volts = ((float)adc_res/0x7FF) * rangevolts;
jebradshaw 0:dbd8b5c35d0f 119 }
jebradshaw 0:dbd8b5c35d0f 120 else{ //result was negative
jebradshaw 0:dbd8b5c35d0f 121 volts = -(-((float)adc_res/0x7FF) * rangevolts) - (rangevolts * 2.0);
jebradshaw 0:dbd8b5c35d0f 122 }
jebradshaw 0:dbd8b5c35d0f 123 }
jebradshaw 0:dbd8b5c35d0f 124 else{ //input is positive polarity only
jebradshaw 0:dbd8b5c35d0f 125 volts = ((float)adc_res/0xFFF) * rangevolts;
jebradshaw 0:dbd8b5c35d0f 126 }
jebradshaw 0:dbd8b5c35d0f 127
jebradshaw 0:dbd8b5c35d0f 128 return volts;
jebradshaw 0:dbd8b5c35d0f 129 }
jebradshaw 0:dbd8b5c35d0f 130
jebradshaw 0:dbd8b5c35d0f 131 //Motor control routine for PWM on 5 pin motor driver header
jebradshaw 0:dbd8b5c35d0f 132 // drv_num is 1 or 2 (defaults to 1, anything but 2)
jebradshaw 0:dbd8b5c35d0f 133 // dc is signed duty cycle (+/-1.0)
jebradshaw 0:dbd8b5c35d0f 134
jebradshaw 0:dbd8b5c35d0f 135 void mot_control(int drv_num, float dc){
jebradshaw 0:dbd8b5c35d0f 136 if(dc>1.0)
jebradshaw 0:dbd8b5c35d0f 137 dc=1.0;
jebradshaw 0:dbd8b5c35d0f 138 if(dc<-1.0)
jebradshaw 0:dbd8b5c35d0f 139 dc=-1.0;
jebradshaw 0:dbd8b5c35d0f 140
jebradshaw 0:dbd8b5c35d0f 141 if(drv_num != 2){
jebradshaw 0:dbd8b5c35d0f 142 if(dc > 0.0){
jebradshaw 0:dbd8b5c35d0f 143 mot1_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 144 mot1_ph1 = 1;
jebradshaw 0:dbd8b5c35d0f 145 mot_en1 = dc;
jebradshaw 0:dbd8b5c35d0f 146 }
jebradshaw 0:dbd8b5c35d0f 147 else if(dc < -0.0){
jebradshaw 0:dbd8b5c35d0f 148 mot1_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 149 mot1_ph2 = 1;
jebradshaw 0:dbd8b5c35d0f 150 mot_en1 = abs(dc);
jebradshaw 0:dbd8b5c35d0f 151 }
jebradshaw 0:dbd8b5c35d0f 152 else{
jebradshaw 0:dbd8b5c35d0f 153 mot1_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 154 mot1_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 155 mot_en1 = 0.0;
jebradshaw 0:dbd8b5c35d0f 156 }
jebradshaw 0:dbd8b5c35d0f 157 }
jebradshaw 0:dbd8b5c35d0f 158 else{
jebradshaw 0:dbd8b5c35d0f 159 if(dc > 0.0){
jebradshaw 0:dbd8b5c35d0f 160 mot2_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 161 mot2_ph1 = 1;
jebradshaw 0:dbd8b5c35d0f 162 mot_en2 = dc;
jebradshaw 0:dbd8b5c35d0f 163 }
jebradshaw 0:dbd8b5c35d0f 164 else if(dc < -0.0){
jebradshaw 0:dbd8b5c35d0f 165 mot2_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 166 mot2_ph2 = 1;
jebradshaw 0:dbd8b5c35d0f 167 mot_en2 = abs(dc);
jebradshaw 0:dbd8b5c35d0f 168 }
jebradshaw 0:dbd8b5c35d0f 169 else{
jebradshaw 0:dbd8b5c35d0f 170 mot2_ph1 = 0;
jebradshaw 0:dbd8b5c35d0f 171 mot2_ph2 = 0;
jebradshaw 0:dbd8b5c35d0f 172 mot_en2 = 0.0;
jebradshaw 0:dbd8b5c35d0f 173 }
jebradshaw 0:dbd8b5c35d0f 174 }
jebradshaw 0:dbd8b5c35d0f 175 }
jebradshaw 0:dbd8b5c35d0f 176
jebradshaw 0:dbd8b5c35d0f 177 //----- LS7366 Encoder/Counter Routines --------------------
jebradshaw 0:dbd8b5c35d0f 178 void LS7366_cmd(int inst, int reg){
jebradshaw 0:dbd8b5c35d0f 179 char cmd;
jebradshaw 0:dbd8b5c35d0f 180
jebradshaw 0:dbd8b5c35d0f 181 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 182 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 183 cmd = (inst << 6) | (reg << 3);
jebradshaw 0:dbd8b5c35d0f 184 // printf("\r\ncmd=0X%2X", cmd);
jebradshaw 0:dbd8b5c35d0f 185 spi.write(cmd);
jebradshaw 0:dbd8b5c35d0f 186 }
jebradshaw 0:dbd8b5c35d0f 187
jebradshaw 0:dbd8b5c35d0f 188 long LS7366_read_counter(int chan_num){
jebradshaw 0:dbd8b5c35d0f 189 union bytes{
jebradshaw 0:dbd8b5c35d0f 190 char byte_enc[4];
jebradshaw 0:dbd8b5c35d0f 191 long long_enc;
jebradshaw 0:dbd8b5c35d0f 192 }counter;
jebradshaw 0:dbd8b5c35d0f 193
jebradshaw 0:dbd8b5c35d0f 194 counter.long_enc = 0;
jebradshaw 0:dbd8b5c35d0f 195
jebradshaw 0:dbd8b5c35d0f 196 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 197 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 198
jebradshaw 0:dbd8b5c35d0f 199 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 200 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 201 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 202 LS7366_cmd(LOAD,OTR);//cmd = 0xe8, LOAD to OTR
jebradshaw 0:dbd8b5c35d0f 203 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 204 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 205 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 206 }
jebradshaw 0:dbd8b5c35d0f 207 else{
jebradshaw 0:dbd8b5c35d0f 208 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 209 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 210 LS7366_cmd(LOAD,OTR);//cmd = 0xe8, LOAD to OTR
jebradshaw 0:dbd8b5c35d0f 211 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 212 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 213
jebradshaw 0:dbd8b5c35d0f 214 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 215 }
jebradshaw 0:dbd8b5c35d0f 216 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 217 LS7366_cmd(RD,CNTR); //cmd = 0x60, READ from CNTR
jebradshaw 0:dbd8b5c35d0f 218 counter.byte_enc[3] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 219 counter.byte_enc[2] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 220 counter.byte_enc[1] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 221 counter.byte_enc[0] = spi.write(0x00);
jebradshaw 0:dbd8b5c35d0f 222
jebradshaw 0:dbd8b5c35d0f 223 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 224 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 225 }
jebradshaw 0:dbd8b5c35d0f 226 else{
jebradshaw 0:dbd8b5c35d0f 227 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 228 }
jebradshaw 0:dbd8b5c35d0f 229
jebradshaw 0:dbd8b5c35d0f 230 return counter.long_enc; //return count
jebradshaw 0:dbd8b5c35d0f 231 }
jebradshaw 0:dbd8b5c35d0f 232
jebradshaw 0:dbd8b5c35d0f 233 void LS7366_quad_mode_x4(int chan_num){
jebradshaw 0:dbd8b5c35d0f 234
jebradshaw 0:dbd8b5c35d0f 235 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 236 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 237
jebradshaw 0:dbd8b5c35d0f 238 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 239 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 240 }
jebradshaw 0:dbd8b5c35d0f 241 else{
jebradshaw 0:dbd8b5c35d0f 242 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 243 }
jebradshaw 0:dbd8b5c35d0f 244 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 245 LS7366_cmd(WR,MDR0);// Write to the MDR0 register
jebradshaw 4:1aa4a75f6885 246 wait_us(1);
jebradshaw 0:dbd8b5c35d0f 247 spi.write(0x03); // X4 quadrature count mode
jebradshaw 0:dbd8b5c35d0f 248 if(chan_num!=2){
jebradshaw 0:dbd8b5c35d0f 249 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 250 }
jebradshaw 0:dbd8b5c35d0f 251 else{
jebradshaw 0:dbd8b5c35d0f 252 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 253 }
jebradshaw 0:dbd8b5c35d0f 254 }
jebradshaw 0:dbd8b5c35d0f 255
jebradshaw 4:1aa4a75f6885 256 void LS7366_reset_counter(int chan_num){
jebradshaw 4:1aa4a75f6885 257 spi.format(8, 0); // set up SPI for 8 data bits, mode 0
jebradshaw 4:1aa4a75f6885 258 spi.frequency(2000000); // 2MHz SPI clock
jebradshaw 0:dbd8b5c35d0f 259
jebradshaw 4:1aa4a75f6885 260 if(chan_num!=2){ // activate chip select
jebradshaw 0:dbd8b5c35d0f 261 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 262 }
jebradshaw 0:dbd8b5c35d0f 263 else{
jebradshaw 0:dbd8b5c35d0f 264 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 265 }
jebradshaw 4:1aa4a75f6885 266 wait_us(1); // short delay
jebradshaw 4:1aa4a75f6885 267 LS7366_cmd(CLR,CNTR); // Clear the counter register
jebradshaw 4:1aa4a75f6885 268 if(chan_num!=2){ // de-activate chip select
jebradshaw 0:dbd8b5c35d0f 269 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 270 }
jebradshaw 0:dbd8b5c35d0f 271 else{
jebradshaw 4:1aa4a75f6885 272 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 273 }
jebradshaw 4:1aa4a75f6885 274 wait_us(1); // short delay
jebradshaw 0:dbd8b5c35d0f 275
jebradshaw 4:1aa4a75f6885 276 if(chan_num!=2){ // activate chip select
jebradshaw 0:dbd8b5c35d0f 277 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 278 }
jebradshaw 0:dbd8b5c35d0f 279 else{
jebradshaw 0:dbd8b5c35d0f 280 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 281 }
jebradshaw 4:1aa4a75f6885 282 wait_us(1); // short delay
jebradshaw 4:1aa4a75f6885 283 LS7366_cmd(LOAD,CNTR); // load counter reg
jebradshaw 4:1aa4a75f6885 284 if(chan_num!=2){ // de-activate chip select
jebradshaw 0:dbd8b5c35d0f 285 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 286 }
jebradshaw 0:dbd8b5c35d0f 287 else{
jebradshaw 4:1aa4a75f6885 288 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 289 }
jebradshaw 0:dbd8b5c35d0f 290 }
jebradshaw 0:dbd8b5c35d0f 291
jebradshaw 4:1aa4a75f6885 292 void LS7366_write_DTR(int chan_num, long enc_value){
jebradshaw 4:1aa4a75f6885 293 union bytes // Union to speed up byte writes
jebradshaw 0:dbd8b5c35d0f 294 {
jebradshaw 0:dbd8b5c35d0f 295 char byte_enc[4];
jebradshaw 0:dbd8b5c35d0f 296 long long_enc;
jebradshaw 0:dbd8b5c35d0f 297 }counter;
jebradshaw 0:dbd8b5c35d0f 298
jebradshaw 4:1aa4a75f6885 299 spi.format(8, 0); // set up SPI for 8 data bits, mode 0
jebradshaw 4:1aa4a75f6885 300 spi.frequency(2000000); // 2MHz SPI clock
jebradshaw 0:dbd8b5c35d0f 301
jebradshaw 4:1aa4a75f6885 302 counter.long_enc = enc_value; // pass enc_value to Union
jebradshaw 0:dbd8b5c35d0f 303
jebradshaw 4:1aa4a75f6885 304 if(chan_num!=2){ // activate chip select
jebradshaw 0:dbd8b5c35d0f 305 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 306 }
jebradshaw 0:dbd8b5c35d0f 307 else{
jebradshaw 0:dbd8b5c35d0f 308 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 309 }
jebradshaw 4:1aa4a75f6885 310 wait_us(1); // short delay
jebradshaw 4:1aa4a75f6885 311 LS7366_cmd(WR,DTR); // Write to the Data Transfer Register
jebradshaw 4:1aa4a75f6885 312 spi.write(counter.byte_enc[3]); // Write the 32-bit encoder value
jebradshaw 0:dbd8b5c35d0f 313 spi.write(counter.byte_enc[2]);
jebradshaw 0:dbd8b5c35d0f 314 spi.write(counter.byte_enc[1]);
jebradshaw 0:dbd8b5c35d0f 315 spi.write(counter.byte_enc[0]);
jebradshaw 4:1aa4a75f6885 316 if(chan_num!=2){ // de-activate the chip select
jebradshaw 0:dbd8b5c35d0f 317 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 318 }
jebradshaw 0:dbd8b5c35d0f 319 else{
jebradshaw 0:dbd8b5c35d0f 320 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 321 }
jebradshaw 0:dbd8b5c35d0f 322
jebradshaw 4:1aa4a75f6885 323 wait_us(1); // short delay
jebradshaw 4:1aa4a75f6885 324 if(chan_num!=2){ // activate chip select
jebradshaw 0:dbd8b5c35d0f 325 ls7166_cs1 = 0;
jebradshaw 0:dbd8b5c35d0f 326 }
jebradshaw 0:dbd8b5c35d0f 327 else{
jebradshaw 0:dbd8b5c35d0f 328 ls7166_cs2 = 0;
jebradshaw 0:dbd8b5c35d0f 329 }
jebradshaw 4:1aa4a75f6885 330 wait_us(1); // short delay
jebradshaw 4:1aa4a75f6885 331 LS7366_cmd(LOAD,CNTR); // load command to the counter register from DTR
jebradshaw 4:1aa4a75f6885 332 if(chan_num!=2){ // de-activate chip select
jebradshaw 0:dbd8b5c35d0f 333 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 334 }
jebradshaw 0:dbd8b5c35d0f 335 else{
jebradshaw 0:dbd8b5c35d0f 336 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 337 }
jebradshaw 0:dbd8b5c35d0f 338 }
jebradshaw 0:dbd8b5c35d0f 339
jebradshaw 0:dbd8b5c35d0f 340 //------- MAX522 routines ---------------------------------
jebradshaw 0:dbd8b5c35d0f 341 void write_max522(int chan, float volts){
jebradshaw 0:dbd8b5c35d0f 342 int cmd=0x20; //set UB3
jebradshaw 0:dbd8b5c35d0f 343 int data_word = (int)((volts/5.0) * 256.0);
jebradshaw 0:dbd8b5c35d0f 344 if(chan != 2)
jebradshaw 0:dbd8b5c35d0f 345 cmd |= 0x01; //set DAC A out
jebradshaw 0:dbd8b5c35d0f 346 else
jebradshaw 0:dbd8b5c35d0f 347 cmd |= 0x02; //set DACB out
jebradshaw 0:dbd8b5c35d0f 348
jebradshaw 0:dbd8b5c35d0f 349 // pc.printf("cmd=0x%4X data_word=0x%4X \r\n", cmd, data_word);
jebradshaw 0:dbd8b5c35d0f 350
jebradshaw 0:dbd8b5c35d0f 351 spi.format(8, 0);
jebradshaw 0:dbd8b5c35d0f 352 spi.frequency(2000000);
jebradshaw 0:dbd8b5c35d0f 353 max522_cs = 0;
jebradshaw 0:dbd8b5c35d0f 354 spi.write(cmd & 0xFF);
jebradshaw 0:dbd8b5c35d0f 355 spi.write(data_word & 0xFF);
jebradshaw 0:dbd8b5c35d0f 356 max522_cs = 1;
jebradshaw 0:dbd8b5c35d0f 357 }
jebradshaw 0:dbd8b5c35d0f 358
jebradshaw 1:85cd6d500385 359 void mbedWSEsbcInit(unsigned long pcbaud){
jebradshaw 4:1aa4a75f6885 360 led1 = 0; //Initialize all LEDs as off
jebradshaw 4:1aa4a75f6885 361 led2 = 0;
jebradshaw 4:1aa4a75f6885 362 led3 = 0;
jebradshaw 4:1aa4a75f6885 363 led4 = 0;
jebradshaw 4:1aa4a75f6885 364 max1270_cs = 1; //Initialize all chip selects as off
jebradshaw 0:dbd8b5c35d0f 365 max522_cs = 1;
jebradshaw 0:dbd8b5c35d0f 366 ls7166_cs1 = 1;
jebradshaw 0:dbd8b5c35d0f 367 ls7166_cs2 = 1;
jebradshaw 0:dbd8b5c35d0f 368
jebradshaw 0:dbd8b5c35d0f 369 wait(.2); //delay at beginning for voltage settle purposes
jebradshaw 0:dbd8b5c35d0f 370
jebradshaw 4:1aa4a75f6885 371 mot_en1.period_us(50); //20KHz for DC motor control PWM
jebradshaw 1:85cd6d500385 372 pc.baud(pcbaud); //Set up serial port baud rate
jebradshaw 4:1aa4a75f6885 373 pc.printf("\r\n");
jebradshaw 0:dbd8b5c35d0f 374 xbee.baud(9600);
jebradshaw 0:dbd8b5c35d0f 375
jebradshaw 0:dbd8b5c35d0f 376 LS7366_reset_counter(1);
jebradshaw 0:dbd8b5c35d0f 377 LS7366_quad_mode_x4(1);
jebradshaw 0:dbd8b5c35d0f 378 LS7366_write_DTR(1,0);
jebradshaw 0:dbd8b5c35d0f 379
jebradshaw 0:dbd8b5c35d0f 380 LS7366_reset_counter(2);
jebradshaw 0:dbd8b5c35d0f 381 LS7366_quad_mode_x4(2);
jebradshaw 0:dbd8b5c35d0f 382 LS7366_write_DTR(2,0);
jebradshaw 0:dbd8b5c35d0f 383
jebradshaw 0:dbd8b5c35d0f 384 t.start(); // Set up timer
jebradshaw 0:dbd8b5c35d0f 385 }//mbedWSEsbc_init()