--_003_55E077D51030301yahoocombr_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable I just found that my BAM() routine took more cycles than the time of the LSB, so it messed things up. I was using 'memcpy', that took alone 390 tcy and a loop that took 182 cycles. After some code changes, the routine works OK. There was another mistake that made the delay of the previous bit being used, instead of the current bit. Expecting a PIC16F work OK for this application may be wishing too much. Isaac Em 28/08/2015 10:30, Isaac Marino Bavaresco escreveu: > Hi Josh! > > > I did not know BAM, but after I read your post I found it interesting, > so I wrote some code to test an idea. > It seems to be working OK, please see the attached file. > > > Cheers, > > Isaac > > > > > > Em 27/08/2015 11:10, Josh Koffman escreveu: >> Hi all, >> >> Amongst all the other things on my plate right now, I'd like to make a >> small library to do Bit Angle Modulation on some of my projects. I >> made one years ago in assembly, but now I'd like to do it in XC8. >> >> For reference, there are some great posts on BAM on the PicBasic forums = here: >> >> http://www.picbasic.co.uk/forum/showthread.php?p=3D45597 >> http://www.picbasic.co.uk/forum/showthread.php?t=3D10564 >> >> Because the PIC will be doing many things, I am considering using a >> high priority interrupt for the BAM, but keeping my high priority ISR >> as small as possible (which is probably a good idea regardless). To >> accomplish this, I want to create the 8 "slices" that I will output in >> my main line, so that all the BAM ISR has to do is take that variable >> and put it on the port. >> >> My question is, what would be the best way to handle this in C? When I >> did it in assembly I used a rotate (rotate right if I remember >> correctly), then read the carry bit. But then I was also doing it at >> the moment of outputting, so there was no intermediate stored >> variable. >> >> My current thought is to define a typedef that lets me access the >> individual bits, then a bunch of if/else statements that check the bit >> of the source value, and if it's a 1 set the bit of the corresponding >> "slice" variable. This would result in a lot of if statements though, >> so I'm wondering if there's a slicker way to do this. >> >> I'm trying to avoid dropping into ASM to do this for a few reasons. >> >> Any thoughts? >> >> Thanks! >> >> Josh > > --_003_55E077D51030301yahoocombr_ Content-Type: text/plain; name="BAM.c" Content-Description: BAM.c Content-Disposition: attachment; filename="BAM.c"; size=6275; creation-date="Fri, 28 Aug 2015 15:08:06 GMT"; modification-date="Fri, 28 Aug 2015 15:08:06 GMT" Content-Transfer-Encoding: base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ki8NCi8qDQogQ29weXJpZ2h0IChjKSAyMDE1LCBJc2FhYyBN YXJpbm8gQmF2YXJlc2NvDQogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgbWV0Og0KICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAqIE5laXRo ZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlDQogICAgICAgbmFtZXMgb2YgaXRzIGNv bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAg ICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4NCg0KIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUiAnJ0FTIElTJycgQU5EIEFOWQ0KIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCiBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF DQogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S IEFOWQ0KIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg Q0FVU0VEIEFORA0KIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCiBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4NCiovDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLyoNClBST0NFU1NPUjoJCVBJQzE2RjY0 OEENCkNMT0NLOgkJCTIwIE1Ieg0KQkFNIGZyZXF1ZW5jeToJMTAwIEh6IChhcHByb3hpbWF0ZWx5 KQ0KKi8NCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQojaW5jbHVkZSA8cGljLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KI2RlZmluZQlUYXNrU3RhcnQo KQlzdGF0aWMgdW5zaWduZWQgaW50IF9fU3RhdGUgPSAwOyBzd2l0Y2goIF9fU3RhdGUgKXsgZGVm YXVsdDogY2FzZSAwOiA7DQojZGVmaW5lCVRhc2tFbmQoKQl9DQojZGVmaW5lCVlpZWxkKCkJCWRv IHsgX19TdGF0ZSA9IF9fTElORV9fOyByZXR1cm47IGNhc2UgX19MSU5FX186IDsgfSB3aGlsZSgg MCApDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLyogSG9sZCB0aGUgdmFsdWVzIGZvciB0aGUg QkFNIGNoYW5uZWxzICovDQp1bnNpZ25lZCBjaGFyCUJBTVZhbHVlc1s4XTsNCi8qPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSovDQovKiBUaGUgdmFsdWUgd2FzIHJvdW5kZWQgdG8gYSBtdWx0aXBsZSBvZiAy NTYgKi8NCiNkZWZpbmUJQkFNX1BFUklPRAk0OTkyMA0KLyo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N Cg0Kdm9pZCBCQU0oIHZvaWQgKQ0KCXsNCglzdGF0aWMgIHNpZ25lZCBjaGFyCQlCaXQ7DQoJc3Rh dGljICB1bnNpZ25lZCBjaGFyCUJBTVNoYWRvd3NbOF07DQoJc3RhdGljICB1bnNpZ25lZCBjaGFy CU91dHB1dHM7DQoJc3RhdGljICB1bnNpZ25lZCBzaG9ydAlTbGljZUxlbmd0aDsNCglzdGF0aWMg IHVuc2lnbmVkIHNob3J0CUNDUFIxU2hhZG93Ow0KCXVuc2lnbmVkIGNoYXIJCQlDaGFubmVsOw0K CXVuc2lnbmVkIGNoYXIJCQkqcDsNCg0KCS8qIE1hZ2ljLi4uICovDQoJVGFza1N0YXJ0KCk7DQoN CgkvKiBUaGUgdmVyeSBmaXJzdCBpbnRlcnJ1cHQgZG9lcyBub3QgYmVsb25nIHRvIGFueSBCQU0g Y3ljbGUuDQoJICAgV2Ugd2lsbCBuZXZlciByZWFjaCBoZXJlIGFnYWluIHdpdGhvdXQgYSBDUFUg cmVzZXQuDQoNCgkgICBUaGUgZmlyc3QgQkFNIGN5Y2xlIGlzIGR1bW15LCBhbGwgdmFsdWVzIGFy ZSB6ZXJvLg0KCSovDQoJU2xpY2VMZW5ndGgJPSBCQU1fUEVSSU9EOw0KDQoJd2hpbGUoIDEgKQ0K CQl7DQoJCS8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgYml0cyBvZiB0aGUgQkFNIHZhbHVlcyAqLw0K CQlmb3IoIEJpdCA9IDc7IEJpdCA+PSAwOyBCaXQtLSApDQoJCQl7DQoJCQkvKiBDbGVhciAnT3V0 cHV0cycganVzdCB0byBlbnN1cmUgdGhlIHJpZ2h0LXNoaWZ0cyB3aWxsIG5vdA0KCQkJICAgd2Fs ayBhIE1TQiA9ICcxJyAocHJvYmFibHkgbm90IG5lY2Vzc2FyeSkNCgkJCSovDQoJCQlPdXRwdXRz CQk9IDA7DQoJCQkvKiBDb3B5IG9uZSBiaXQgZnJvbSBlYWNoIHNoYWRvdyB0byB0aGUgb3V0cHV0 IHZhbHVlICovDQoNCg0KI2lmCSAgCQlkZWZpbmVkIEFfREVDRU5UX0NPTVBJTEVSDQoNCgkJCS8q IEFBQUdIISEhIFRoaXMgY29tcGlsZXIgaXMgYXdmdWwhISEhISBMb29wIHRha2VzIDE4MiBjeWNs ZXMgISEhISAqLw0KCQkJZm9yKCBwID0gQkFNU2hhZG93cywgQ2hhbm5lbCA9IDg7IENoYW5uZWwg IT0gMDsgQ2hhbm5lbC0tICkNCgkJCQl7DQoJCQkJT3V0cHV0cwkgID4+PSAxOw0KCQkJCU91dHB1 dHMJICAgfD0gKnAgJiAweDgwOw0KCQkJCSpwCQkgIDw8PSAxOw0KCQkJCX0NCg0KI2Vsc2UJLyoJ ZGVmaW5lZCBBX0RFQ0VOVF9DT01QSUxFUiAqLw0KDQoJCQlPdXRwdXRzCSAgIHw9IEJBTVNoYWRv d3NbMF0gJiAweDgwOw0KCQkJQkFNU2hhZG93c1swXSA8PD0gMTsNCgkJCU91dHB1dHMJICA+Pj0g MTsNCgkJCU91dHB1dHMJICAgfD0gQkFNU2hhZG93c1sxXSAmIDB4ODA7DQoJCQlCQU1TaGFkb3dz WzFdIDw8PSAxOw0KCQkJT3V0cHV0cwkgID4+PSAxOw0KCQkJT3V0cHV0cwkgICB8PSBCQU1TaGFk b3dzWzJdICYgMHg4MDsNCgkJCUJBTVNoYWRvd3NbMl0gPDw9IDE7DQoJCQlPdXRwdXRzCSAgPj49 IDE7DQoJCQlPdXRwdXRzCSAgIHw9IEJBTVNoYWRvd3NbM10gJiAweDgwOw0KCQkJQkFNU2hhZG93 c1szXSA8PD0gMTsNCgkJCU91dHB1dHMJICA+Pj0gMTsNCgkJCU91dHB1dHMJICAgfD0gQkFNU2hh ZG93c1s0XSAmIDB4ODA7DQoJCQlCQU1TaGFkb3dzWzRdIDw8PSAxOw0KCQkJT3V0cHV0cwkgID4+ PSAxOw0KCQkJT3V0cHV0cwkgICB8PSBCQU1TaGFkb3dzWzVdICYgMHg4MDsNCgkJCUJBTVNoYWRv d3NbNV0gPDw9IDE7DQoJCQlPdXRwdXRzCSAgPj49IDE7DQoJCQlPdXRwdXRzCSAgIHw9IEJBTVNo YWRvd3NbNl0gJiAweDgwOw0KCQkJQkFNU2hhZG93c1s2XSA8PD0gMTsNCgkJCU91dHB1dHMJICA+ Pj0gMTsNCgkJCU91dHB1dHMJICAgfD0gQkFNU2hhZG93c1s3XSAmIDB4ODA7DQoJCQlCQU1TaGFk b3dzWzddIDw8PSAxOw0KDQojZW5kaWYJLyoJZGVmaW5lZCBBX0RFQ0VOVF9DT01QSUxFUiAqLw0K DQoJCQkvKiBTZXQgdGhlIENDUFIgbW9kdWxlIHRvIGludGVycnVwdCBhdCB0aGUgY29ycmVjdCB0 aW1lICovDQoJCQlDQ1BSMUwJCQk9ICh1bnNpZ25lZCBjaGFyKSggQ0NQUjFTaGFkb3cgPj4gMCAp Ow0KCQkJQ0NQUjFICQkJPSAodW5zaWduZWQgY2hhcikoIENDUFIxU2hhZG93ID4+IDggKTsNCgkJ CS8qIEhlcmUgd2UgZXhpdCBmcm9tIHRoZSBJU1IuLiAqLw0KCQkJWWllbGQoKTsNCgkJCS8qIC4u LiB0byBtYWdpY2FsbHkgY29tZSBiYWNrIGhlcmUgYWZ0ZXIgdGhlIENDUDEgZGVsYXkuICovDQoJ CQkvKiBPdXRwdXQgdGhlIGN1cnJlbnQgYml0IHZhbHVlcyAqLw0KCQkJUE9SVEIJCQk9IE91dHB1 dHM7DQoJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgb2YgdGhlIG5leHQgaW50ZXJydXB0ICovDQoJ CQlDQ1BSMVNoYWRvdwkgICArPSBTbGljZUxlbmd0aDsNCgkJCS8qIFRoZSBuZXh0IGRlbGF5IHdp bGwgYmUgaGFsZiB0aGUgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBvbmUgKi8NCgkJCVNsaWNlTGVu Z3RoCSAgPj49IDE7DQoJCQl9DQoJCS8qIENvcHkgdGhlIGN1cnJlbnQgQkFNIHZhbHVlcyB0byBz dGFydCBhIG5ldyBjeWNsZSAqLw0KDQojaWYJCQlkZWZpbmVkIEFfREVDRU5UX0NPTVBJTEVSDQoN CgkJLyogQUFHSCEhISBUaGlzIG1lbWNweSB0YWtlcyAzNzAgaW5zdHJ1Y3Rpb24gY3ljbGVzISEh ISEgKi8NCgkJbWVtY3B5KCAmQkFNU2hhZG93cywgJkJBTVZhbHVlcywgc2l6ZW9mIEJBTVNoYWRv d3MgKTsNCg0KI2Vsc2UJLyoJZGVmaW5lZCBBX0RFQ0VOVF9DT01QSUxFUiAqLw0KDQoJCUJBTVNo YWRvd3NbMF0JPSBCQU1WYWx1ZXNbMF07DQoJCUJBTVNoYWRvd3NbMV0JPSBCQU1WYWx1ZXNbMV07 DQoJCUJBTVNoYWRvd3NbMl0JPSBCQU1WYWx1ZXNbMl07DQoJCUJBTVNoYWRvd3NbM10JPSBCQU1W YWx1ZXNbM107DQoJCUJBTVNoYWRvd3NbNF0JPSBCQU1WYWx1ZXNbNF07DQoJCUJBTVNoYWRvd3Nb NV0JPSBCQU1WYWx1ZXNbNV07DQoJCUJBTVNoYWRvd3NbNl0JPSBCQU1WYWx1ZXNbNl07DQoJCUJB TVNoYWRvd3NbN10JPSBCQU1WYWx1ZXNbN107DQoNCiNlbmRpZgkvKglkZWZpbmVkIEFfREVDRU5U X0NPTVBJTEVSICovDQoNCgkJLyogVGhlIGZpcnN0IGJpdCBvZiB0aGUgY3ljbGUgdGFrZXMgaGFs ZiB0aGUgdG90YWwgdGltZSAqLw0KCQlTbGljZUxlbmd0aAk9IEJBTV9QRVJJT0QgLyAyOw0KCQl9 DQoNCgkvKiBNYWdpYy4uLiAqLw0KCVRhc2tFbmQoKTsNCgl9DQovKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLw0Kdm9pZCBpbnRlcnJ1cHQgSVNSKCB2b2lkICkNCgl7DQoJaWYoIENDUDFJRiAmJiBDQ1Ax SUUgKQ0KCQl7DQoJCUNDUDFJRgk9IDA7DQoJCUJBTSgpOw0KCQl9DQoJfQ0KLyo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ki8NCnZvaWQgbWFpbiggdm9pZCApDQoJew0KCUNNQ09OCT0gMHgwNzsNCg0KCVBP UlRBCT0gMDsNCglQT1JUQgk9IDA7DQoNCglUUklTQQk9IDA7DQoJVFJJU0IJPSAwOw0KDQoJVE1S MUwJPSAwOw0KCVRNUjFICT0gMDsNCg0KCUNDUFIxTAk9IDE7DQoJQ0NQUjFICT0gMDsNCg0KCUND UDFDT04JPSAweDBhOw0KDQoJQ0NQMUlGCT0gMDsNCglDQ1AxSUUJPSAxOw0KDQoJUEVJRQk9IDE7 DQoJR0lFCQk9IDE7DQoNCglUTVIxT04JPSAxOw0KDQoJLyogRml4ZWQgdmFsdWVzIGp1c3QgZm9y IHRlc3RpbmcgcHVycG9zZXMgKi8NCglCQU1WYWx1ZXNbMF0JPSAxMDsNCglCQU1WYWx1ZXNbMV0J PSAxMDA7DQoJQkFNVmFsdWVzWzJdCT0gMTI4Ow0KCUJBTVZhbHVlc1szXQk9IDEyNzsNCg0KDQoJ LyogVGhlIHJlYWwgbWFpbiBwcm9ncmFtIHdpbGwgZG8gc29tZXRoaW5nICovDQoJd2hpbGUoIDEg KQ0KCQl7DQoJCUNMUldEVCgpOw0KCQl9DQoJfQ0KLyo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCg== --_003_55E077D51030301yahoocombr_ Content-Type: text/plain; name="ATT00001.txt" Content-Description: ATT00001.txt Content-Disposition: attachment; filename="ATT00001.txt"; size=224; creation-date="Fri, 28 Aug 2015 15:08:06 GMT"; modification-date="Fri, 28 Aug 2015 15:08:06 GMT" Content-Transfer-Encoding: base64 LS0gDQpodHRwOi8vd3d3LnBpY2xpc3QuY29tL3RlY2hyZWYvcGljbGlzdCBQSUMvU1ggRkFRICYg bGlzdCBhcmNoaXZlDQpWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdA0KaHR0 cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QNCg== --_003_55E077D51030301yahoocombr_-- .