sneakthief Posted August 30, 2007 Report Share Posted August 30, 2007 Is it possible to poll an AIN pin to control the DEFAULT_EXT_CLK_PULSEWIDTH variable? Maybe from 500uS to 1S? (and I realize that fast clock speeds + long pulsewidths may result in no pulse at all)For example, when using the MIDIbox CV this would be great for controlling various gear that responds to gate length. The read rate wouldn't have to be that frequent.I imagine I would stick it in in here: USER_AIN_NotifyChange return (more soon on this part of the code - just looking through other examples first) Quote Link to comment Share on other sites More sharing options...
sneakthief Posted August 31, 2007 Author Report Share Posted August 31, 2007 First of all, I'm a complete ASM newbie! I'm just taking a wild shot in the dark here, using some AIN-reading code from the Magic Midi Delay.How about something like this (with the appropraite variable declarations added beforehand): USER_AIN_NotifyChange ;; if pot number == 0, set the DEFAULT_EXT_CLK_PULSEWIDTH movf MIOS_PARAMETER1, W ;; we have a 10-bit result in MIOS_PARAMETER[23], but need a 8-bit value ;; shift value two times to the right (-> value / 4) clrc rrf MIOS_PARAMETER3, F ; 1 rrf MIOS_PARAMETER2, F clrc rrf MIOS_PARAMETER3, F ; 2 rrf MIOS_PARAMETER2, W ; -> WREG ;; 8-bit result is now in WREG, store value into DEFAULT_EXT_CLK_PULSEWIDTH register call PULSEWIDTH_Set ; with this function Function to set new PULSEWIDTH (which uses a table to scale the values accordingly): PULSEWIDTH_Set ;; calc address to timer value: PULSEWIDTH_TABLE clrf TMP2 ; clear help register clrc ; clear carry bit rlf DEFAULT_EXT_CLK_PULSEWIDTH, W ; shift DEFAULT_EXT_CLK_PULSEWIDTH value to the left (== PULSEWIDTH * 2) movwf TMP1 ; save result in TMP1 rlf TMP2, F ; shift TMP2 to the left (it's zero, but just for info) TABLE_ADDR PULSEWIDTH_TABLE ; this macro sets the base address movf TMP1, W ; add DEFAULT_EXT_CLK_PULSEWIDTH offset (number *2) to TABLPTR addwf TBLPTRL, F ; low-byte movf TMP2, W addwfc TBLPTRH, F ; high-byte (+carry bit on overrun) ;; read value from table and copy to MIOS_PARAMETER[12] tblrd*+ movff TABLAT, MIOS_PARAMETER1 tblrd*+ movff TABLAT, MIOS_PARAMETER2 ;; copy MIOS_PARAMETER2 to DEFAULT_EXT_CLK_PULSEWIDTH (is this necessary?????) movff MIOS_PARAMETER2, DEFAULT_EXT_CLK_PULSEWIDTH return And now for the scaling table - and I know these numbers need to be tweaked if I want to get the pulse width up to 1 second: PULSEWIDTH_TABLE dw 0xFFFF ; PULSEWIDTH: 0 dw 0xFFFF ; PULSEWIDTH: 1 dw 0xFFFF ; PULSEWIDTH: 2 dw 0xFFFF ; PULSEWIDTH: 3 dw 0xFFFF ; PULSEWIDTH: 4 dw 0xFFFF ; PULSEWIDTH: 5 dw 0xFFFF ; PULSEWIDTH: 6 dw 0xFFFF ; PULSEWIDTH: 7 dw 0xFFFF ; PULSEWIDTH: 8 dw 0xFFFF ; PULSEWIDTH: 9 dw 0xFFFF ; PULSEWIDTH: 10 dw 0xFFFF ; PULSEWIDTH: 11 dw 0xFFFF ; PULSEWIDTH: 12 dw 0xFFFF ; PULSEWIDTH: 13 dw 0xFFFF ; PULSEWIDTH: 14 dw 0xFFFF ; PULSEWIDTH: 15 dw 0xFFFF ; PULSEWIDTH: 16 dw 0xFFFF ; PULSEWIDTH: 17 dw 0xFFFF ; PULSEWIDTH: 18 dw 0xFFFF ; PULSEWIDTH: 19 dw 0xFFFF ; PULSEWIDTH: 20 dw 0xFFFF ; PULSEWIDTH: 21 dw 0xFFFF ; PULSEWIDTH: 22 dw 0xFFFF ; PULSEWIDTH: 23 dw 0xFFFF ; PULSEWIDTH: 24 dw 0xFFFF ; PULSEWIDTH: 25 dw 0xFFFF ; PULSEWIDTH: 26 dw 0xFFFF ; PULSEWIDTH: 27 dw 0xFFFF ; PULSEWIDTH: 28 dw 0xFFFF ; PULSEWIDTH: 29 dw 0xFFFF ; PULSEWIDTH: 30 dw 0xFFFF ; PULSEWIDTH: 31 dw 0xFFFF ; PULSEWIDTH: 32 dw 0xFFFF ; PULSEWIDTH: 33 dw 0xFFFF ; PULSEWIDTH: 34 dw 0xFFFF ; PULSEWIDTH: 35 dw 0xFFFF ; PULSEWIDTH: 36 dw 0xFFFF ; PULSEWIDTH: 37 dw 0xFFFF ; PULSEWIDTH: 38 dw 0xFFFF ; PULSEWIDTH: 39 dw 0xFFFF ; PULSEWIDTH: 40 dw 0xFFFF ; PULSEWIDTH: 41 dw 0xFFFF ; PULSEWIDTH: 42 dw 0xFFFF ; PULSEWIDTH: 43 dw 0xFFFF ; PULSEWIDTH: 44 dw 0xFFFF ; PULSEWIDTH: 45 dw 0xFFFF ; PULSEWIDTH: 46 dw 0xFFFF ; PULSEWIDTH: 47 dw 0xFE50 ; PULSEWIDTH: 48 dw 0xF91F ; PULSEWIDTH: 49 dw 0xF424 ; PULSEWIDTH: 50 dw 0xEF5A ; PULSEWIDTH: 51 dw 0xEAC0 ; PULSEWIDTH: 52 dw 0xE652 ; PULSEWIDTH: 53 dw 0xE20E ; PULSEWIDTH: 54 dw 0xDDF2 ; PULSEWIDTH: 55 dw 0xD9FB ; PULSEWIDTH: 56 dw 0xD628 ; PULSEWIDTH: 57 dw 0xD277 ; PULSEWIDTH: 58 dw 0xCEE6 ; PULSEWIDTH: 59 dw 0xCB73 ; PULSEWIDTH: 60 dw 0xC81D ; PULSEWIDTH: 61 dw 0xC4E3 ; PULSEWIDTH: 62 dw 0xC1C3 ; PULSEWIDTH: 63 dw 0xBEBC ; PULSEWIDTH: 64 dw 0xBBCC ; PULSEWIDTH: 65 dw 0xB8F4 ; PULSEWIDTH: 66 dw 0xB631 ; PULSEWIDTH: 67 dw 0xB383 ; PULSEWIDTH: 68 dw 0xB0E9 ; PULSEWIDTH: 69 dw 0xAE62 ; PULSEWIDTH: 70 dw 0xABEE ; PULSEWIDTH: 71 dw 0xA98A ; PULSEWIDTH: 72 dw 0xA738 ; PULSEWIDTH: 73 dw 0xA4F5 ; PULSEWIDTH: 74 dw 0xA2C2 ; PULSEWIDTH: 75 dw 0xA09E ; PULSEWIDTH: 76 dw 0x9E88 ; PULSEWIDTH: 77 dw 0x9C80 ; PULSEWIDTH: 78 dw 0x9A84 ; PULSEWIDTH: 79 dw 0x9896 ; PULSEWIDTH: 80 dw 0x96B4 ; PULSEWIDTH: 81 dw 0x94DD ; PULSEWIDTH: 82 dw 0x9312 ; PULSEWIDTH: 83 dw 0x9152 ; PULSEWIDTH: 84 dw 0x8F9C ; PULSEWIDTH: 85 dw 0x8DF1 ; PULSEWIDTH: 86 dw 0x8C4F ; PULSEWIDTH: 87 dw 0x8AB7 ; PULSEWIDTH: 88 dw 0x8928 ; PULSEWIDTH: 89 dw 0x87A2 ; PULSEWIDTH: 90 dw 0x8624 ; PULSEWIDTH: 91 dw 0x84AF ; PULSEWIDTH: 92 dw 0x8342 ; PULSEWIDTH: 93 dw 0x81DC ; PULSEWIDTH: 94 dw 0x807E ; PULSEWIDTH: 95 dw 0x7F28 ; PULSEWIDTH: 96 dw 0x7DD8 ; PULSEWIDTH: 97 dw 0x7C8F ; PULSEWIDTH: 98 dw 0x7B4D ; PULSEWIDTH: 99 dw 0x7A12 ; PULSEWIDTH: 100 dw 0x78DC ; PULSEWIDTH: 101 dw 0x77AD ; PULSEWIDTH: 102 dw 0x7683 ; PULSEWIDTH: 103 dw 0x7560 ; PULSEWIDTH: 104 dw 0x7441 ; PULSEWIDTH: 105 dw 0x7329 ; PULSEWIDTH: 106 dw 0x7215 ; PULSEWIDTH: 107 dw 0x7107 ; PULSEWIDTH: 108 dw 0x6FFD ; PULSEWIDTH: 109 dw 0x6EF9 ; PULSEWIDTH: 110 dw 0x6DF9 ; PULSEWIDTH: 111 dw 0x6CFD ; PULSEWIDTH: 112 dw 0x6C06 ; PULSEWIDTH: 113 dw 0x6B14 ; PULSEWIDTH: 114 dw 0x6A25 ; PULSEWIDTH: 115 dw 0x693B ; PULSEWIDTH: 116 dw 0x6855 ; PULSEWIDTH: 117 dw 0x6773 ; PULSEWIDTH: 118 dw 0x6694 ; PULSEWIDTH: 119 dw 0x65B9 ; PULSEWIDTH: 120 dw 0x64E2 ; PULSEWIDTH: 121 dw 0x640E ; PULSEWIDTH: 122 dw 0x633E ; PULSEWIDTH: 123 dw 0x6271 ; PULSEWIDTH: 124 dw 0x61A8 ; PULSEWIDTH: 125 dw 0x60E1 ; PULSEWIDTH: 126 dw 0x601E ; PULSEWIDTH: 127 dw 0x5F5E ; PULSEWIDTH: 128 dw 0x5EA0 ; PULSEWIDTH: 129 dw 0x5DE6 ; PULSEWIDTH: 130 dw 0x5D2E ; PULSEWIDTH: 131 dw 0x5C7A ; PULSEWIDTH: 132 dw 0x5BC8 ; PULSEWIDTH: 133 dw 0x5B18 ; PULSEWIDTH: 134 dw 0x5A6C ; PULSEWIDTH: 135 dw 0x59C1 ; PULSEWIDTH: 136 dw 0x591A ; PULSEWIDTH: 137 dw 0x5874 ; PULSEWIDTH: 138 dw 0x57D2 ; PULSEWIDTH: 139 dw 0x5731 ; PULSEWIDTH: 140 dw 0x5693 ; PULSEWIDTH: 141 dw 0x55F7 ; PULSEWIDTH: 142 dw 0x555D ; PULSEWIDTH: 143 dw 0x54C5 ; PULSEWIDTH: 144 dw 0x542F ; PULSEWIDTH: 145 dw 0x539C ; PULSEWIDTH: 146 dw 0x530A ; PULSEWIDTH: 147 dw 0x527A ; PULSEWIDTH: 148 dw 0x51ED ; PULSEWIDTH: 149 dw 0x5161 ; PULSEWIDTH: 150 dw 0x50D7 ; PULSEWIDTH: 151 dw 0x504F ; PULSEWIDTH: 152 dw 0x4FC8 ; PULSEWIDTH: 153 dw 0x4F44 ; PULSEWIDTH: 154 dw 0x4EC1 ; PULSEWIDTH: 155 dw 0x4E40 ; PULSEWIDTH: 156 dw 0x4DC0 ; PULSEWIDTH: 157 dw 0x4D42 ; PULSEWIDTH: 158 dw 0x4CC6 ; PULSEWIDTH: 159 dw 0x4C4B ; PULSEWIDTH: 160 dw 0x4BD1 ; PULSEWIDTH: 161 dw 0x4B5A ; PULSEWIDTH: 162 dw 0x4AE3 ; PULSEWIDTH: 163 dw 0x4A6E ; PULSEWIDTH: 164 dw 0x49FB ; PULSEWIDTH: 165 dw 0x4989 ; PULSEWIDTH: 166 dw 0x4918 ; PULSEWIDTH: 167 dw 0x48A9 ; PULSEWIDTH: 168 dw 0x483B ; PULSEWIDTH: 169 dw 0x47CE ; PULSEWIDTH: 170 dw 0x4762 ; PULSEWIDTH: 171 dw 0x46F8 ; PULSEWIDTH: 172 dw 0x468F ; PULSEWIDTH: 173 dw 0x4627 ; PULSEWIDTH: 174 dw 0x45C1 ; PULSEWIDTH: 175 dw 0x455B ; PULSEWIDTH: 176 dw 0x44F7 ; PULSEWIDTH: 177 dw 0x4494 ; PULSEWIDTH: 178 dw 0x4432 ; PULSEWIDTH: 179 dw 0x43D1 ; PULSEWIDTH: 180 dw 0x4371 ; PULSEWIDTH: 181 dw 0x4312 ; PULSEWIDTH: 182 dw 0x42B4 ; PULSEWIDTH: 183 dw 0x4257 ; PULSEWIDTH: 184 dw 0x41FB ; PULSEWIDTH: 185 dw 0x41A1 ; PULSEWIDTH: 186 dw 0x4147 ; PULSEWIDTH: 187 dw 0x40EE ; PULSEWIDTH: 188 dw 0x4096 ; PULSEWIDTH: 189 dw 0x403F ; PULSEWIDTH: 190 dw 0x3FE9 ; PULSEWIDTH: 191 dw 0x3F94 ; PULSEWIDTH: 192 dw 0x3F3F ; PULSEWIDTH: 193 dw 0x3EEC ; PULSEWIDTH: 194 dw 0x3E99 ; PULSEWIDTH: 195 dw 0x3E47 ; PULSEWIDTH: 196 dw 0x3DF6 ; PULSEWIDTH: 197 dw 0x3DA6 ; PULSEWIDTH: 198 dw 0x3D57 ; PULSEWIDTH: 199 dw 0x3D09 ; PULSEWIDTH: 200 dw 0x3CBB ; PULSEWIDTH: 201 dw 0x3C6E ; PULSEWIDTH: 202 dw 0x3C22 ; PULSEWIDTH: 203 dw 0x3BD6 ; PULSEWIDTH: 204 dw 0x3B8B ; PULSEWIDTH: 205 dw 0x3B41 ; PULSEWIDTH: 206 dw 0x3AF8 ; PULSEWIDTH: 207 dw 0x3AB0 ; PULSEWIDTH: 208 dw 0x3A68 ; PULSEWIDTH: 209 dw 0x3A20 ; PULSEWIDTH: 210 dw 0x39DA ; PULSEWIDTH: 211 dw 0x3994 ; PULSEWIDTH: 212 dw 0x394F ; PULSEWIDTH: 213 dw 0x390A ; PULSEWIDTH: 214 dw 0x38C6 ; PULSEWIDTH: 215 dw 0x3883 ; PULSEWIDTH: 216 dw 0x3840 ; PULSEWIDTH: 217 dw 0x37FE ; PULSEWIDTH: 218 dw 0x37BD ; PULSEWIDTH: 219 dw 0x377C ; PULSEWIDTH: 220 dw 0x373C ; PULSEWIDTH: 221 dw 0x36FC ; PULSEWIDTH: 222 dw 0x36BD ; PULSEWIDTH: 223 dw 0x367E ; PULSEWIDTH: 224 dw 0x3640 ; PULSEWIDTH: 225 dw 0x3603 ; PULSEWIDTH: 226 dw 0x35C6 ; PULSEWIDTH: 227 dw 0x358A ; PULSEWIDTH: 228 dw 0x354E ; PULSEWIDTH: 229 dw 0x3512 ; PULSEWIDTH: 230 dw 0x34D8 ; PULSEWIDTH: 231 dw 0x349D ; PULSEWIDTH: 232 dw 0x3464 ; PULSEWIDTH: 233 dw 0x342A ; PULSEWIDTH: 234 dw 0x33F1 ; PULSEWIDTH: 235 dw 0x33B9 ; PULSEWIDTH: 236 dw 0x3381 ; PULSEWIDTH: 237 dw 0x334A ; PULSEWIDTH: 238 dw 0x3313 ; PULSEWIDTH: 239 dw 0x32DC ; PULSEWIDTH: 240 dw 0x32A6 ; PULSEWIDTH: 241 dw 0x3271 ; PULSEWIDTH: 242 dw 0x323C ; PULSEWIDTH: 243 dw 0x3207 ; PULSEWIDTH: 244 dw 0x31D3 ; PULSEWIDTH: 245 dw 0x319F ; PULSEWIDTH: 246 dw 0x316B ; PULSEWIDTH: 247 dw 0x3138 ; PULSEWIDTH: 248 dw 0x3106 ; PULSEWIDTH: 249 dw 0x30D4 ; PULSEWIDTH: 250 dw 0x30A2 ; PULSEWIDTH: 251 dw 0x3070 ; PULSEWIDTH: 252 dw 0x303F ; PULSEWIDTH: 253 dw 0x300F ; PULSEWIDTH: 254 dw 0x2FDE ; PULSEWIDTH: 255 Quote Link to comment Share on other sites More sharing options...
TK. Posted September 2, 2007 Report Share Posted September 2, 2007 I fear that much more modifications have to be added (I cannot write them down "blind" without trying them out by myself)First of all, DEFAULT_EXT_CLK_PULSEWIDTH is a constant value, which will be compiled directly into the firmware. In cv_clk.inc, it will be loaded with "movlw", but if you want to use it as a variable, it would have to be loaded with "movf <name>, W", where <name> is a free register address defined in app_defines.inc(e.g., 0x60 is free, you could use it)Second issue: the pulsewidth is a 8bit value (0..255) which allows you to vary the width from 500 uS... 127.5 mS. The delay counter in cv_clk.inc has to be changed to 16bit in order to achieve delays >= 128 mSAccordingly, also the PULSEWIDTH variable needs to be 16bit (PULSEWIDTH_L, PULSEWIDTH_H, assigned to addresses 0x60 and 0x61)Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
sneakthief Posted September 3, 2007 Author Report Share Posted September 3, 2007 Vielen Dank, Thorsten.The best way for me to learn this is to try it out myself :) Quote Link to comment Share on other sites More sharing options...
sneakthief Posted September 3, 2007 Author Report Share Posted September 3, 2007 Oops - I just remembered that J5 is used for the Gate Outputs! However, there are also two extra pins used as gate outputs on the AOUT board. Ugh, I'm going to have to disable one of the gate-out J5 pins and reassign it as a pot input.Thanks goodness for this line in j5_dout.inc: ;; (note: if you want to use some of them as input instead, just set the appr. line to "bsf TRISx, x" (also - does the Pulsewidth have to be a 16bit if I interpolate values between .5ms and 1s? Can't I just use a select number of pre-defined pulse widths from a table?)Thanks!michel Quote Link to comment Share on other sites More sharing options...
sneakthief Posted September 3, 2007 Author Report Share Posted September 3, 2007 OK - I sort of have it working - even though I didn't use CV_CLK_PULSEWIDTH_L or CV_CLK_PULSEWIDTH_H (uh-oh!)If I send Pin 1 of J5 0v, the pulse is really short. If I send it close to 5V, the pulse is much longer. Good so far. But it's not a linear function - sometimes it get shorter, sometimes longer (and vice versa) as I turn the pot. I'm obviously manipulating this variable incorrectly.This is what I've done so far: main.asm- Added: ;; set this define to 1 if you want to use pots #define USE_POTS 1 ;; initialize the AIN driver ;; use 1 pot #if USE_POTS movlw 1 #else movlw 0 #endif call MIOS_AIN_NumberSet ======================================= USER_AIN_NotifyChange ;; if pot number == 0, set the DEFAULT_EXT_CLK_PULSEWIDTH movf MIOS_PARAMETER1, W ;; we have a 10-bit result in MIOS_PARAMETER[23], but need a 8-bit value ;; shift value two times to the right (-> value / 4) clrc rrf MIOS_PARAMETER3, F ; 1 rrf MIOS_PARAMETER2, F clrc rrf MIOS_PARAMETER3, F ; 2 rrf MIOS_PARAMETER2, W ; -> WREG ;; 8-bit result is now in WREG, store value into DEFAULT_EXT_CLK_PULSEWIDTH register call PULSEWIDTH_Set ; with this function return app_defines.h -Added: CV_CLK_PULSEWIDTH_L EQU 0x60 ; used by cv_clk.inc CV_CLK_PULSEWIDTH_H EQU 0x61 ; used by cv_clk.inc cv_clk.inc - Changed: movf DEFAULT_EXT_CLK_PULSEWIDTH, W ; changed from - movlw DEFAULT_EXT_CLK_PULSEWIDTH j5_dout.inc - Changed: bsf TRISA, 0 ; Pin RA.0 = output off (chaged from bcf) app_ain.inc - New routine: PULSEWIDTH_Set ;; copy MIOS_PARAMETER2 to DEFAULT_EXT_CLK_PULSEWIDTH movff MIOS_PARAMETER2, DEFAULT_EXT_CLK_PULSEWIDTH return Am I smoking crack here? What's going on here? Quote Link to comment Share on other sites More sharing options...
stryd_one Posted September 4, 2007 Report Share Posted September 4, 2007 I had a very quick look and I don't know MBCV well... Only one thing stood out immediately... Are all the necessary bank selects called before these code snippets? Quote Link to comment Share on other sites More sharing options...
bugfight Posted September 4, 2007 Report Share Posted September 4, 2007 did you declare DEFAULT_EXT_CLK_PULSEWIDTH? Quote Link to comment Share on other sites More sharing options...
sneakthief Posted September 4, 2007 Author Report Share Posted September 4, 2007 It's already declared in main.asm as part of the MIDIbox CV code:#define DEFAULT_EXT_CLK_PULSEWIDTH 1 Quote Link to comment Share on other sites More sharing options...
bugfight Posted September 4, 2007 Report Share Posted September 4, 2007 It's already declared in main.asm as part of the MIDIbox CV code:#define DEFAULT_EXT_CLK_PULSEWIDTH 1that's not a variable declaration and this is probably your problem.this is a precompiler directive which tells the compiler to use this as a constant.(actually replaces the name with the value before compiling)to declare a variable you need equ and register address....First of all, DEFAULT_EXT_CLK_PULSEWIDTH is a constant value, which will be compiled directly into the firmware....(e.g., 0x60 is free, you could use it)...so you need (for example):SNEAK_THIEF_CW_VAR EQU 0x060and replace DEFAULT_EXT_CLK_PULSEWIDTH in the code you added with SNEAK_THIEF_CW_VAR(name the var something better, hehe) edit: just saw you are using that addy already.still you are using DEFAULT_EXT_CLK_PULSEWIDTH like a var when it is const,so writing to it writes to resister address 0x01reading like a var instead of const also will use reg 0x01...anywhere you wanted to write to DEFAULT_EXT_CLK_PULSEWIDTHwrite instead to CV_CLK_PULSEWIDTH_L and CV_CLK_PULSEWIDTH_Hok someone familiar with the code that actually sets the clock width will need to step in to help convert that code to use yournew 16 bit value, CV_CLK_PULSEWIDTH_L, and CV_CLK_PULSEWIDTH_H.(i'm not that guy) Quote Link to comment Share on other sites More sharing options...
sneakthief Posted September 5, 2007 Author Report Share Posted September 5, 2007 thanks jimp, i was also wondering about that constant vs. variable issue too. i'll continue muddling along with this tonight :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.