Thanks Bruce !
I will check here were I live, if I can buy this device.
But, thank you for your advice !
Do you have tips on how to use the CCP4 and/or CCP5 on this device ?
Regards .
Sérgio
Thanks Bruce !
I will check here were I live, if I can buy this device.
But, thank you for your advice !
Do you have tips on how to use the CCP4 and/or CCP5 on this device ?
Regards .
Sérgio
Here's an example of measuring a 32kHz signal on RA2 with the Motion Feedback Capture. It's pretty simple to use.
Returns;Code:DEFINE OSC 4 DEFINE DEBUG_REG PORTC DEFINE DEBUG_BIT 6 DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 ' 1 = inverted, 0 = true T1 VAR WORD T2 VAR WORD T3 VAR WORD Capture VAR PIR3.1 False CON 0 True CON 1 ' auto time base reset, capture on rising to falling edge RiseToFall CON %01000111 ' auto time base reset, capture on falling to rising edge FallToRise CON %01000110 ' auto time base reset, frequency mode, capture on every rising edge Frequency CON %01000101 ANSEL0 = 0 ' All digital TRISA.2 = 1 ' Cap1 input pin (Capture input) INTCON = 0 ' Interrupts off TMR5H = 0 ' Clear high byte of TMR5 counter TMR5L = 0 ' Clear low byte T5CON = %00000001 ' prescale=1:1, int clock, TMR5=on GOTO Main Trash: ' Trash 1st capture after capture mode changes Capture = False ' Reset capture flag WHILE Capture = False ' Wait for capture WEND ' Capture = False ' Reset capture flag RETURN ' Return Main: GOSUB LtoH GOSUB HtoL GOSUB Freq PAUSE 500 GOTO Main LtoH: ' Capture on falling to rising edge CAP1CON = FallToRise GOSUB Trash WHILE Capture = False WEND T1.HighByte = CAP1BUFH ' high byte T1.LowByte = CAP1BUFL ' low byte DEBUG "Low PW = ",DEC T1,"uS",13,10 RETURN HtoL: ' Capture on rising to falling edge CAP1CON = RiseToFall GOSUB Trash WHILE Capture = False WEND T2.HighByte = CAP1BUFH T2.LowByte = CAP1BUFL DEBUG "High PW = ",DEC T2,"uS",13,10 RETURN Freq: ' Frequency measurement mode, capture every rising edge ' to measure period CAP1CON = Frequency GOSUB Trash WHILE Capture = False WEND T3.HighByte = CAP1BUFH T3.LowByte = CAP1BUFL DEBUG "Freq = 1/",DEC T3,"uS",13,10 RETURN END
High PW = 17uS
Low PW = 14uS
Freq = 1/31uS
This 18F series has a boat-load of nifty features. Check out how fast the A/D
is. Should be a killer PIC for robotics applications.
Code:duty var word ansel0=%00000000 'all digital 'ansel1=%00000000 trisa=%11111111 'set all port a pins to input cap1,cap2,cap3 trisb=%00000000 'set all port b pins as output portb=%00000000 'set port b to all zero trisc = 2 ' rc1=flta input(ground pin 16 to stop) pin 16 high to run 'capture mode intcon =0 'interrupts off tmr5h = 0 'clean high byte of tm5 counter tmr5l = 0 'clean low byte t5con = %00000001 ' prescale 1:1, int clock, tmr5 =on cap1con=%01000101 ' enable caputure,pulse width measurement mode, 'every rising o falling edge cap2con=%01000101 cap3con=%01000101 where is the capture data go from here ' ovdcond=%00010010 'turn on / off pwm pins 'ovdcons=%00000000 'pcpwm init dtcon = %00000101 'set deadtime to -500ns ptcon0 =%00000000 ' 1:1 postscaale,fosc/4 1:1 prescale, free run mode ptperl =0 ptperh=1 pwmcon0= %01010000 'pwm[5:0] output enabled 0100pwm4,5 independent, 'pwm0,1,2,3 complementary pwmcon1=1 'update enable,overrides sync w/time ptcon1=%10000000 'pwm time base is on, counts up fltconfig = %00000011 ' enable fault a, cycle-by-cycle mode duty =100 ' 50% =800 PDC2L = duty.lowbyte 'main a fixed 50% duty cycle on pwm4,5 PDC2H = duty.highbyte 'independent pwm outputs. main: for duty = 900 to 100 step-1 ' 10% to 90% PDC0L = duty.lowbyte 'register controls pwm1/0 PDC0H = duty.highbyte PDC1L = duty.lowbyte 'register controls pwm3/2 PDC1H = duty.highbyte PDC3L = duty.lowbyte 'register controls pwm6/7 PDC3H = duty.highbyte pause 50 next duty pause 500' 1/2 second delay between ramp up / down for duty = 100 to 900 ' 90% to 10% PDC0L = duty.lowbyte PDC0H = duty.highbyte PDC1L = duty.lowbyte PDC1H = duty.highbyte PDC3L = duty.lowbyte PDC3H = duty.highbyte pause 5 next duty pause 500' 1/2 second delay between ramp up / down goto main end
Last edited by ScaleRobotics; - 25th July 2010 at 17:47. Reason: added code tags
Here's how I monitor instant fuel consumption...
trying to us motion feedback module with capture on state mode on pins 3,4,5
If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
.
Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
.
There simply is no "Happy Spam" If you do it you will disappear from this forum.
http://www.sparkfun.com/commerce/pro...roducts_id=569
It's the same screen that I posted the color lcd code to here awhile back.
Straight OBD2 data, mass air, temp, pressures, etc.etc.etc. Do enough math, mainly unit conversions and a bit of integration, and you can get almost anything you want out of OBD2...although the outputs are all 'estimated' because they're all derived from formulas with a few generic numbers (i.e. fudge factors) thrown in. But based on my driving over the past 8,000-ish miles, that 'estimation' seems to be quite accurate.What are you measuring the fuel flow with? ( the mpg goes over 60 due to the computer shuts off the fuel completely when decellerating. Impressive work.
And when the mileage goes over 60...
The Nissan I've got ('98 200SX) isn't very aggressive at decel fuel cutoff like todays vehicles are. Based on my datalogging and calculations, if I'm doing 65mph and I let off the gas, I only get complete cutoff under certain conditions (above 2000 rpm, above 25mph, closed throttle, MAF below 500grams/sesc, MAP below 6 in/hg, calc.load.val below 10%). Other than that, I figure it goes open loop and tries to hit an A/F of about 25:1. Apparently, today's vehicles go to decel cutoff as soon as you think about slowing down (which accounts for some of todays vehicles being a just a little bit jerky at lower throttle settings in my experience).
Bookmarks