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